Files
AVR_Learning/Make AVR Examples/Chapter17_I2C/i2cThermometer/i2c.c

39 lines
876 B
C

#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();
}