summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Leech <andrew.leech@planetinnovation.com.au>2022-02-24 14:30:50 +1100
committerDamien George <damien@micropython.org>2022-03-01 18:16:50 +1100
commit919e586e46af67e7eaa819b0f187b600a3165526 (patch)
tree0ef4c3abeab799d683710bd63165b1e3ae753991
parent2cc9232781d818b8a317dc7b173ecd5b752867e7 (diff)
esp32/machine_uart: Allow limited configuration of REPL UART.
Some applications may want to adjust the hard coded 115200 REPL buadrate, and this commit allows it to be changed dynamically via machine.UART(0).
-rw-r--r--ports/esp32/machine_uart.c26
-rw-r--r--ports/esp32/uart.c8
-rw-r--r--ports/esp32/uart.h8
3 files changed, 22 insertions, 20 deletions
diff --git a/ports/esp32/machine_uart.c b/ports/esp32/machine_uart.c
index 3c90a7215..aa8d494ec 100644
--- a/ports/esp32/machine_uart.c
+++ b/ports/esp32/machine_uart.c
@@ -35,6 +35,7 @@
#include "py/stream.h"
#include "py/mperrno.h"
#include "modmachine.h"
+#include "uart.h"
#if ESP_IDF_VERSION < ESP_IDF_VERSION_VAL(4, 1, 0)
#define UART_INV_TX UART_INVERSE_TXD
@@ -151,6 +152,10 @@ STATIC void machine_uart_init_helper(machine_uart_obj_t *self, size_t n_args, co
if (args[ARG_txbuf].u_int >= 0 || args[ARG_rxbuf].u_int >= 0) {
// must reinitialise driver to change the tx/rx buffer size
+ if (self->uart_num == MICROPY_HW_UART_REPL) {
+ mp_raise_ValueError(MP_ERROR_TEXT("UART buffer size is fixed"));
+ }
+
if (args[ARG_txbuf].u_int >= 0) {
self->txbuf = args[ARG_txbuf].u_int;
}
@@ -291,12 +296,6 @@ STATIC mp_obj_t machine_uart_make_new(const mp_obj_type_t *type, size_t n_args,
mp_raise_msg_varg(&mp_type_ValueError, MP_ERROR_TEXT("UART(%d) does not exist"), uart_num);
}
- // Attempts to use UART0 from Python has resulted in all sorts of fun errors.
- // FIXME: UART0 is disabled for now.
- if (uart_num == UART_NUM_0) {
- mp_raise_msg_varg(&mp_type_ValueError, MP_ERROR_TEXT("UART(%d) is disabled (dedicated to REPL)"), uart_num);
- }
-
// Defaults
uart_config_t uartcfg = {
.baud_rate = 115200,
@@ -338,14 +337,17 @@ STATIC mp_obj_t machine_uart_make_new(const mp_obj_type_t *type, size_t n_args,
#endif
}
- // Remove any existing configuration
- uart_driver_delete(self->uart_num);
+ // Only reset the driver if it's not the REPL UART.
+ if (uart_num != MICROPY_HW_UART_REPL) {
+ // Remove any existing configuration
+ uart_driver_delete(self->uart_num);
- // init the peripheral
- // Setup
- uart_param_config(self->uart_num, &uartcfg);
+ // init the peripheral
+ // Setup
+ uart_param_config(self->uart_num, &uartcfg);
- uart_driver_install(uart_num, self->rxbuf, self->txbuf, 0, NULL, 0);
+ uart_driver_install(uart_num, self->rxbuf, self->txbuf, 0, NULL, 0);
+ }
mp_map_t kw_args;
mp_map_init_fixed_table(&kw_args, n_kw, args + n_args);
diff --git a/ports/esp32/uart.c b/ports/esp32/uart.c
index ca4ac67cd..f6493dc79 100644
--- a/ports/esp32/uart.c
+++ b/ports/esp32/uart.c
@@ -35,14 +35,6 @@
#include "py/mphal.h"
#include "uart.h"
-#ifndef MICROPY_HW_UART_REPL
-#define MICROPY_HW_UART_REPL (UART_NUM_0)
-#endif
-
-#ifndef MICROPY_HW_UART_REPL_BAUD
-#define MICROPY_HW_UART_REPL_BAUD (115200)
-#endif
-
STATIC void uart_irq_handler(void *arg);
void uart_stdout_init(void) {
diff --git a/ports/esp32/uart.h b/ports/esp32/uart.h
index 439be521c..f32d5cf34 100644
--- a/ports/esp32/uart.h
+++ b/ports/esp32/uart.h
@@ -28,6 +28,14 @@
#ifndef MICROPY_INCLUDED_ESP32_UART_H
#define MICROPY_INCLUDED_ESP32_UART_H
+#ifndef MICROPY_HW_UART_REPL
+#define MICROPY_HW_UART_REPL (UART_NUM_0)
+#endif
+
+#ifndef MICROPY_HW_UART_REPL_BAUD
+#define MICROPY_HW_UART_REPL_BAUD (115200)
+#endif
+
void uart_stdout_init(void);
int uart_stdout_tx_strn(const char *str, size_t len);