diff --git a/epicardium/api/genapi.py b/epicardium/api/genapi.py index 5fd546a6f2bfcaea5d50fc2d5fd890e460454f0a..c6cefc927bd7a1bac3729208302f91a9c57811d5 100644 --- a/epicardium/api/genapi.py +++ b/epicardium/api/genapi.py @@ -231,6 +231,9 @@ void __dispatch_isr(api_int_id_t id) f_client.write(tmp.format(**isr)) tmp = """\ + case (-1): + /* Ignore a spurious interrupt */ + break; default: epic_isr_default_handler(id); break; diff --git a/epicardium/api/interrupt-receiver.c b/epicardium/api/interrupt-receiver.c index c212a402d0a564375bddc193fd7ccf7c50507a81..7684c6bb1e370fe0c48c71f475d3794c7174bf89 100644 --- a/epicardium/api/interrupt-receiver.c +++ b/epicardium/api/interrupt-receiver.c @@ -10,5 +10,5 @@ void TMR5_IRQHandler(void) { TMR_IntClear(MXC_TMR5); __dispatch_isr(API_CALL_MEM->int_id); - API_CALL_MEM->int_id = 0; + API_CALL_MEM->int_id = (-1); } diff --git a/epicardium/api/interrupt-sender.c b/epicardium/api/interrupt-sender.c index cabd3bcb2b96f6f79c65a0a9722bd05860cf860e..c20d998efb01d5a093dfed7ac865c46f969986d1 100644 --- a/epicardium/api/interrupt-sender.c +++ b/epicardium/api/interrupt-sender.c @@ -11,8 +11,9 @@ int api_interrupt_trigger(api_int_id_t id) } if (int_enabled[id]) { - while (API_CALL_MEM->int_id) + while (API_CALL_MEM->int_id != (-1)) ; + API_CALL_MEM->int_id = id; TMR_TO_Start(MXC_TMR5, 1, 0); } @@ -21,7 +22,7 @@ int api_interrupt_trigger(api_int_id_t id) void api_interrupt_init(void) { - API_CALL_MEM->int_id = 0; + API_CALL_MEM->int_id = (-1); for (int i = 0; i < EPIC_INT_NUM; i++) { int_enabled[i] = false;