aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2018-12-26 19:54:52 -0500
committerKevin O'Connor <kevin@koconnor.net>2019-01-07 19:33:26 -0500
commitb4baabe4081a3c1473e970b776a5d760bf6689e3 (patch)
tree91fea699c29ebfdf1327df4b0e47930ca9bdc214 /src
parent94c86d6c6ce85143d47b79f7cc2680c6b0ee6889 (diff)
downloadkutter-b4baabe4081a3c1473e970b776a5d760bf6689e3.tar.gz
kutter-b4baabe4081a3c1473e970b776a5d760bf6689e3.tar.xz
kutter-b4baabe4081a3c1473e970b776a5d760bf6689e3.zip
sam3: Enable i2c on sam3x8e
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'src')
-rw-r--r--src/sam3/Kconfig2
-rw-r--r--src/sam3/Makefile4
-rw-r--r--src/sam3/i2c.c27
3 files changed, 16 insertions, 17 deletions
diff --git a/src/sam3/Kconfig b/src/sam3/Kconfig
index f87b84fa..1e79812a 100644
--- a/src/sam3/Kconfig
+++ b/src/sam3/Kconfig
@@ -7,7 +7,7 @@ config SAM3_SELECT
default y
select HAVE_GPIO
select HAVE_GPIO_ADC
- select HAVE_GPIO_I2C if MACH_SAM4E8E
+ select HAVE_GPIO_I2C
select HAVE_GPIO_SPI
select HAVE_GPIO_BITBANGING
diff --git a/src/sam3/Makefile b/src/sam3/Makefile
index c49fab5d..3f98b28f 100644
--- a/src/sam3/Makefile
+++ b/src/sam3/Makefile
@@ -20,7 +20,7 @@ eflags-$(CONFIG_MACH_SAM4E8E) += -T lib/sam4e/gcc/gcc/sam4e8e_flash.ld
CFLAGS_klipper.elf += $(eflags-y) --specs=nano.specs --specs=nosys.specs
# Add source files
-src-y += sam3/main.c sam3/timer.c sam3/gpio.c
+src-y += sam3/main.c sam3/timer.c sam3/gpio.c sam3/i2c.c
src-y += generic/crc16_ccitt.c generic/alloc.c
src-y += generic/armcm_irq.c generic/timer_irq.c
src-$(CONFIG_SERIAL) += sam3/serial.c generic/serial_irq.c
@@ -28,7 +28,7 @@ src-$(CONFIG_MACH_SAM3X8E) += sam3/adc.c sam3/spi.c
src-$(CONFIG_MACH_SAM3X8E) += ../lib/sam3x/gcc/system_sam3xa.c
src-$(CONFIG_MACH_SAM3X8E) += ../lib/sam3x/gcc/gcc/startup_sam3xa.c
src-$(CONFIG_MACH_SAM4E8E) += sam3/sam4e_afec.c sam3/sam4e_spi.c
-src-$(CONFIG_MACH_SAM4E8E) += sam3/i2c.c sam3/sam4_cache.c
+src-$(CONFIG_MACH_SAM4E8E) += sam3/sam4_cache.c
src-$(CONFIG_MACH_SAM4E8E) += ../lib/sam4e/gcc/system_sam4e.c
src-$(CONFIG_MACH_SAM4E8E) += ../lib/sam4e/gcc/gcc/startup_sam4e.c
diff --git a/src/sam3/i2c.c b/src/sam3/i2c.c
index caf05f0a..ed9e4a03 100644
--- a/src/sam3/i2c.c
+++ b/src/sam3/i2c.c
@@ -10,23 +10,22 @@
#include "command.h" // shutdown
#include "gpio.h" // i2c_setup
#include "internal.h" // gpio_peripheral
-#include "sam4e.h" // TWI0
#include "sched.h" // sched_shutdown
// I2C pin definitions
+#if CONFIG_MACH_SAM3X8E
+#define TWI0_SCL_GPIO GPIO('A', 18)
+#define TWI0_SDA_GPIO GPIO('A', 17)
+#define TWI1_SCL_GPIO GPIO('B', 13)
+#define TWI1_SDA_GPIO GPIO('B', 12)
+#elif CONFIG_MACH_SAM4E8E
#define TWI0_SCL_GPIO GPIO('A', 4)
-#define TWI0_SCL_PERIPH 'A'
-
#define TWI0_SDA_GPIO GPIO('A', 3)
-#define TWI0_SDA_PERIPH 'A'
-
#define TWI1_SCL_GPIO GPIO('B', 5)
-#define TWI1_SCL_PERIPH 'A'
-
#define TWI1_SDA_GPIO GPIO('B', 4)
-#define TWI1_SDA_PERIPH 'A'
+#endif
-void
+static void
i2c_init(Twi *p_twi, uint32_t rate)
{
uint32_t twi_id = (p_twi == TWI0) ? ID_TWI0 : ID_TWI1;
@@ -34,11 +33,11 @@ i2c_init(Twi *p_twi, uint32_t rate)
PMC->PMC_PCER0 = 1 << twi_id;
}
if (p_twi == TWI0) {
- gpio_peripheral(TWI0_SCL_GPIO, TWI0_SCL_PERIPH, 0);
- gpio_peripheral(TWI0_SDA_GPIO, TWI0_SDA_PERIPH, 0);
+ gpio_peripheral(TWI0_SCL_GPIO, 'A', 0);
+ gpio_peripheral(TWI0_SDA_GPIO, 'A', 0);
} else {
- gpio_peripheral(TWI1_SCL_GPIO, TWI1_SCL_PERIPH, 0);
- gpio_peripheral(TWI1_SDA_GPIO, TWI1_SDA_PERIPH, 0);
+ gpio_peripheral(TWI1_SCL_GPIO, 'A', 0);
+ gpio_peripheral(TWI1_SDA_GPIO, 'A', 0);
}
p_twi->TWI_IDR = 0xFFFFFFFF;
(void)p_twi->TWI_SR;
@@ -73,7 +72,7 @@ i2c_init(Twi *p_twi, uint32_t rate)
TWI_CWGR_CKDIV(ckdiv);
}
-uint32_t
+static uint32_t
addr_to_u32(uint8_t addr_len, uint8_t *addr)
{
uint32_t address = addr[0];