Summary of Interrupt Issues
Interrupts are an important part of most embedded systems. Here are some key points to keep in mind when dealing with interrupts:
- Get the first interrupt
Focus on getting the specific interrupt you are working on to occur first. Then move on to getting that interrupt to fire subsequent times.
- Interrupt blocked
Interrupts can be blocked at several points. Ensure that the specific interrupt is enabled both in the interrupt controller and at the source peripheral device. Make sure that global interrupts are enabled in the processor.
- ISR installation
Verify that the ISR is installed in the interrupt vector table properly and for the correct interrupt vector. Understand the mapping of interrupts for the processor. Using the LED debug technique mentioned in Chapter 5 can be a valuable tool for tracing the execution path when an interrupt occurs.
- Protect against unhandled interrupts
Ensure that there is an ISR for every interrupt in the system. It is best to install a default ISR for all interrupts at initialization time to ensure every interrupt is handled.
- Processor context
Make sure the processor context is saved and restored properly in the ISR. Registers can be trampled by an ISR that will eventually wreak havoc on your main program.
- Acknowledge the interrupt
The interrupt must be acknowledged so that the signal is deasserted. If this is done incorrectly or not done at all, ISRs for the same or lower-priority interrupts won’t run again. Or, if it is a level-sensitive ...