From 729a2e830677acc460514ccb827d79bcb88ba4d6 Mon Sep 17 00:00:00 2001 From: Kevin O'Connor Date: Fri, 23 Nov 2018 23:49:26 -0500 Subject: avr: Add support for sending I2C messages Signed-off-by: Kevin O'Connor --- src/avr/i2c.c | 103 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 src/avr/i2c.c (limited to 'src/avr/i2c.c') diff --git a/src/avr/i2c.c b/src/avr/i2c.c new file mode 100644 index 00000000..b4c0ad75 --- /dev/null +++ b/src/avr/i2c.c @@ -0,0 +1,103 @@ +// I2C functions on AVR +// +// Copyright (C) 2018 Kevin O'Connor +// +// This file may be distributed under the terms of the GNU GPLv3 license. + +#include // TWCR +#include "autoconf.h" // CONFIG_CLOCK_FREQ +#include "board/misc.h" // timer_is_before +#include "command.h" // shutdown +#include "gpio.h" // i2c_setup +#include "internal.h" // GPIO +#include "sched.h" // sched_shutdown + +#if CONFIG_MACH_atmega168 || CONFIG_MACH_atmega328 || CONFIG_MACH_atmega328p +static const uint8_t SCL = GPIO('C', 5), SDA = GPIO('C', 4); +#elif CONFIG_MACH_atmega644p || CONFIG_MACH_atmega1284p +static const uint8_t SCL = GPIO('C', 0), SDA = GPIO('C', 1); +#elif CONFIG_MACH_at90usb1286 || CONFIG_MACH_at90usb646 || CONFIG_MACH_atmega32u4 || CONFIG_MACH_atmega1280 || CONFIG_MACH_atmega2560 +static const uint8_t SCL = GPIO('D', 0), SDA = GPIO('D', 1); +#endif + +static void +i2c_init(void) +{ + if (TWCR & (1<