From e6c4363ddbad4d4bd1bbb79e46fcdc2cda396d0e Mon Sep 17 00:00:00 2001 From: Giovanni Di Sirio Date: Sun, 1 Mar 2015 09:18:26 +0000 Subject: Fixed bug #558. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@7706 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/hal/ports/STM32/LLD/USARTv1/serial_lld.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'os/hal/ports') diff --git a/os/hal/ports/STM32/LLD/USARTv1/serial_lld.c b/os/hal/ports/STM32/LLD/USARTv1/serial_lld.c index 45140b88c..69b725d10 100644 --- a/os/hal/ports/STM32/LLD/USARTv1/serial_lld.c +++ b/os/hal/ports/STM32/LLD/USARTv1/serial_lld.c @@ -165,11 +165,16 @@ static void serve_interrupt(SerialDriver *sdp) { /* Data available.*/ osalSysLockFromISR(); - while (sr & USART_SR_RXNE) { + while (sr & (USART_SR_RXNE | USART_SR_ORE | USART_SR_NE | USART_SR_FE | + USART_SR_PE)) { + uint8_t b; + /* Error condition detection.*/ if (sr & (USART_SR_ORE | USART_SR_NE | USART_SR_FE | USART_SR_PE)) set_error(sdp, sr); - sdIncomingDataI(sdp, u->DR); + b = u->DR; + if (sr & USART_SR_RXNE) + sdIncomingDataI(sdp, b); sr = u->SR; } osalSysUnlockFromISR(); -- cgit v1.2.3