summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/sparc/shared/timer
diff options
context:
space:
mode:
authorDaniel Hellstrom <daniel@gaisler.com>2012-11-19 17:41:15 +0100
committerDaniel Hellstrom <daniel@gaisler.com>2015-04-17 01:10:18 +0200
commit4d249b9fed4deb45a70c6494f2c8905c237c49c4 (patch)
treeda4edababe1e7dd09f07ac2c4f53d3c88c44ff1b /c/src/lib/libbsp/sparc/shared/timer
parentGPTIMER: Only probe pending bit on timer0 (diff)
downloadrtems-4d249b9fed4deb45a70c6494f2c8905c237c49c4.tar.bz2
GPTIMER: support separate & shared irq by clearing pending bit after ISR
Diffstat (limited to 'c/src/lib/libbsp/sparc/shared/timer')
-rw-r--r--c/src/lib/libbsp/sparc/shared/timer/gptimer.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/c/src/lib/libbsp/sparc/shared/timer/gptimer.c b/c/src/lib/libbsp/sparc/shared/timer/gptimer.c
index 2314a3b236..6a7e835f74 100644
--- a/c/src/lib/libbsp/sparc/shared/timer/gptimer.c
+++ b/c/src/lib/libbsp/sparc/shared/timer/gptimer.c
@@ -400,14 +400,16 @@ void gptimer_isr(void *data)
/* Check all timers for IRQ */
for (i=0;i<priv->timer_cnt; i++) {
- if (gptimer_tlib_int_pend((void *)&priv->timers[i], 1)) {
- /* IRQ Was generated by Timer and Pending flag has been
- * cleared. Call ISR registered
+ if (gptimer_tlib_int_pend((void *)&priv->timers[i], 0)) {
+ /* IRQ Was generated by Timer and Pending flag has *not*
+ * yet been cleared, this is to allow ISR to look at
+ * pending bit. Call ISR registered. Clear pending bit.
*/
if (priv->timers[i].tdev.isr_func) {
priv->timers[i].tdev.isr_func(
priv->timers[i].tdev.isr_data);
}
+ gptimer_tlib_int_pend((void *)&priv->timers[i], 1);
}
}
}