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];