Skip to content

Commit

Permalink
rp2/machine_adc: Initialise ADC GPIO when a Pin is referenced by int.
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
robert-hh authored and dpgeorge committed Jul 4, 2024
1 parent f61fac0 commit 2b8de74
Showing 1 changed file with 6 additions and 6 deletions.
12 changes: 6 additions & 6 deletions ports/rp2/machine_adc.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit 2b8de74

Please sign in to comment.