From e8dbb77db5d1d0f2641e31ab823f6202226774d8 Mon Sep 17 00:00:00 2001 From: Dominic Clifton Date: Sat, 13 Dec 2014 19:45:02 +0000 Subject: [PATCH] UART1 - Fix interrupt race condition which resulted in UART randomly stopping transmission of data. --- src/main/drivers/serial_uart.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/drivers/serial_uart.c b/src/main/drivers/serial_uart.c index e192415f7b..663c9ff455 100644 --- a/src/main/drivers/serial_uart.c +++ b/src/main/drivers/serial_uart.c @@ -254,9 +254,11 @@ uint8_t uartRead(serialPort_t *instance) void uartWrite(serialPort_t *instance, uint8_t ch) { uartPort_t *s = (uartPort_t *)instance; - s->port.txBuffer[s->port.txBufferHead++] = ch; - if (s->port.txBufferHead >= s->port.txBufferSize) { + s->port.txBuffer[s->port.txBufferHead] = ch; + if (s->port.txBufferHead + 1 >= s->port.txBufferSize) { s->port.txBufferHead = 0; + } else { + s->port.txBufferHead++; } if (s->txDMAChannel) {