From 45688d4c3ba572a6a1d343cd71a8a1b8635e3042 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Mon, 29 Feb 2016 21:35:38 +0100 Subject: [PATCH] mode_cardemu: Disable UART TXRDY generation if we don't have data to TX When the ISO7816 state machine requires us to transmit something, but we don't have data ready to transmit, we should switch off TXRDY interrupt generation. What's missing is of course the other part that re-enabls TXRDY generation once new data is available --- firmware/src_simtrace/mode_cardemu.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/firmware/src_simtrace/mode_cardemu.c b/firmware/src_simtrace/mode_cardemu.c index f1bbaf79..4098bc66 100644 --- a/firmware/src_simtrace/mode_cardemu.c +++ b/firmware/src_simtrace/mode_cardemu.c @@ -102,8 +102,10 @@ void usart_irq_rx(uint8_t uart) #endif csr = usart->US_CSR; - if (csr & US_CSR_TXRDY) - card_emu_tx_byte(ch); + 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;