Move esp32 REPL to a different UART
Hi.
I'm trying to change the ESP32 REPL to use UART2 rather than UART0. I'm using an Adafruit Feather Huzzah32 and I want to be able to use the REPL over the feather's RX/16 and TX/17 pins rather than the USB port. I believe this is UART2.
I've tried the following:
diff --git a/ports/esp32/mphalport.c b/ports/esp32/mphalport.c
index 305e87593..7edb40321 100644
--- a/ports/esp32/mphalport.c
+++ b/ports/esp32/mphalport.c
@@ -38,6 +38,8 @@
#include "rom/uart.h"
#endif
+#include "driver/uart.h"
+
#include "py/obj.h"
#include "py/stream.h"
#include "py/mpstate.h"
@@ -80,6 +82,7 @@ void mp_hal_stdout_tx_strn(const char *str, uint32_t len) {
if (release_gil) {
MP_THREAD_GIL_EXIT();
}
+ uart_tx_switch(UART_NUM_2);
for (uint32_t i = 0; i < len; ++i) {
uart_tx_one_char(str[i]);
}
diff --git a/ports/esp32/uart.c b/ports/esp32/uart.c
index 10a4ba462..1de31dc0c 100644
--- a/ports/esp32/uart.c
+++ b/ports/esp32/uart.c
@@ -37,13 +37,13 @@ STATIC void uart_irq_handler(void *arg);
void uart_init(void) {
uart_isr_handle_t handle;
- uart_isr_register(UART_NUM_0, uart_irq_handler, NULL, ESP_INTR_FLAG_LOWMED | ESP_INTR_FLAG_IRAM, &handle);
- uart_enable_rx_intr(UART_NUM_0);
+ uart_isr_register(UART_NUM_2, uart_irq_handler, NULL, ESP_INTR_FLAG_LOWMED | ESP_INTR_FLAG_IRAM, &handle);
+ uart_enable_rx_intr(UART_NUM_2);
}
// all code executed in ISR must be in IRAM, and any const data must be in DRAM
STATIC void IRAM_ATTR uart_irq_handler(void *arg) {
- volatile uart_dev_t *uart = &UART0;
+ volatile uart_dev_t *uart = &UART2;
uart->int_clr.rxfifo_full = 1;
uart->int_clr.frm_err = 1;
uart->int_clr.rxfifo_tout = 1;
But this doesn't seem to be enough. I've searched all over this codebase and cannot figure out how this fits together. Is there something obvious I'm missing?
esp32/uart: Allow limited configuration of (repl) uart0.
For many applications the hardcoded 115200 repl buadrate on esp32 is painfully slow. This function allows this to be adjusted dynamically.
UART0 is blocked from access via the existing machine.UART interface, presumable for good reason: https://github.com/micropython/micropython/blob/a3675294ae39a724aec6959238c45af0dea92f21/ports/esp32/machine_uart.c#L297
So this just provides a direct function via the esp32 module to set just the baudrate.
Hey @UnexpectedMaker this should tick that box you were talking about :-)