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>
This commit is contained in:
Damien George 2021-02-03 16:29:54 +11:00
parent 78b23c3a1f
commit 7f7b4f2bc6
1 changed files with 4 additions and 1 deletions

View File

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