diff options
Diffstat (limited to 'drivers/arm')
| -rw-r--r-- | drivers/arm/i2c_master.c | 16 | ||||
| -rw-r--r-- | drivers/arm/i2c_master.h | 40 |
2 files changed, 45 insertions, 11 deletions
diff --git a/drivers/arm/i2c_master.c b/drivers/arm/i2c_master.c index 7369398cc..5814375f3 100644 --- a/drivers/arm/i2c_master.c +++ b/drivers/arm/i2c_master.c | |||
| @@ -32,12 +32,10 @@ | |||
| 32 | 32 | ||
| 33 | static uint8_t i2c_address; | 33 | static uint8_t i2c_address; |
| 34 | 34 | ||
| 35 | // This configures the I2C clock to 400khz assuming a 72Mhz clock | ||
| 36 | // For more info : https://www.st.com/en/embedded-software/stsw-stm32126.html | ||
| 37 | static const I2CConfig i2cconfig = { | 35 | static const I2CConfig i2cconfig = { |
| 38 | STM32_TIMINGR_PRESC(15U) | | 36 | STM32_TIMINGR_PRESC(I2C1_TIMINGR_PRESC) | |
| 39 | STM32_TIMINGR_SCLDEL(4U) | STM32_TIMINGR_SDADEL(2U) | | 37 | STM32_TIMINGR_SCLDEL(I2C1_TIMINGR_SCLDEL) | STM32_TIMINGR_SDADEL(I2C1_TIMINGR_SDADEL) | |
| 40 | STM32_TIMINGR_SCLH(15U) | STM32_TIMINGR_SCLL(21U), | 38 | STM32_TIMINGR_SCLH(I2C1_TIMINGR_SCLH) | STM32_TIMINGR_SCLL(I2C1_TIMINGR_SCLL), |
| 41 | 0, | 39 | 0, |
| 42 | 0 | 40 | 0 |
| 43 | }; | 41 | }; |
| @@ -58,13 +56,13 @@ __attribute__ ((weak)) | |||
| 58 | void i2c_init(void) | 56 | void i2c_init(void) |
| 59 | { | 57 | { |
| 60 | // Try releasing special pins for a short time | 58 | // Try releasing special pins for a short time |
| 61 | palSetPadMode(I2C1_BANK, I2C1_SCL, PAL_MODE_INPUT); | 59 | palSetPadMode(I2C1_SCL_BANK, I2C1_SCL, PAL_MODE_INPUT); |
| 62 | palSetPadMode(I2C1_BANK, I2C1_SDA, PAL_MODE_INPUT); | 60 | palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_INPUT); |
| 63 | 61 | ||
| 64 | chThdSleepMilliseconds(10); | 62 | chThdSleepMilliseconds(10); |
| 65 | 63 | ||
| 66 | palSetPadMode(I2C1_BANK, I2C1_SCL, PAL_MODE_ALTERNATE(4) | PAL_STM32_OTYPE_OPENDRAIN); | 64 | palSetPadMode(I2C1_SCL_BANK, I2C1_SCL, PAL_MODE_ALTERNATE(I2C1_SCL_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN); |
| 67 | palSetPadMode(I2C1_BANK, I2C1_SDA, PAL_MODE_ALTERNATE(4) | PAL_STM32_OTYPE_OPENDRAIN); | 65 | palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_ALTERNATE(I2C1_SDA_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN); |
| 68 | 66 | ||
| 69 | //i2cInit(); //This is invoked by halInit() so no need to redo it. | 67 | //i2cInit(); //This is invoked by halInit() so no need to redo it. |
| 70 | } | 68 | } |
diff --git a/drivers/arm/i2c_master.h b/drivers/arm/i2c_master.h index a15f1702d..1bb74c800 100644 --- a/drivers/arm/i2c_master.h +++ b/drivers/arm/i2c_master.h | |||
| @@ -26,9 +26,19 @@ | |||
| 26 | #include "ch.h" | 26 | #include "ch.h" |
| 27 | #include <hal.h> | 27 | #include <hal.h> |
| 28 | 28 | ||
| 29 | #ifndef I2C1_BANK | 29 | #ifdef I2C1_BANK |
| 30 | #define I2C1_BANK GPIOB | 30 | #define I2C1_SCL_BANK I2C1_BANK |
| 31 | #define I2C1_SDA_BANK I2C1_BANK | ||
| 31 | #endif | 32 | #endif |
| 33 | |||
| 34 | #ifndef I2C1_SCL_BANK | ||
| 35 | #define I2C1_SCL_BANK GPIOB | ||
| 36 | #endif | ||
| 37 | |||
| 38 | #ifndef I2C1_SDA_BANK | ||
| 39 | #define I2C1_SDA_BANK GPIOB | ||
| 40 | #endif | ||
| 41 | |||
| 32 | #ifndef I2C1_SCL | 42 | #ifndef I2C1_SCL |
| 33 | #define I2C1_SCL 6 | 43 | #define I2C1_SCL 6 |
| 34 | #endif | 44 | #endif |
| @@ -36,6 +46,32 @@ | |||
| 36 | #define I2C1_SDA 7 | 46 | #define I2C1_SDA 7 |
| 37 | #endif | 47 | #endif |
| 38 | 48 | ||
| 49 | // The default PAL alternate modes are used to signal that the pins are used for I2C | ||
| 50 | #ifndef I2C1_SCL_PAL_MODE | ||
| 51 | #define I2C1_SCL_PAL_MODE 4 | ||
| 52 | #endif | ||
| 53 | #ifndef I2C1_SDA_PAL_MODE | ||
| 54 | #define I2C1_SDA_PAL_MODE 4 | ||
| 55 | #endif | ||
| 56 | |||
| 57 | // The default timing values below configures the I2C clock to 400khz assuming a 72Mhz clock | ||
| 58 | // For more info : https://www.st.com/en/embedded-software/stsw-stm32126.html | ||
| 59 | #ifndef I2C1_TIMINGR_PRESC | ||
| 60 | #define I2C1_TIMINGR_PRESC 15U | ||
| 61 | #endif | ||
| 62 | #ifndef I2C1_TIMINGR_SCLDEL | ||
| 63 | #define I2C1_TIMINGR_SCLDEL 4U | ||
| 64 | #endif | ||
| 65 | #ifndef I2C1_TIMINGR_SDADEL | ||
| 66 | #define I2C1_TIMINGR_SDADEL 2U | ||
| 67 | #endif | ||
| 68 | #ifndef I2C1_TIMINGR_SCLH | ||
| 69 | #define I2C1_TIMINGR_SCLH 15U | ||
| 70 | #endif | ||
| 71 | #ifndef I2C1_TIMINGR_SCLL | ||
| 72 | #define I2C1_TIMINGR_SCLL 21U | ||
| 73 | #endif | ||
| 74 | |||
| 39 | #ifndef I2C_DRIVER | 75 | #ifndef I2C_DRIVER |
| 40 | #define I2C_DRIVER I2CD1 | 76 | #define I2C_DRIVER I2CD1 |
| 41 | #endif | 77 | #endif |
