← index #5405PR #8255
Related · high · value 1.111
QUERY · ISSUE

Move esp32 REPL to a different UART

openby lerouxbopened 2019-12-09updated 2021-06-20

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?

CANDIDATE · PULL REQUEST

esp32/uart: Allow limited configuration of (repl) uart0.

closedby andrewleechopened 2022-02-03updated 2022-03-01
port-esp32

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 :-)

Keyboard

j / / n
next pair
k / / p
previous pair
1 / / h
show query pane
2 / / l
show candidate pane
c
copy suggested comment
r
toggle reasoning
g i
go to index
?
show this help
esc
close overlays

press ? or esc to close

copied