~ruther/qmk_firmware

410984486b0a5c61174c6e4e5a3570f1b09f97dc — MechMerlin 6 years ago 2ffa479
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
1 files changed, 12 insertions(+), 0 deletions(-)

M drivers/avr/i2c_master.c
M drivers/avr/i2c_master.c => drivers/avr/i2c_master.c +12 -0
@@ 18,6 18,18 @@
void i2c_init(void) {
  TWSR = 0; /* no prescaler */
  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) {