From 8a416b181223510aa99877ca9fce5154dff72af1 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Tue, 1 Mar 2016 00:42:04 +0100 Subject: [PATCH] mode_cardemu: fix ordering of events when switching rx/tx mode --- firmware/src_simtrace/mode_cardemu.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/firmware/src_simtrace/mode_cardemu.c b/firmware/src_simtrace/mode_cardemu.c index 4098bc66..5e8332b0 100644 --- a/firmware/src_simtrace/mode_cardemu.c +++ b/firmware/src_simtrace/mode_cardemu.c @@ -59,22 +59,25 @@ void card_emu_uart_enable(uint8_t uart_chan, uint8_t rxtx) Usart *usart = get_usart_by_chan(uart_chan); switch (rxtx) { case ENABLE_TX: - USART_EnableIt(usart, US_IER_TXRDY); USART_DisableIt(usart, ~US_IER_TXRDY); USART_SetReceiverEnabled(usart, 0); + usart->US_CR = US_CR_RSTSTA | US_CR_RSTIT | US_CR_RSTNACK; + USART_EnableIt(usart, US_IER_TXRDY); USART_SetTransmitterEnabled(usart, 1); break; case ENABLE_RX: - USART_SetTransmitterEnabled(usart, 0); - USART_SetReceiverEnabled(usart, 1); - USART_EnableIt(usart, US_IER_RXRDY); USART_DisableIt(usart, ~US_IER_RXRDY); + USART_SetTransmitterEnabled(usart, 0); + usart->US_CR = US_CR_RSTSTA | US_CR_RSTIT | US_CR_RSTNACK; + USART_EnableIt(usart, US_IER_RXRDY); + USART_SetReceiverEnabled(usart, 1); break; case 0: default: USART_SetTransmitterEnabled(usart, 0); USART_SetReceiverEnabled(usart, 0); USART_DisableIt(usart, 0xFFFFFFFF); + usart->US_CR = US_CR_RSTSTA | US_CR_RSTIT | US_CR_RSTNACK; break; } }