From 7f7b4f2bc68a06c9f47d6b99e953cac0b21c26c9 Mon Sep 17 00:00:00 2001 From: Damien George Date: Wed, 3 Feb 2021 16:29:54 +1100 Subject: [PATCH] rp2/machine_adc: Only initialise the ADC periph if not already enabled. Otherwise it resets the ADC peripheral each time a new ADC object is constructed, which can reset other state that has already been set up. See issue #6833. Signed-off-by: Damien George --- ports/rp2/machine_adc.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ports/rp2/machine_adc.c b/ports/rp2/machine_adc.c index f0f367151cab5..f8925e5aa33a6 100644 --- a/ports/rp2/machine_adc.c +++ b/ports/rp2/machine_adc.c @@ -78,7 +78,10 @@ STATIC mp_obj_t machine_adc_make_new(const mp_obj_type_t *type, size_t n_args, s } } - adc_init(); + // Initialise the ADC peripheral if it's not already running. + if (!(adc_hw->cs & ADC_CS_EN_BITS)) { + adc_init(); + } if (ADC_IS_VALID_GPIO(channel)) { // Configure the GPIO pin in ADC mode.