From fa7297b93f4187bce9439bb676874815f66d8f21 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Mon, 15 Aug 2011 22:59:24 +0200 Subject: SIMTRACE UART: Reset error status on error related IRQ This prevents an IRQ-flood after a parity or overrun error, which in turn would cause a watchdog reset. --- firmware/src/simtrace/iso7816_uart.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'firmware') diff --git a/firmware/src/simtrace/iso7816_uart.c b/firmware/src/simtrace/iso7816_uart.c index 67f8e0d..f30977a 100644 --- a/firmware/src/simtrace/iso7816_uart.c +++ b/firmware/src/simtrace/iso7816_uart.c @@ -530,7 +530,16 @@ static __ramfunc void usart_irq(void) } if (csr & (AT91C_US_PARE|AT91C_US_FRAME|AT91C_US_OVRE)) { + u_int8_t nb_err = usart->US_NER; /* FIXME: some error has occurrerd */ + //DEBUGP("NER=%02x ", nb_err); + /* clear the status */ + usart->US_CR |= AT91C_US_RSTSTA; + } + + if (csr & AT91C_US_INACK) { + /* we would have sent a NACK if INACK was not set */ + usart->US_CR |= AT91C_US_RSTNACK; } } -- cgit v1.2.3