diff --git a/src/stm32/stm32f0_i2c.c b/src/stm32/stm32f0_i2c.c index df53aa29..4c68779d 100644 --- a/src/stm32/stm32f0_i2c.c +++ b/src/stm32/stm32f0_i2c.c @@ -15,14 +15,46 @@ struct i2c_info { uint8_t scl_pin, sda_pin, function; }; +#if CONFIG_MACH_STM32F0 +DECL_ENUMERATION("i2c_bus", "i2c1_PB6_PB7", 0); +DECL_CONSTANT_STR("BUS_PINS_i2c1_PB6_PB7", "PB6,PB7"); +DECL_ENUMERATION("i2c_bus", "i2c1_PF1_PF0", 1); +DECL_CONSTANT_STR("BUS_PINS_i2c1_PF1_PF0", "PF1,PF0"); +DECL_ENUMERATION("i2c_bus", "i2c1_PB8_PB9", 2); +DECL_CONSTANT_STR("BUS_PINS_i2c1_PB8_PB9", "PB8,PB9"); +// Deprecated "i2c1a" style mappings DECL_ENUMERATION("i2c_bus", "i2c1", 0); DECL_CONSTANT_STR("BUS_PINS_i2c1", "PB6,PB7"); DECL_ENUMERATION("i2c_bus", "i2c1a", 1); DECL_CONSTANT_STR("BUS_PINS_i2c1a", "PF1,PF0"); +#elif CONFIG_MACH_STM32G0 +DECL_ENUMERATION("i2c_bus", "i2c1_PB6_PB7", 0); +DECL_CONSTANT_STR("BUS_PINS_i2c1_PB6_PB7", "PB6,PB7"); +DECL_ENUMERATION("i2c_bus", "i2c1_PB8_PB9", 1); +DECL_CONSTANT_STR("BUS_PINS_i2c1_PB8_PB9", "PB8,PB9"); +DECL_ENUMERATION("i2c_bus", "i2c3_PB3_PB4", 2); +DECL_CONSTANT_STR("BUS_PINS_i2c3_PB3_PB4", "PB3,PB4"); +DECL_ENUMERATION("i2c_bus", "i2c2_PB10_PB11", 3); +DECL_CONSTANT_STR("BUS_PINS_i2c2_PB10_PB11", "PB10,PB11"); +DECL_ENUMERATION("i2c_bus", "i2c2_PB13_PB14", 4); +DECL_CONSTANT_STR("BUS_PINS_i2c2_PB13_PB14", "PB13,PB14"); +DECL_ENUMERATION("i2c_bus", "i2c1_PA9_PA10", 5); +DECL_CONSTANT_STR("BUS_PINS_i2c1_PA9_PA10", "PA9,PA10"); +#endif static const struct i2c_info i2c_bus[] = { +#if CONFIG_MACH_STM32F0 { I2C1, GPIO('B', 6), GPIO('B', 7), GPIO_FUNCTION(1) }, { I2C1, GPIO('F', 1), GPIO('F', 0), GPIO_FUNCTION(1) }, + { I2C1, GPIO('B', 8), GPIO('B', 9), GPIO_FUNCTION(1) }, +#elif CONFIG_MACH_STM32G0 + { I2C1, GPIO('B', 6), GPIO('B', 7), GPIO_FUNCTION(6) }, + { I2C1, GPIO('B', 8), GPIO('B', 9), GPIO_FUNCTION(6) }, + { I2C3, GPIO('B', 3), GPIO('B', 4), GPIO_FUNCTION(6) }, + { I2C2, GPIO('B', 10), GPIO('B', 11), GPIO_FUNCTION(6) }, + { I2C2, GPIO('B', 13), GPIO('B', 14), GPIO_FUNCTION(6) }, + { I2C1, GPIO('A', 9), GPIO('A', 10), GPIO_FUNCTION(6) }, +#endif }; struct i2c_config diff --git a/src/stm32/stm32g0.c b/src/stm32/stm32g0.c index 1964d89f..c243743b 100644 --- a/src/stm32/stm32g0.c +++ b/src/stm32/stm32g0.c @@ -38,6 +38,8 @@ lookup_clock_line(uint32_t periph_base) return (struct cline){.en=&RCC->APBENR1,.rst=&RCC->APBRSTR1,.bit=1<<13}; if (periph_base == CRS_BASE) return (struct cline){.en=&RCC->APBENR1,.rst=&RCC->APBRSTR1,.bit=1<<16}; + if (periph_base == I2C3_BASE) + return (struct cline){.en=&RCC->APBENR1,.rst=&RCC->APBRSTR1,.bit=1<<23}; if (periph_base == TIM1_BASE) return (struct cline){.en=&RCC->APBENR2,.rst=&RCC->APBRSTR2,.bit=1<<11}; if (periph_base == SPI1_BASE)