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

Christian MAUDERER christian.mauderer at embedded-brains.de
Tue Feb 15 13:49:06 UTC 2022


Thanks. I pushed it.

Am 13.02.22 um 17:36 schrieb Gedare Bloom:
> 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

-- 
--------------------------------------------
embedded brains GmbH
Herr Christian MAUDERER
Dornierstr. 4
82178 Puchheim
Germany
email: christian.mauderer at embedded-brains.de
phone: +49-89-18 94 741 - 18
fax:   +49-89-18 94 741 - 08

Registergericht: Amtsgericht München
Registernummer: HRB 157899
Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler
Unsere Datenschutzerklärung finden Sie hier:
https://embedded-brains.de/datenschutzerklaerung/


More information about the devel mailing list