ARM Interrupts

Manne Tallmarken mannet at kth.se
Mon Jul 11 20:53:42 UTC 2011


I solved this by just reading the interrupt vector register, this made the information in the interrupt status register to be updated. This should be considered as a bug.

My suggestion is to add the following fix in the bsp_interrupt_dispatch function in rtems-4.10.0/c/src/lib/libcpu/arm/at91rm9200/irq/irq.c:

void bsp_interrupt_dispatch(void)
{
--- begin fix
  /* Read AIC_IVR to notify cpu that irq is being handled */
  int volatile null_read = AIC_CTL_REG(AIC_IVR);
--- end fix

  rtems_vector_number vector = AIC_CTL_REG(AIC_ISR);

  bsp_interrupt_handler_dispatch(vector);

  AIC_CTL_REG(AIC_EOICR) = 0;
}

>________________________________________
>From: Manne Tallmarken
>Sent: Monday, July 11, 2011 04:34
>To: rtems-users at rtems.org
>Subject: RE: ARM Interrupts
>
>summary of debugging the at91rm9200:
>* mask out interrupts from source 1 only (system timer)
>  (set *0xfffff124=0xffffffff)
>  (set *0xfffff120=0x2)
>* clear all interrupts
>  (set *0xfffff128=0xffffffff)
>* breakpoint at irq exception vector
>  (hbreak *0x18)
>* program stops, reading that source is 0
>  (p/x *0xfffff108 returns 0)
>
>The microcontroller says 1=0. Why?
>
>-Manne




More information about the users mailing list