diff --git a/ports/espressif/Makefile b/ports/espressif/Makefile index 0a8fdb36d5..204802cb16 100644 --- a/ports/espressif/Makefile +++ b/ports/espressif/Makefile @@ -412,7 +412,7 @@ ESP_AUTOGEN_LD = $(BUILD)/esp-idf/esp-idf/$(IDF_TARGET)/$(IDF_TARGET)_out.ld $(B FLASH_FLAGS = --flash_mode $(CIRCUITPY_ESP_FLASH_MODE) --flash_freq $(CIRCUITPY_ESP_FLASH_FREQ) --flash_size $(CIRCUITPY_ESP_FLASH_SIZE) -ESPTOOL_FLAGS ?= --before=default_reset --after=no_reset --baud 460800 +ESPTOOL_FLAGS ?= --before=default_reset --after=no_reset --baud 921600 ifeq ($(UF2_BOOTLOADER),1) all: $(BUILD)/firmware.bin $(BUILD)/firmware.uf2 diff --git a/ports/espressif/boards/adafruit_feather_esp32_v2/sdkconfig b/ports/espressif/boards/adafruit_feather_esp32_v2/sdkconfig index 731ea37c4d..94333b1591 100644 --- a/ports/espressif/boards/adafruit_feather_esp32_v2/sdkconfig +++ b/ports/espressif/boards/adafruit_feather_esp32_v2/sdkconfig @@ -34,6 +34,7 @@ CONFIG_PARTITION_TABLE_FILENAME="esp-idf-config/partitions-8MB-no-uf2.csv" # ESP32-specific # CONFIG_ESP32_SPIRAM_SUPPORT=y +CONFIG_UART_ISR_IN_IRAM=y # end of ESP32-specific # diff --git a/ports/espressif/common-hal/busio/UART.c b/ports/espressif/common-hal/busio/UART.c index 0ca608a002..385307cc3e 100644 --- a/ports/espressif/common-hal/busio/UART.c +++ b/ports/espressif/common-hal/busio/UART.c @@ -75,8 +75,8 @@ static void uart_event_task(void *param) { void uart_reset(void) { for (uart_port_t num = 0; num < UART_NUM_MAX; num++) { // Ignore the UART used by the IDF. - #ifdef CONFIG_CONSOLE_UART_NUM - if (num == CONFIG_CONSOLE_UART_NUM) { + #ifdef CONFIG_ESP_CONSOLE_UART_NUM + if (num == CONFIG_ESP_CONSOLE_UART_NUM) { continue; } #endif diff --git a/ports/espressif/common-hal/microcontroller/Pin.c b/ports/espressif/common-hal/microcontroller/Pin.c index c271ae8686..943386306f 100644 --- a/ports/espressif/common-hal/microcontroller/Pin.c +++ b/ports/espressif/common-hal/microcontroller/Pin.c @@ -33,12 +33,11 @@ #include "components/driver/include/driver/gpio.h" #include "components/hal/include/hal/gpio_hal.h" -#include "esp_log.h" -#include "freertos/FreeRTOS.h" -#include "freertos/task.h" +STATIC uint64_t never_reset_pins; +STATIC uint64_t in_use; -STATIC uint32_t never_reset_pins[2]; -STATIC uint32_t in_use[2]; +// 64-bit pin mask for a single bit +#define PIN_BIT(pin_number) (((uint64_t)1) << pin_number) // Bit mask of all pins that should never ever be reset. // Typically these are SPI flash and PSRAM control pins, and communication pins. @@ -111,7 +110,7 @@ void never_reset_pin_number(gpio_num_t pin_number) { if (pin_number == NO_PIN) { return; } - never_reset_pins[pin_number / 32] |= 1 << pin_number % 32; + never_reset_pins |= PIN_BIT(pin_number); } void common_hal_never_reset_pin(const mcu_pin_obj_t *pin) { @@ -127,7 +126,7 @@ MP_WEAK bool espressif_board_reset_pin_number(gpio_num_t pin_number) { STATIC void _reset_pin(gpio_num_t pin_number) { // Never ever reset pins used for flash, RAM, and basic communication. - if (pin_mask_reset_forbidden & (((uint64_t)1) << pin_number)) { + if (pin_mask_reset_forbidden & PIN_BIT(pin_number)) { return; } @@ -152,8 +151,8 @@ void reset_pin_number(gpio_num_t pin_number) { if (pin_number == NO_PIN) { return; } - never_reset_pins[pin_number / 32] &= ~(1 << pin_number % 32); - in_use[pin_number / 32] &= ~(1 << pin_number % 32); + never_reset_pins &= ~PIN_BIT(pin_number); + in_use &= ~PIN_BIT(pin_number); _reset_pin(pin_number); } @@ -170,30 +169,26 @@ void common_hal_reset_pin(const mcu_pin_obj_t *pin) { } void reset_all_pins(void) { - ESP_LOGI("Pin.c", "reset_all_pins"); for (uint8_t i = 0; i < GPIO_PIN_COUNT; i++) { uint32_t iomux_address = GPIO_PIN_MUX_REG[i]; if (iomux_address == 0 || - (never_reset_pins[i / 32] & (1 << i % 32)) != 0) { + (never_reset_pins & PIN_BIT(i))) { continue; } - ESP_LOGI("Pin.c", "about to reset pin %d", i); - vTaskDelay(100); _reset_pin(i); } - in_use[0] = never_reset_pins[0]; - in_use[1] = never_reset_pins[1]; + in_use = never_reset_pins; } void claim_pin_number(gpio_num_t pin_number) { if (pin_number == NO_PIN) { return; } - in_use[pin_number / 32] |= (1 << (pin_number % 32)); + in_use |= PIN_BIT(pin_number); } void claim_pin(const mcu_pin_obj_t *pin) { - in_use[pin->number / 32] |= (1 << (pin->number % 32)); + claim_pin_number(pin->number); } void common_hal_mcu_pin_claim(const mcu_pin_obj_t *pin) { @@ -201,9 +196,7 @@ void common_hal_mcu_pin_claim(const mcu_pin_obj_t *pin) { } bool pin_number_is_free(gpio_num_t pin_number) { - uint8_t offset = pin_number / 32; - uint32_t mask = 1 << (pin_number % 32); - return (in_use[offset] & mask) == 0; + return in_use & PIN_BIT(pin_number); } bool common_hal_mcu_pin_is_free(const mcu_pin_obj_t *pin) { diff --git a/supervisor/shared/serial.c b/supervisor/shared/serial.c index af90fce4d7..6453a4a930 100644 --- a/supervisor/shared/serial.c +++ b/supervisor/shared/serial.c @@ -54,7 +54,7 @@ #include "py/mpprint.h" #include "shared-bindings/busio/UART.h" busio_uart_obj_t debug_uart; -byte buf_array[64]; +byte buf_array[256]; #endif #if CIRCUITPY_USB_VENDOR