mode_cardemu: fix ordering of events when switching rx/tx mode

This commit is contained in:
Harald Welte
2016-03-01 00:42:04 +01:00
parent 45688d4c3b
commit 8a416b1812

View File

@@ -59,22 +59,25 @@ void card_emu_uart_enable(uint8_t uart_chan, uint8_t rxtx)
Usart *usart = get_usart_by_chan(uart_chan); Usart *usart = get_usart_by_chan(uart_chan);
switch (rxtx) { switch (rxtx) {
case ENABLE_TX: case ENABLE_TX:
USART_EnableIt(usart, US_IER_TXRDY);
USART_DisableIt(usart, ~US_IER_TXRDY); USART_DisableIt(usart, ~US_IER_TXRDY);
USART_SetReceiverEnabled(usart, 0); 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); USART_SetTransmitterEnabled(usart, 1);
break; break;
case ENABLE_RX: case ENABLE_RX:
USART_SetTransmitterEnabled(usart, 0);
USART_SetReceiverEnabled(usart, 1);
USART_EnableIt(usart, US_IER_RXRDY);
USART_DisableIt(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; break;
case 0: case 0:
default: default:
USART_SetTransmitterEnabled(usart, 0); USART_SetTransmitterEnabled(usart, 0);
USART_SetReceiverEnabled(usart, 0); USART_SetReceiverEnabled(usart, 0);
USART_DisableIt(usart, 0xFFFFFFFF); USART_DisableIt(usart, 0xFFFFFFFF);
usart->US_CR = US_CR_RSTSTA | US_CR_RSTIT | US_CR_RSTNACK;
break; break;
} }
} }