Started following some tutorial on att85 usi. Downloaded example code from make avr book.
This commit is contained in:
38
Make AVR Examples/Chapter17_I2C/i2cThermometer/i2c.c
Normal file
38
Make AVR Examples/Chapter17_I2C/i2cThermometer/i2c.c
Normal file
@@ -0,0 +1,38 @@
|
||||
#include "i2c.h"
|
||||
|
||||
void initI2C(void) {
|
||||
TWBR = 32; /* set bit rate, see 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