diff options
| author | Damien George | 2018-02-02 19:04:36 +1100 |
|---|---|---|
| committer | Damien George | 2018-02-02 19:04:36 +1100 |
| commit | 4b8e58756bf408f4a899d7cf787ed1961f6f9682 (patch) | |
| tree | c91e8c9e9ac79718908e5920b91ff60bd2757312 | |
| parent | 5ddd1488bd5ac7a41d76e68b84ff858d7fa0aad7 (diff) | |
stm32/i2c: Allow I2C peripheral state to persist across a soft reset.
The I2C sub-system is independent from the uPy state (eg the heap) and so
can safely persist across a soft reset.
| -rw-r--r-- | ports/stm32/i2c.c | 7 | ||||
| -rw-r--r-- | ports/stm32/main.c | 7 |
2 files changed, 5 insertions, 9 deletions
diff --git a/ports/stm32/i2c.c b/ports/stm32/i2c.c index 6cb6538cb..56c63684f 100644 --- a/ports/stm32/i2c.c +++ b/ports/stm32/i2c.c @@ -217,21 +217,18 @@ uint32_t i2c_get_baudrate(I2C_InitTypeDef *init) { #endif void i2c_init0(void) { - // reset the I2C1 handles + // Initialise the I2C handles. + // The structs live on the BSS so all other fields will be zero after a reset. #if defined(MICROPY_HW_I2C1_SCL) - memset(&I2CHandle1, 0, sizeof(I2C_HandleTypeDef)); I2CHandle1.Instance = I2C1; #endif #if defined(MICROPY_HW_I2C2_SCL) - memset(&I2CHandle2, 0, sizeof(I2C_HandleTypeDef)); I2CHandle2.Instance = I2C2; #endif #if defined(MICROPY_HW_I2C3_SCL) - memset(&I2CHandle3, 0, sizeof(I2C_HandleTypeDef)); I2CHandle3.Instance = I2C3; #endif #if defined(MICROPY_HW_I2C4_SCL) - memset(&I2CHandle4, 0, sizeof(I2C_HandleTypeDef)); I2CHandle4.Instance = I2C4; #endif } diff --git a/ports/stm32/main.c b/ports/stm32/main.c index 7a530ff83..5617747e9 100644 --- a/ports/stm32/main.c +++ b/ports/stm32/main.c @@ -458,6 +458,9 @@ int main(void) { switch_init0(); #endif spi_init0(); + #if MICROPY_HW_ENABLE_HW_I2C + i2c_init0(); + #endif #if defined(USE_DEVICE_MODE) // default to internal flash being the usb medium @@ -553,10 +556,6 @@ soft_reset: can_init0(); #endif - #if MICROPY_HW_ENABLE_HW_I2C - i2c_init0(); - #endif - pyb_usb_init0(); // Initialise the local flash filesystem. |
