]>
Commit | Line | Data |
---|---|---|
1 | #include <util/twi.h> | |
2 | #include <avr/interrupt.h> | |
3 | #include <stdio.h> | |
4 | #include "i2c.h" | |
5 | ||
6 | #define TWCR_ACK TWCR = (1<<TWEN)|(1<<TWIE)|(1<<TWINT)|(1<<TWEA)|(0<<TWSTA)|(0<<TWSTO)|(0<<TWWC); | |
7 | #define TWCR_NACK TWCR = (1<<TWEN)|(1<<TWIE)|(1<<TWINT)|(0<<TWEA)|(0<<TWSTA)|(0<<TWSTO)|(0<<TWWC); | |
8 | #define TWCR_RESET TWCR = (1<<TWEN)|(1<<TWIE)|(1<<TWINT)|(1<<TWEA)|(0<<TWSTA)|(1<<TWSTO)|(0<<TWWC); | |
9 | ||
10 | void i2c_init() | |
11 | { | |
12 | TWAR = BMC_ADDR & 0xfe; | |
13 | TWDR = 0x00; | |
14 | TWCR &= ~((1<<TWSTA) | (1<<TWSTO)); | |
15 | TWCR |= ((1<<TWEA) | (1<<TWEN) | (1<<TWIE)); | |
16 | printf("Status: 0x%02x\n", TW_STATUS); | |
17 | PORTC = 0x03; | |
18 | } | |
19 | ||
20 | ISR (TWI_vect, ISR_BLOCK) | |
21 | { | |
22 | printf("Interrupt, Status: 0x%02x, Data: 0x%02x!\n", TW_STATUS, TWDR); | |
23 | ||
24 | switch (TW_STATUS) { | |
25 | default: | |
26 | TWCR_ACK; | |
27 | break; | |
28 | } | |
29 | } |