[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