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.
This commit is contained in:
Damien George 2018-02-02 19:04:36 +11:00
parent 5ddd1488bd
commit 4b8e58756b
2 changed files with 5 additions and 9 deletions

View File

@ -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
}

View File

@ -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.