i2c_init update to work with atmega32a boards (#5562)

* On i2c_init, enable two wire interface, twi interrupt, and slave
address ACK along with pull up resistors.

* thanks to some testing by drashna, we know that setting TWI doesn't work for all boards. Putting the new code into an ifdef block
master
MechMerlin 2019-04-06 17:30:48 -07:00 committed by Drashna Jaelre
parent 2ffa4798a4
commit 410984486b
1 changed files with 12 additions and 0 deletions

View File

@ -18,6 +18,18 @@
void i2c_init(void) { void i2c_init(void) {
TWSR = 0; /* no prescaler */ TWSR = 0; /* no prescaler */
TWBR = (uint8_t)TWBR_val; TWBR = (uint8_t)TWBR_val;
#ifdef __AVR_ATmega32A__
// set pull-up resistors on I2C bus pins
PORTC |= 0b11;
// enable TWI (two-wire interface)
TWCR |= (1 << TWEN);
// enable TWI interrupt and slave address ACK
TWCR |= (1 << TWIE);
TWCR |= (1 << TWEA);
#endif
} }
i2c_status_t i2c_start(uint8_t address, uint16_t timeout) { i2c_status_t i2c_start(uint8_t address, uint16_t timeout) {