summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ports/stm32/machine_i2s.c32
1 files changed, 17 insertions, 15 deletions
diff --git a/ports/stm32/machine_i2s.c b/ports/stm32/machine_i2s.c
index 0bb0f3e8f..2120554c3 100644
--- a/ports/stm32/machine_i2s.c
+++ b/ports/stm32/machine_i2s.c
@@ -887,24 +887,26 @@ STATIC mp_obj_t machine_i2s_init(size_t n_pos_args, const mp_obj_t *pos_args, mp
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(machine_i2s_init_obj, 1, machine_i2s_init);
STATIC mp_obj_t machine_i2s_deinit(mp_obj_t self_in) {
-
machine_i2s_obj_t *self = MP_OBJ_TO_PTR(self_in);
- dma_deinit(self->dma_descr_tx);
- dma_deinit(self->dma_descr_rx);
- HAL_I2S_DeInit(&self->hi2s);
-
- if (self->hi2s.Instance == I2S1) {
- __SPI1_FORCE_RESET();
- __SPI1_RELEASE_RESET();
- __SPI1_CLK_DISABLE();
- } else if (self->hi2s.Instance == I2S2) {
- __SPI2_FORCE_RESET();
- __SPI2_RELEASE_RESET();
- __SPI2_CLK_DISABLE();
- }
+ if (self->ring_buffer_storage != NULL) {
+ dma_deinit(self->dma_descr_tx);
+ dma_deinit(self->dma_descr_rx);
+ HAL_I2S_DeInit(&self->hi2s);
+
+ if (self->hi2s.Instance == I2S1) {
+ __SPI1_FORCE_RESET();
+ __SPI1_RELEASE_RESET();
+ __SPI1_CLK_DISABLE();
+ } else if (self->hi2s.Instance == I2S2) {
+ __SPI2_FORCE_RESET();
+ __SPI2_RELEASE_RESET();
+ __SPI2_CLK_DISABLE();
+ }
- m_free(self->ring_buffer_storage);
+ m_free(self->ring_buffer_storage);
+ self->ring_buffer_storage = NULL;
+ }
return mp_const_none;
}