X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=cpu%2Farm%2Fdrv%2Fsysirq_at91.c;h=281c7963f8afdbee1fb0fc472ca961a3171cd921;hb=80a7f29525ac68106aec85dec0b3b4a12a75b31e;hp=7b12af2d8f4993d2b918467a0f3280adbdf74443;hpb=71ef544fea9e991379181432011abb47166fec7b;p=bertos.git diff --git a/cpu/arm/drv/sysirq_at91.c b/cpu/arm/drv/sysirq_at91.c index 7b12af2d..281c7963 100644 --- a/cpu/arm/drv/sysirq_at91.c +++ b/cpu/arm/drv/sysirq_at91.c @@ -94,20 +94,18 @@ 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(); - - /* PIT */ - if ((PIT_MR & BV(PITIEN)) - && (PIT_SR & BV(PITS)) - && sysirq_tab[SYSIRQ_PIT].handler) - sysirq_tab[SYSIRQ_PIT].handler(); - - /* TODO: add other system sources here */ + for (unsigned i = 0; i < countof(sysirq_tab); i++) + { + if (sysirq_tab[i].enabled + && sysirq_tab[i].handler) + 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. @@ -125,8 +123,8 @@ void sysirq_init(void) IRQ_SAVE_DISABLE(flags); /* Disable all system interrupts */ - PIT_MR &= BV(PITIEN); - /* TODO: add other system sources here */ + for (unsigned i = 0; i < countof(sysirq_tab); i++) + sysirq_tab[i].setEnable(false); /* Set the vector. */ AIC_SVR(SYSC_ID) = sysirq_dispatcher;