X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fcpu%2Farm%2Fdrv%2Fsysirq_at91.c;h=6de17602ce7cc5755b3d38da6dbf10b4e2935f3a;hb=f989f600755eda606c6c9853bb229bec47bebbc0;hp=281c7963f8afdbee1fb0fc472ca961a3171cd921;hpb=345f93de1963f49bdb194d2b06c8c5d7ba0a3e5f;p=bertos.git diff --git a/bertos/cpu/arm/drv/sysirq_at91.c b/bertos/cpu/arm/drv/sysirq_at91.c index 281c7963..6de17602 100644 --- a/bertos/cpu/arm/drv/sysirq_at91.c +++ b/bertos/cpu/arm/drv/sysirq_at91.c @@ -93,11 +93,17 @@ STATIC_ASSERT(countof(sysirq_tab) == SYSIRQ_CNT); * This function checks for interrupt enable state of * various sources (system timer, etc..) and calls * the corresponding handler. + * + * \note On AT91SAM7, all system IRQs (timer included) are handled + * by the sysirq_dispatcher, so we can't differentiate between + * context-switch and non-context-switch ISR inside this + * class of IRQs. */ -static void sysirq_dispatcher(void) __attribute__ ((interrupt)); -static void sysirq_dispatcher(void) +static DECLARE_ISR_CONTEXT_SWITCH(sysirq_dispatcher) { - for (unsigned i = 0; i < countof(sysirq_tab); i++) + unsigned int i; + + for (i = 0; i < countof(sysirq_tab); i++) { if (sysirq_tab[i].enabled && sysirq_tab[i].handler) @@ -119,7 +125,7 @@ MOD_DEFINE(sysirq); */ void sysirq_init(void) { - cpuflags_t flags; + cpu_flags_t flags; IRQ_SAVE_DISABLE(flags); /* Disable all system interrupts */