From 941fb5c4e1f4465b84313a481d56167331b91c18 Mon Sep 17 00:00:00 2001 From: Rahix <rahix@rahix.de> Date: Sun, 11 Aug 2019 14:54:22 +0200 Subject: [PATCH] fix(api): Change interrupt idle value to -1 Previously 0 was used but as 0 is also the ID of the reset interrupt, this could lead to weird behaviors. Signed-off-by: Rahix <rahix@rahix.de> --- epicardium/api/genapi.py | 3 +++ epicardium/api/interrupt-receiver.c | 2 +- epicardium/api/interrupt-sender.c | 5 +++-- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/epicardium/api/genapi.py b/epicardium/api/genapi.py index 5fd546a6..c6cefc92 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 c212a402..7684c6bb 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 cabd3bcb..c20d998e 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; -- GitLab