Started following some tutorial on att85 usi. Downloaded example code from make avr book.
This commit is contained in:
39
Make AVR Examples/Chapter17_I2C/loggingThermometer/i2c.c
Normal file
39
Make AVR Examples/Chapter17_I2C/loggingThermometer/i2c.c
Normal file
@@ -0,0 +1,39 @@
|
||||
#include "i2c.h"
|
||||
|
||||
void initI2C(void) {
|
||||
/* set pullups for SDA, SCL lines */
|
||||
I2C_SDA_PORT |= ((1 << I2C_SDA) | (1 << I2C_SCL));
|
||||
TWBR = 32; /* set bit rate (p.242): 8MHz / (16+2*TWBR*1) ~= 100kHz */
|
||||
TWCR |= (1 << TWEN); /* enable */
|
||||
}
|
||||
|
||||
void i2cWaitForComplete(void) {
|
||||
loop_until_bit_is_set(TWCR, TWINT);
|
||||
}
|
||||
|
||||
void i2cStart(void) {
|
||||
TWCR = (_BV(TWINT) | _BV(TWEN) | _BV(TWSTA));
|
||||
i2cWaitForComplete();
|
||||
}
|
||||
|
||||
void i2cStop(void) {
|
||||
TWCR = (_BV(TWINT) | _BV(TWEN) | _BV(TWSTO));
|
||||
}
|
||||
|
||||
uint8_t i2cReadAck(void) {
|
||||
TWCR = (_BV(TWINT) | _BV(TWEN) | _BV(TWEA));
|
||||
i2cWaitForComplete();
|
||||
return (TWDR);
|
||||
}
|
||||
|
||||
uint8_t i2cReadNoAck(void) {
|
||||
TWCR = (_BV(TWINT) | _BV(TWEN));
|
||||
i2cWaitForComplete();
|
||||
return (TWDR);
|
||||
}
|
||||
|
||||
void i2cSend(uint8_t data) {
|
||||
TWDR = data;
|
||||
TWCR = (_BV(TWINT) | _BV(TWEN)); /* init and enable */
|
||||
i2cWaitForComplete();
|
||||
}
|
||||
Reference in New Issue
Block a user