This is an automated email from the ASF dual-hosted git repository. xiaoxiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit 0a70235b0c6dcd629fc42959debaa7518d1d6a0f Author: ligd <[email protected]> AuthorDate: Mon Mar 25 12:35:12 2024 +0800 serial/pl011: fix can't up_putc() after setup Signed-off-by: ligd <[email protected]> --- drivers/serial/uart_pl011.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/drivers/serial/uart_pl011.c b/drivers/serial/uart_pl011.c index 3325568e93..3e78253f44 100644 --- a/drivers/serial/uart_pl011.c +++ b/drivers/serial/uart_pl011.c @@ -666,6 +666,16 @@ static void pl011_send(FAR struct uart_dev_s *dev, int ch) config->uart->dr = ch; } +static void pl011_putc(struct uart_dev_s *dev, int ch) +{ + irqstate_t flags; + + flags = spin_lock_irqsave(NULL); + while (!pl011_txempty(dev)); + pl011_send(dev, ch); + spin_unlock_irqrestore(NULL, flags); +} + /*************************************************************************** * Name: pl011_rxavailable * @@ -986,6 +996,7 @@ static int pl011_setup(FAR struct uart_dev_s *dev) } up_irq_restore(i_flags); + pl011_enable(sport); return 0; } @@ -1060,10 +1071,10 @@ int up_putc(int ch) { /* Add CR */ - pl011_send(dev, '\r'); + pl011_putc(dev, '\r'); } - pl011_send(dev, ch); + pl011_putc(dev, ch); return ch; }
