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(0) is disabled (dedicated to REPL)
Hi @dpgeorge,
in response of to the pull request #3784 relative to the dupterm of the esp8266, my need is to use the UART(0) it's not because the other ports are in use, but because my society production version of the board esp32 use RXD0 and TXD0 to communicate with the device.
By now the esp32 was produced so we can't change the hardwere, is there any way to detach the UART(0) from the REPL using the dupterm function?
I hope i made my point.
Thank you for your reply in advance.