summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrobert-hh <robert@hammelrath.com>2023-03-08 20:59:24 +0100
committerDamien George <damien@micropython.org>2023-03-22 16:21:48 +1100
commitb7ea90d4cbcc3c718d2bc7d68015cb220cf50897 (patch)
treefb06732481607e1191dca5e7d27f8201799aac07
parentb5ceb9d5773d04a69dc92cb56e8e6b97043409b3 (diff)
rp2/machine_uart: Fix setting of UART LCR parameters.
Prior to this change, setting of UART parameters like parity, stop bits or data bits did not work correctly. As suggested by @iabdalkader, adding __DSB() fixes the problem, making sure that changes to the UART LCR_H register are seen by the peripheral. Note: the FIFO is already enabled in the call to uart_init(), so the call to uart_set_fifo_enabled() is not required, but kept for visibility. Fixes issue #10976.
-rw-r--r--ports/rp2/machine_uart.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/ports/rp2/machine_uart.c b/ports/rp2/machine_uart.c
index e4881cd4f..09870e78f 100644
--- a/ports/rp2/machine_uart.c
+++ b/ports/rp2/machine_uart.c
@@ -336,7 +336,9 @@ STATIC void machine_uart_init_helper(machine_uart_obj_t *self, size_t n_args, co
uart_init(self->uart, self->baudrate);
uart_set_format(self->uart, self->bits, self->stop, self->parity);
+ __DSB(); // make sure UARTLCR_H register is written to
uart_set_fifo_enabled(self->uart, true);
+ __DSB(); // make sure UARTLCR_H register is written to
gpio_set_function(self->tx, GPIO_FUNC_UART);
gpio_set_function(self->rx, GPIO_FUNC_UART);
if (self->invert & UART_INVERT_RX) {