X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=cpu%2Farm%2Fdrv%2Fsysirq_at91.c;h=281c7963f8afdbee1fb0fc472ca961a3171cd921;hb=07382ad480794063a2d5be63547eb288034d9832;hp=e95d5a15dc49af4d01ab8b5a2ead2c0ac871f429;hpb=55c4d159825f90975aeeb4346c0e4e0c41df6f07;p=bertos.git diff --git a/cpu/arm/drv/sysirq_at91.c b/cpu/arm/drv/sysirq_at91.c index e95d5a15..281c7963 100644 --- a/cpu/arm/drv/sysirq_at91.c +++ b/cpu/arm/drv/sysirq_at91.c @@ -54,7 +54,8 @@ #include "sysirq_at91.h" #include -#include +#include +#include #include #include @@ -93,10 +94,9 @@ STATIC_ASSERT(countof(sysirq_tab) == SYSIRQ_CNT); * various sources (system timer, etc..) and calls * the corresponding handler. */ -static void sysirq_dispatcher(void) __attribute__ ((naked)); +static void sysirq_dispatcher(void) __attribute__ ((interrupt)); static void sysirq_dispatcher(void) { - IRQ_ENTRY(); for (unsigned i = 0; i < countof(sysirq_tab); i++) { if (sysirq_tab[i].enabled @@ -104,7 +104,8 @@ static void sysirq_dispatcher(void) sysirq_tab[i].handler(); } - IRQ_EXIT(); + /* Inform hw that we have served the IRQ */ + AIC_EOICR = 0; } #define SYSIRQ_PRIORITY 0 ///< default priority for system irqs. @@ -144,7 +145,6 @@ void sysirq_init(void) */ void sysirq_setHandler(sysirq_t irq, sysirq_handler_t handler) { - ASSERT(irq >= 0); ASSERT(irq < SYSIRQ_CNT); sysirq_tab[irq].handler = handler; } @@ -154,7 +154,6 @@ void sysirq_setHandler(sysirq_t irq, sysirq_handler_t handler) */ void sysirq_setEnable(sysirq_t irq, bool enable) { - ASSERT(irq >= 0); ASSERT(irq < SYSIRQ_CNT); sysirq_tab[irq].setEnable(enable); @@ -166,7 +165,6 @@ void sysirq_setEnable(sysirq_t irq, bool enable) */ bool sysirq_enabled(sysirq_t irq) { - ASSERT(irq >= 0); ASSERT(irq < SYSIRQ_CNT); return sysirq_tab[irq].enabled;