10 #include <compat/twi.h>
11 #include "i2cmaster.h"
15 #define SCL_CLOCK 100000L
26 TWBR = ((F_CPU/SCL_CLOCK)-16)/2;
35 unsigned char i2c_start(
unsigned char address)
40 TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
43 while(!(TWCR & (1<<TWINT)));
46 twst = TW_STATUS & 0xF8;
47 if ( (twst != TW_START) && (twst != TW_REP_START))
return 1;
51 TWCR = (1<<TWINT) | (1<<TWEN);
54 while(!(TWCR & (1<<TWINT)));
57 twst = TW_STATUS & 0xF8;
58 if ( (twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK) )
return 1;
71 void i2c_start_wait(
unsigned char address)
79 TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
82 while(!(TWCR & (1<<TWINT)));
85 twst = TW_STATUS & 0xF8;
86 if ( (twst != TW_START) && (twst != TW_REP_START))
continue;
90 TWCR = (1<<TWINT) | (1<<TWEN);
93 while(!(TWCR & (1<<TWINT)));
96 twst = TW_STATUS & 0xF8;
97 if ( (twst == TW_MT_SLA_NACK )||(twst ==TW_MR_DATA_NACK) )
100 TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
103 while(TWCR & (1<<TWSTO));
122 unsigned char i2c_rep_start(
unsigned char address)
124 return i2c_start( address );
135 TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
138 while(TWCR & (1<<TWSTO));
150 unsigned char i2c_write(
unsigned char data )
156 TWCR = (1<<TWINT) | (1<<TWEN);
159 while(!(TWCR & (1<<TWINT)));
162 twst = TW_STATUS & 0xF8;
163 if( twst != TW_MT_DATA_ACK)
return 1;
174 unsigned char i2c_readAck(
void)
176 TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWEA);
177 while(!(TWCR & (1<<TWINT)));
189 unsigned char i2c_readNak(
void)
191 TWCR = (1<<TWINT) | (1<<TWEN);
192 while(!(TWCR & (1<<TWINT)));