My interrupt handler is not working, what could cause this?
The most likely causes are:
- Global interrupts are not enabled. On ARM7/ARM9 & XScale you can enable global IRQ interrupts by calling the libarm_enable_irq function and enable global FIQ interrupts by calling the libarm_enable_fiq function.
- Interrupt controller not correctly configured to generate an interrupt for your interrupt source. Check your target's user manual for information on programming the interrupt controller.
- Interrupt is not is actually occuring. If it is an external interrupt check the status of the input signal. If it is an internal peripheral interrupt check you have correctly configured the peripheral to generate an interrupt and the interrupt stimulus is occurring. Most interrupt controllers have a status register that allow you to check the current status of an individual interrupt source.
If you think the interrupt is occurring and that the interrupt controller has been correctly configured, set a breakpoint on the interrupt vector - If the breakpoint is never hit it is likely the interrupt has not been correctly configured. If it is hit, single step through the interrupt code to find out why your ISR is not being called.