diff options
author | robert-hh <robert@hammelrath.com> | 2024-03-06 21:05:13 +0100 |
---|---|---|
committer | Damien George <damien@micropython.org> | 2024-08-29 16:27:43 +1000 |
commit | 324c6753479b003d00a6c78a39cb078e73165f30 (patch) | |
tree | 153dd100365d87d167f88a84d45a3a835c1ef7c2 | |
parent | b7fa4e2fc87481180c7e36e80f2518856bfa0540 (diff) |
renesas-ra/machine_uart: Add the UART.IRQ_RX class constant.
The renesas-ra port supports calling a handler to be called on every byte
received by UART. For consistency with other ports, the symbol IRQ_RX
is added as the trigger name.
Side change: Add the received UART data to the REPL input buffer only if it
is the REPL UART. Otherwise, every UART would act as REPL input.
Signed-off-by: robert-hh <robert@hammelrath.com>
-rw-r--r-- | ports/renesas-ra/machine_uart.c | 1 | ||||
-rw-r--r-- | ports/renesas-ra/uart.c | 18 |
2 files changed, 12 insertions, 7 deletions
diff --git a/ports/renesas-ra/machine_uart.c b/ports/renesas-ra/machine_uart.c index 26ed62540..4a659d107 100644 --- a/ports/renesas-ra/machine_uart.c +++ b/ports/renesas-ra/machine_uart.c @@ -41,6 +41,7 @@ #define MICROPY_PY_MACHINE_UART_CLASS_CONSTANTS \ { MP_ROM_QSTR(MP_QSTR_RTS), MP_ROM_INT(UART_HWCONTROL_RTS) }, \ { MP_ROM_QSTR(MP_QSTR_CTS), MP_ROM_INT(UART_HWCONTROL_CTS) }, \ + { MP_ROM_QSTR(MP_QSTR_IRQ_RX), MP_ROM_INT(0x10) }, \ static const char *_parity_name[] = {"None", "ODD", "EVEN"}; diff --git a/ports/renesas-ra/uart.c b/ports/renesas-ra/uart.c index 30707552b..83b3394f7 100644 --- a/ports/renesas-ra/uart.c +++ b/ports/renesas-ra/uart.c @@ -71,14 +71,18 @@ static void uart_rx_cb(uint32_t ch, int d) { // even disable the IRQ. This should never happen. return; } - #if MICROPY_KBD_EXCEPTION - if (keyex_cb[ch]) { - (*keyex_cb[ch])(d); - } - #endif + #if defined(MICROPY_HW_UART_REPL) + if (ch == MICROPY_HW_UART_REPL) { + #if MICROPY_KBD_EXCEPTION + if (keyex_cb[ch]) { + (*keyex_cb[ch])(d); + } + #endif - #if MICROPY_HW_ENABLE_UART_REPL - ringbuf_put(&stdin_ringbuf, d); + #if MICROPY_HW_ENABLE_UART_REPL + ringbuf_put(&stdin_ringbuf, d); + #endif + } #endif // Check the flags to see if the user handler should be called |