[PATCH] bsp/atsam: Improve UART / USART tx performance

Gedare Bloom gedare at rtems.org
Sun Feb 13 16:36:22 UTC 2022


ok for 5 and master

On Fri, Feb 11, 2022 at 1:07 AM Christian Mauderer
<christian.mauderer at embedded-brains.de> wrote:
>
> Put the next character into the send buffer if the buffer is empty and
> not when the last character has been sent out to the line. This improves
> the performance slightly.
>
> Before that patch, the receive path was faster than the transmit path.
> Therefore a simple echo could drop characters on a busy connection.
> With this patch sending and receiving has about the same performance so
> that no characters are lost.
>
> Fixes #4610
> ---
>
>
> Note: The problem exists on 5 and master. The ticket for 5 is #4611. I would
> like to push this patch to both branches.
>
>
>
>  bsps/arm/atsam/console/console.c | 9 +++++----
>  1 file changed, 5 insertions(+), 4 deletions(-)
>
> diff --git a/bsps/arm/atsam/console/console.c b/bsps/arm/atsam/console/console.c
> index 5ef4327e11..0802ca2155 100644
> --- a/bsps/arm/atsam/console/console.c
> +++ b/bsps/arm/atsam/console/console.c
> @@ -145,8 +145,9 @@ static void atsam_uart_interrupt(void *arg)
>      }
>    }
>
> -  if (ctx->transmitting && (sr & UART_SR_TXEMPTY) != 0) {
> +  while (ctx->transmitting && (sr & UART_SR_TXRDY) != 0) {
>      rtems_termios_dequeue_characters(tty, 1);
> +    sr = regs->UART_SR;
>    }
>  }
>  #endif
> @@ -408,16 +409,16 @@ static void atsam_uart_write(
>    if (len > 0) {
>      ctx->transmitting = true;
>      regs->UART_THR = buf[0];
> -    regs->UART_IER = UART_IDR_TXEMPTY;
> +    regs->UART_IER = UART_IDR_TXRDY;
>    } else {
>      ctx->transmitting = false;
> -    regs->UART_IDR = UART_IDR_TXEMPTY;
> +    regs->UART_IDR = UART_IDR_TXRDY;
>    }
>  #else
>    size_t i;
>
>    for (i = 0; i < len; ++i) {
> -    while ((regs->UART_SR & UART_SR_TXEMPTY) == 0) {
> +    while ((regs->UART_SR & UART_SR_TXRDY) == 0) {
>        /* Wait */
>      }
>
> --
> 2.31.1
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel


More information about the devel mailing list