79
6174B–ATARM–07-Nov-05
AT91FR40162S Preliminary
Notes:
1. NIRQ de-assertion and automatic interrupt clearing if the source is programmed as level sensitive.
2. Software that has been written and debugged using Protect Mode will run correctly in Normal Mode without modification.
However, in Normal Mode the AIC_IVR write has no effect and can be removed to optimize the code.
13.11 Standard Interrupt Sequence
It is assumed that:
• The Advanced Interrupt Controller has been programmed, AIC_SVR are loaded with
corresponding interrupt service routine addresses and interrupts are enabled.
• The Instruction at address 0x18(IRQ exception vector address) is
ldr pc, [pc, # - &F20]
When NIRQ is asserted, if the bit I of CPSR is 0, the sequence is:
1.
The CPSR is stored in SPSR_irq, the current value of the Program Counter is loaded in
the IRQ link register (r14_irq) and the Program Counter (r15) is loaded with 0x18. In the
following cycle during fetch at address 0x1C, the ARM core adjusts r14_irq, decrement-
ing it by 4.
2.
The ARM core enters IRQ Mode, if it is not already.
3.
When the instruction loaded at address 0x18 is executed, the Program Counter is
loaded with the value read in AIC_IVR. Reading the AIC_IVR has the following effects:
– Set the current interrupt to be the pending one with the highest priority. The current
level is the priority level of the current interrupt.
– De-assert the NIRQ line on the processor. (Even if vectoring is not used, AIC_IVR
must be read in order to de-assert NIRQ)
– Automatically clear the interrupt, if it has been programmed to be edge triggered
– Push the current level on to the stack
– Return the value written in the AIC_SVR corresponding to the current interrupt
4.
The previous step has effect to branch to the corresponding interrupt service routine.
This should start by saving the Link Register(r14_irq) and the SPSR(SPSR_irq). Note
that the Link Register must be decremented by 4 when it is saved, if it is to be restored
directly into the Program Counter at the end of the interrupt.
5.
Further interrupts can then be unmasked by clearing the I bit in the CPSR, allowing re-
assertion of the NIRQ to be taken into account by the core. This can occur if an inter-
rupt with a higher priority than the current one occurs.
6.
The Interrupt Handler can then proceed as required, saving the registers which will be
used and restoring them at the end. During this phase, an interrupt of priority higher
than the current level will restart the sequence from step 1. Note that if the interrupt is
Table 13-2.
Order of Interrupt Steps According to Mode
Action
Normal Mode
Protect Mode
Calculate active interrupt (higher than current or spurious)
Read AIC_IVR
Read AIC_IVR
Determine and return the vector of the active interrupt
Read AIC_IVR
Read AIC_IVR
Memorize interrupt
Read AIC_IVR
Read AIC_IVR
Push on internal stack the current priority level
Read AIC_IVR
Write AIC_IVR
Acknowledge the interrupt
Read AIC_IVR
Write AIC_IVR
No effect
Write AIC_IVR
–
Содержание AT91FR40162S
Страница 180: ...180 6174B ATARM 07 Nov 05 AT91FR40162S Preliminary Figure 19 2 MCKO Relative to NRST NRST tD MCKO...
Страница 195: ...195 6174B ATARM 07 Nov 05 AT91FR40162S Preliminary 20 5 2 CE Controlled Figure 20 15 CE Controlled...
Страница 204: ...204 6174B ATARM 07 Nov 05 AT91FR40162S Preliminary 23 AT91FR40162S Errata There is no known errata for the AT91FR40162S...