summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libcpu/arm/at91rm9200/irq/irq.c
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2011-07-13 20:24:19 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2011-07-13 20:24:19 +0000
commit39601584068c27eb80739b3dd0387b429be58766 (patch)
tree21e3e5fb8d7b38e16e4fa75a2e792a3103e77e6e /c/src/lib/libcpu/arm/at91rm9200/irq/irq.c
parent2011-07-13 Till Straumann <strauman@slac.stanford.edu> (diff)
downloadrtems-39601584068c27eb80739b3dd0387b429be58766.tar.bz2
2011-07-13 Sebastian Huber <sebastian.huber@embedded-brains.de>
PR 1832/libcpu * at91rm9200/irq/irq.c: he bsp_interrupt_dispatch routine does not determine the correct interrupt source number. According to the datasheet, the reading of the interrupt vector register (AIC_IVR) notifies the hardware that the OS is taken care of the interrupt. Only after AIC_IVR have been read can the correct source number be read from the interrupt status register (AIC_ISR).
Diffstat (limited to '')
-rw-r--r--c/src/lib/libcpu/arm/at91rm9200/irq/irq.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/c/src/lib/libcpu/arm/at91rm9200/irq/irq.c b/c/src/lib/libcpu/arm/at91rm9200/irq/irq.c
index a2b34d4525..12a0df6f6f 100644
--- a/c/src/lib/libcpu/arm/at91rm9200/irq/irq.c
+++ b/c/src/lib/libcpu/arm/at91rm9200/irq/irq.c
@@ -21,7 +21,7 @@
void bsp_interrupt_dispatch(void)
{
- rtems_vector_number vector = AIC_CTL_REG(AIC_ISR);
+ rtems_vector_number vector = AIC_CTL_REG(AIC_IVR);
bsp_interrupt_handler_dispatch(vector);
@@ -44,6 +44,12 @@ rtems_status_code bsp_interrupt_vector_disable(rtems_vector_number vector)
rtems_status_code bsp_interrupt_facility_initialize(void)
{
+ unsigned long i = 0;
+
+ for (i = 0; i < 32; ++i) {
+ AIC_SVR_REG(i<<2) = i;
+ }
+
/* disable all interrupts */
AIC_CTL_REG(AIC_IDCR) = 0xffffffff;