summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrobert-hh <robert@hammelrath.com>2024-03-06 21:05:13 +0100
committerDamien George <damien@micropython.org>2024-08-29 16:27:43 +1000
commit324c6753479b003d00a6c78a39cb078e73165f30 (patch)
tree153dd100365d87d167f88a84d45a3a835c1ef7c2
parentb7fa4e2fc87481180c7e36e80f2518856bfa0540 (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.c1
-rw-r--r--ports/renesas-ra/uart.c18
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