From 12d4bdfbb1b1f5c232c23360cd63f2671f0f7a29 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Wed, 2 Mar 2016 10:31:03 +0100 Subject: [PATCH] mode_cardemu: Process RX interrupts before TX It's always more important to pull out a received character from the receive holding register to avoid the risk of overflow, so let's do that first. --- firmware/src_simtrace/mode_cardemu.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/firmware/src_simtrace/mode_cardemu.c b/firmware/src_simtrace/mode_cardemu.c index 9ee31ca7..10b5c4c3 100644 --- a/firmware/src_simtrace/mode_cardemu.c +++ b/firmware/src_simtrace/mode_cardemu.c @@ -106,16 +106,16 @@ void usart_irq_rx(uint8_t uart) #endif csr = usart->US_CSR; - if (csr & US_CSR_TXRDY) { - if (card_emu_tx_byte(ch) == 0) - USART_DisableIt(usart, US_IER_TXRDY); - } - if (csr & US_CSR_RXRDY) { byte = (usart->US_RHR) & 0xFF; rbuf_write(&ch1_rb, byte); } + if (csr & US_CSR_TXRDY) { + if (card_emu_tx_byte(ch) == 0) + USART_DisableIt(usart, US_IER_TXRDY); + } + if (csr & (US_CSR_OVRE|US_CSR_FRAME|US_CSR_PARE| US_CSR_TIMEOUT|US_CSR_NACK|(1<<10))) { usart->US_CR = US_CR_RSTSTA | US_CR_RSTIT | US_CR_RSTNACK;