I am trying to understand more about interrupt priorities. So I understand that there are 2 interrupt types – Fast (FIQ) and normal (IRQ). FIQ interrupts have higher priority than IRQ.
Questions:
- All IRQ interrupts are at same priority – so IRQs are serviced on first come first served basis (is my understanding correct about this?).
- I noticed that there is channel (CIM) mapping. Does this provide any means to set priorities for various IRQ interrupts?
- I conducted a test – When the firmware hit a breakpoint in my serial ISR (for SCI1 – RX), I checked for CPSR register. This was set to 0x800000092 which indicates that an IRQ interrupt was generated. So I set the “I” bit in CPSR register to 0 (CPSR = 0x80000012) in order to allow other IRQ interrupts (was wondering if there is any other high priority IRQ interrupt) to trigger immediately while it is in the middle of processing SCI-RX interrupt. The moment I changed CPSR it would re-enter into SCI-RX ISR again – so now it is stuck in SCI-RX ISR forever. So my guess is that it tries to re-enter same ISR as SCI-RX ISR was not completely serviced. So is it possible to do nested interrupts?
Pinakin