Subversion Repositories Projects

Rev

Rev 28 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 28 Rev 51
1
//############################################################################
1
//############################################################################
2
// - PPM2PentaxIR Uart for Debug only
2
// - PWM CTRL 
3
// - ATMEGA8 mit 8MHz
3
// - ATMEGA8 mit 8MHz
4
// - Nur für den privaten Gebrauch
4
// - Nur für den privaten Gebrauch
5
// - Keine Garantie auf Fehlerfreiheit
5
// - Keine Garantie auf Fehlerfreiheit
6
// - Kommerzielle Nutzung nur mit meiner Zustimmung
6
// - Kommerzielle Nutzung nur mit meiner Zustimmung
7
// - walter Meyer @ www.freakware.de
7
// - walter Meyer @ www.freakware.de
8
//############################################################################*/
8
//############################################################################*/
9
#include <avr/io.h>
9
#include <avr/io.h>
10
#include <util/twi.h>
10
#include <util/twi.h>
11
#include "main.h"
11
#include "main.h"
12
#include "twislave.h"
12
#include "twislave.h"
13
 
13
 
14
unsigned char I2C_IN;
14
unsigned char I2C_IN;
15
 
15
 
16
 
16
 
17
//############################################################################
17
//############################################################################
18
//I2C (TWI) Interface Init
18
//I2C (TWI) Interface Init
19
void StartI2C(void)
19
void StartI2C(void)
20
//############################################################################
20
//############################################################################
21
{
21
{
22
    TWAR = 0x62;                //I2C client address
22
    TWAR = 0x62;                //I2C client address
23
    TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE) | (1<<TWEA);
23
    TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE) | (1<<TWEA);
24
}
24
}
25
 
25
 
26
//############################################################################
26
//############################################################################
27
//ISR, die bei einem Ereignis auf dem Bus ausgelöst wird. Im Register TWSR befindet
27
//ISR, die bei einem Ereignis auf dem Bus ausgelöst wird. Im Register TWSR befindet
28
//sich dann ein Statuscode, anhand dessen die Situation festgestellt werden kann.
28
//sich dann ein Statuscode, anhand dessen die Situation festgestellt werden kann.
29
SIGNAL (TWI_vect)
29
SIGNAL (TWI_vect)
30
//############################################################################
30
//############################################################################
31
{  
31
{  
32
    switch (TWSR & 0xF8)
32
    switch (TWSR & 0xF8)
33
    {  
33
    {  
34
        case SR_SLA_ACK:  
34
        case SR_SLA_ACK:  
35
            TWCR |= (1<<TWINT);
35
            TWCR |= (1<<TWINT);
36
            return;
36
            return;
37
 
37
 
38
        case SR_PREV_ACK:                       //receive 
38
        case SR_PREV_ACK:                       //receive 
39
            I2C_IN = TWDR;
39
            I2C_IN = TWDR;
40
            TWCR |= (1<<TWINT);
40
            TWCR |= (1<<TWINT);
41
            return;
41
            return;
42
 
42
 
43
        case SW_SLA_ACK:                        //send  0x00
43
        case SW_SLA_ACK:                        //send  0x00
44
            TWDR = 0x00;
44
            TWDR = 0x00;
45
            TWCR |= (1<<TWINT);
45
            TWCR |= (1<<TWINT);
46
            return;
46
            return;
47
 
47
 
48
        case SW_DATA_ACK:                       //send  0x00
48
        case SW_DATA_ACK:                       //send  0x00
49
            TWDR = 0x00;
49
            TWDR = 0x00;
50
            TWCR |= (1<<TWINT);
50
            TWCR |= (1<<TWINT);
51
            return;
51
            return;
52
 
52
 
53
        case TWI_BUS_ERR_2:                     //bus error / reset bus
53
        case TWI_BUS_ERR_2:                     //bus error / reset bus
54
            TWCR |=(1<<TWSTO) | (1<<TWINT);
54
            TWCR |=(1<<TWSTO) | (1<<TWINT);
55
 
55
 
56
        case TWI_BUS_ERR_1:                     //bus error / reset bus
56
        case TWI_BUS_ERR_1:                     //bus error / reset bus
57
            TWCR |=(1<<TWSTO) | (1<<TWINT);
57
            TWCR |=(1<<TWSTO) | (1<<TWINT);
58
    }
58
    }
59
    TWCR =(1<<TWEA) | (1<<TWINT) | (1<<TWEN) | (1<<TWIE); // TWI Reset
59
    TWCR =(1<<TWEA) | (1<<TWINT) | (1<<TWEN) | (1<<TWIE); // TWI Reset
60
}
60
}
61
 
61
 
62
 
62
 
63
 
63