dynamically dispatch USART IRQs
The different modes (configurations) will have different interrupt
handlers, so we need to dispatch them via config_func_ptrs
diff --git a/firmware/src_simtrace/mode_cardemu.c b/firmware/src_simtrace/mode_cardemu.c
index d53d60b..00742d6 100644
--- a/firmware/src_simtrace/mode_cardemu.c
+++ b/firmware/src_simtrace/mode_cardemu.c
@@ -167,17 +167,13 @@
/* FIXME: integrate this with actual irq handler */
-void usart_irq_rx(uint8_t uart)
+static void usart_irq_rx(uint8_t inst_num)
{
- Usart *usart = get_usart_by_chan(uart);
- struct cardem_inst *ci = &cardem_inst[0];
+ Usart *usart = get_usart_by_chan(inst_num);
+ struct cardem_inst *ci = &cardem_inst[inst_num];
uint32_t csr;
uint8_t byte = 0;
-#ifdef CARDEMU_SECOND_UART
- if (uart == 1)
- ci = &cardem_inst[1];
-#endif
csr = usart->US_CSR & usart->US_IMR;
if (csr & US_CSR_RXRDY) {
@@ -197,6 +193,18 @@
}
}
+void mode_cardemu_usart0_irq(void)
+{
+ /* USART0 == Instance 1 == USIM 2 */
+ usart_irq_rx(1);
+}
+
+void mode_cardemu_usart1_irq(void)
+{
+ /* USART1 == Instance 0 == USIM 1 */
+ usart_irq_rx(0);
+}
+
/* call-back from card_emu.c to change UART baud rate */
int card_emu_uart_update_fidi(uint8_t uart_chan, unsigned int fidi)
{