32 lines
843 B
C
32 lines
843 B
C
|
|
#include "i2c.h"
|
||
|
|
|
||
|
|
void init_i2c(void) {
|
||
|
|
// Initialize the control A register
|
||
|
|
TWI0.CTRLA = TWI_INPUTLVL_I2C_gc // I2C voltage transition level
|
||
|
|
| TWI_SDASETUP_4CYC_gc // Four clock cycles setup time
|
||
|
|
| TWI_SDAHOLD_50NS_gc // 50ns SDA hold time
|
||
|
|
| TWI_FMPEN_OFF_gc // Standard SPI timing
|
||
|
|
;
|
||
|
|
|
||
|
|
// The device's slave address
|
||
|
|
TWI0.SADDR = 0x42;
|
||
|
|
|
||
|
|
// Enable acting as a slave
|
||
|
|
TWI0.SCTRLA = TWI_DIEN_bm // Enable data interrupt
|
||
|
|
| TWI_PIEN_bm // Enable stop flag interrupt
|
||
|
|
| TWI_SMEN_bm // Enable smart mode
|
||
|
|
| TWI_ENABLE_bm // Enable acting as a slave
|
||
|
|
;
|
||
|
|
}
|
||
|
|
|
||
|
|
// TODO: Figure out which interrupt does what
|
||
|
|
|
||
|
|
// Interrupt vector
|
||
|
|
ISR(TWI0_TWIS_vect) {
|
||
|
|
asm('nop');
|
||
|
|
}
|
||
|
|
|
||
|
|
// Interrupt vector
|
||
|
|
ISR(TWI0_TWIM_vect) {
|
||
|
|
asm('nop');
|
||
|
|
}
|