From a00e1e57355f850bce928a770851bc0dc01484c2 Mon Sep 17 00:00:00 2001 From: iabdalkader Date: Sun, 23 Jan 2022 03:33:43 +0200 Subject: [PATCH] stm32/dac: Deinit all DACs on soft reset. DAC timed functions continue to run after a soft reset cycle, using collected memory in the case of write_timed. --- ports/stm32/dac.c | 7 +++++++ ports/stm32/dac.h | 2 ++ ports/stm32/main.c | 3 +++ 3 files changed, 12 insertions(+) diff --git a/ports/stm32/dac.c b/ports/stm32/dac.c index fe3aecdde8..d51312aebc 100644 --- a/ports/stm32/dac.c +++ b/ports/stm32/dac.c @@ -131,6 +131,13 @@ STATIC void dac_deinit(uint32_t dac_channel) { #endif } +void dac_deinit_all(void) { + dac_deinit(DAC_CHANNEL_1); + #if !defined(STM32L452xx) + dac_deinit(DAC_CHANNEL_2); + #endif +} + STATIC void dac_config_channel(uint32_t dac_channel, uint32_t trig, uint32_t outbuf) { DAC->CR &= ~(DAC_CR_EN1 << dac_channel); uint32_t cr_off = DAC_CR_DMAEN1 | DAC_CR_MAMP1 | DAC_CR_WAVE1 | DAC_CR_TSEL1 | DAC_CR_TEN1; diff --git a/ports/stm32/dac.h b/ports/stm32/dac.h index fca36e019e..d5686725a4 100644 --- a/ports/stm32/dac.h +++ b/ports/stm32/dac.h @@ -28,4 +28,6 @@ extern const mp_obj_type_t pyb_dac_type; +void dac_deinit_all(void); + #endif // MICROPY_INCLUDED_STM32_DAC_H diff --git a/ports/stm32/main.c b/ports/stm32/main.c index 431fa20dee..3291a80184 100644 --- a/ports/stm32/main.c +++ b/ports/stm32/main.c @@ -654,6 +654,9 @@ soft_reset_exit: #if MICROPY_HW_ENABLE_CAN can_deinit_all(); #endif + #if MICROPY_HW_ENABLE_DAC + dac_deinit_all(); + #endif machine_deinit(); #if MICROPY_PY_THREAD