Skip to content

Commit

Permalink
rp2/machine_uart: Fix setting of UART LCR parameters.
Browse files Browse the repository at this point in the history
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 micropython#10976.
  • Loading branch information
robert-hh authored and dpgeorge committed Mar 22, 2023
1 parent b5ceb9d commit b7ea90d
Showing 1 changed file with 2 additions and 0 deletions.
2 changes: 2 additions & 0 deletions ports/rp2/machine_uart.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down

0 comments on commit b7ea90d

Please sign in to comment.