diff options
| author | robert-hh <robert@hammelrath.com> | 2024-01-24 16:48:43 +0100 |
|---|---|---|
| committer | Damien George <damien@micropython.org> | 2024-07-04 11:50:28 +1000 |
| commit | 2b8de7436bbdb54da99bf6bdb79359876fd3bc1d (patch) | |
| tree | 16a0feff85716266f0f38f478e6c9c7969b17146 | |
| parent | f61fac0ba6e2684b8bb4b11c7a768b0cb805c198 (diff) | |
rp2/machine_adc: Initialise ADC GPIO when a Pin is referenced by int.
The change closes the gap in the API when an integer is used as Pin
reference. With the change, e.g. ADC(26), ADC(Pin(26)) and ADC("GP26")
behave identically and the GPIO is initialised in ACD/high-Z mode.
Only when using ADC channel numbers 0-3 are the corresponding GPIO left
uninitialised, and then the user is responsible for configuring the GPIO.
Signed-off-by: robert-hh <robert@hammelrath.com>
| -rw-r--r-- | ports/rp2/machine_adc.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/ports/rp2/machine_adc.c b/ports/rp2/machine_adc.c index e5a428563..3594f4b12 100644 --- a/ports/rp2/machine_adc.c +++ b/ports/rp2/machine_adc.c @@ -74,14 +74,14 @@ static mp_obj_t mp_machine_adc_make_new(const mp_obj_type_t *type, size_t n_args const machine_pin_obj_t *pin = NULL; if (mp_obj_is_int(source)) { - // Get and validate channel number. channel = mp_obj_get_int(source); - if (ADC_IS_VALID_GPIO(channel)) { - channel = ADC_CHANNEL_FROM_GPIO(channel); - } else if (!(channel >= 0 && channel <= ADC_CHANNEL_TEMPSENSOR)) { - mp_raise_ValueError(MP_ERROR_TEXT("invalid channel")); + if (!(channel >= 0 && channel <= ADC_CHANNEL_TEMPSENSOR)) { + // Not a valid ADC channel, fallback to searching for a pin. + channel = -1; } - } else { + } + + if (channel == -1) { // Get GPIO and check it has ADC capabilities. pin = machine_pin_find(source); bool valid_adc_pin = false; |
