diff --git a/ports/atmel-samd/common-hal/microcontroller/Pin.c b/ports/atmel-samd/common-hal/microcontroller/Pin.c index 5ce077eb86c3..ef1d8fffaa2d 100644 --- a/ports/atmel-samd/common-hal/microcontroller/Pin.c +++ b/ports/atmel-samd/common-hal/microcontroller/Pin.c @@ -106,6 +106,10 @@ void reset_all_pins(void) { } void never_reset_pin_number(uint8_t pin_number) { + if (pin_number >= PORT_BITS) { + return; + } + never_reset_pins[GPIO_PORT(pin_number)] |= 1 << GPIO_PIN(pin_number); } diff --git a/ports/esp32s2/common-hal/microcontroller/Pin.c b/ports/esp32s2/common-hal/microcontroller/Pin.c index 03a83cfe6799..546dca848c5b 100644 --- a/ports/esp32s2/common-hal/microcontroller/Pin.c +++ b/ports/esp32s2/common-hal/microcontroller/Pin.c @@ -45,6 +45,9 @@ bool apa102_mosi_in_use; bool apa102_sck_in_use; void never_reset_pin_number(gpio_num_t pin_number) { + if (pin_number == -1 ) { + return; + } never_reset_pins[pin_number / 32] |= 1 << pin_number % 32; } @@ -54,6 +57,9 @@ void common_hal_never_reset_pin(const mcu_pin_obj_t* pin) { // Mark pin as free and return it to a quiescent state. void reset_pin_number(gpio_num_t pin_number) { + if (pin_number == -1 ) { + return; + } never_reset_pins[pin_number / 32] &= ~(1 << pin_number % 32); in_use[pin_number / 32] &= ~(1 << pin_number % 32); diff --git a/ports/nrf/common-hal/busio/SPI.c b/ports/nrf/common-hal/busio/SPI.c index 380ec27de455..1cf074955f9c 100644 --- a/ports/nrf/common-hal/busio/SPI.c +++ b/ports/nrf/common-hal/busio/SPI.c @@ -180,7 +180,7 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self, const mcu_pin_obj_t * if (miso != NULL) { config.miso_pin = miso->number; - self->MISO_pin_number = mosi->number; + self->MISO_pin_number = miso->number; claim_pin(miso); } else { self->MISO_pin_number = NO_PIN; diff --git a/ports/nrf/common-hal/microcontroller/Pin.c b/ports/nrf/common-hal/microcontroller/Pin.c index d294c1dd5d18..bc7ff831a563 100644 --- a/ports/nrf/common-hal/microcontroller/Pin.c +++ b/ports/nrf/common-hal/microcontroller/Pin.c @@ -123,6 +123,9 @@ void reset_pin_number(uint8_t pin_number) { void never_reset_pin_number(uint8_t pin_number) { + if (pin_number == NO_PIN) { + return; + } never_reset_pins[nrf_pin_port(pin_number)] |= 1 << nrf_relative_pin_number(pin_number); } diff --git a/ports/stm/common-hal/microcontroller/Pin.c b/ports/stm/common-hal/microcontroller/Pin.c index 9fbdedeade19..99651327030b 100644 --- a/ports/stm/common-hal/microcontroller/Pin.c +++ b/ports/stm/common-hal/microcontroller/Pin.c @@ -70,6 +70,10 @@ void reset_all_pins(void) { // Mark pin as free and return it to a quiescent state. void reset_pin_number(uint8_t pin_port, uint8_t pin_number) { + if ( pin_number == NO_PIN ) { + return; + } + if (pin_port == 0x0F) { return; } @@ -88,6 +92,9 @@ void reset_pin_number(uint8_t pin_port, uint8_t pin_number) { } void never_reset_pin_number(uint8_t pin_port, uint8_t pin_number) { + if ( pin_number == NO_PIN ) { + return; + } never_reset_pins[pin_port] |= 1<