summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien George <damien@micropython.org>2021-02-03 16:29:54 +1100
committerDamien George <damien@micropython.org>2021-02-04 10:55:43 +1100
commit7f7b4f2bc68a06c9f47d6b99e953cac0b21c26c9 (patch)
treea753fb264bfbdeb4cb2640eddb245e2fdd58a2e0
parent78b23c3a1f064dc19bbee68930ef3aba110c781c (diff)
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 <damien@micropython.org>
-rw-r--r--ports/rp2/machine_adc.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/ports/rp2/machine_adc.c b/ports/rp2/machine_adc.c
index f0f367151..f8925e5aa 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.