diff options
| author | Scott Shawcroft <scott@adafruit.com> | 2020-11-25 15:11:29 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-11-25 15:11:29 -0800 |
| commit | abff2615cb35eade2553d828923327b2d884e1a8 (patch) | |
| tree | bf380b7f120b840a966db307f8052f980d87eda9 | |
| parent | 015ba00212b457dd0c9c0a3d98497b3743ad15f7 (diff) | |
| parent | a854da35d33f1bc1673b4de08b2efa9f4823b805 (diff) | |
Merge pull request #3754 from hierophect/esp-spi-pinclaim
ESP32S2: fix pin claiming bugs
| -rw-r--r-- | ports/esp32s2/common-hal/busio/SPI.c | 8 | ||||
| -rw-r--r-- | ports/esp32s2/common-hal/microcontroller/Pin.c | 4 |
2 files changed, 10 insertions, 2 deletions
diff --git a/ports/esp32s2/common-hal/busio/SPI.c b/ports/esp32s2/common-hal/busio/SPI.c index 490419f34..da738bbfd 100644 --- a/ports/esp32s2/common-hal/busio/SPI.c +++ b/ports/esp32s2/common-hal/busio/SPI.c @@ -204,6 +204,14 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self, // hal->dummy_bits = 0; // hal->addr = 0; + claim_pin(self->clock_pin); + if (self->MOSI_pin != NULL) { + claim_pin(self->MOSI_pin); + } + if (self->MISO_pin != NULL) { + claim_pin(self->MISO_pin); + } + hal->io_mode = SPI_LL_IO_MODE_NORMAL; common_hal_busio_spi_configure(self, 250000, 0, 0, 8); diff --git a/ports/esp32s2/common-hal/microcontroller/Pin.c b/ports/esp32s2/common-hal/microcontroller/Pin.c index 3c2611efe..394a19e69 100644 --- a/ports/esp32s2/common-hal/microcontroller/Pin.c +++ b/ports/esp32s2/common-hal/microcontroller/Pin.c @@ -96,7 +96,7 @@ void reset_all_pins(void) { } void claim_pin(const mcu_pin_obj_t* pin) { - in_use[pin->number / 32] |= (1 << pin->number % 32); + in_use[pin->number / 32] |= (1 << (pin->number % 32)); #ifdef MICROPY_HW_NEOPIXEL if (pin == MICROPY_HW_NEOPIXEL) { neopixel_in_use = true; @@ -116,7 +116,7 @@ bool pin_number_is_free(gpio_num_t pin_number) { #endif uint8_t offset = pin_number / 32; - uint8_t mask = 1 << pin_number % 32; + uint32_t mask = 1 << (pin_number % 32); return (never_reset_pins[offset] & mask) == 0 && (in_use[offset] & mask) == 0; } |
