SPRUJF2A March 2026 – March 2026 AM13E23019
The Nested Vectored Interrupt Controller (NVIC) is an industry-standard Arm component which interfaces peripheral interrupts (which are external to the processor) into the CPU. The NVIC supports connection of up to 48 native peripheral interrupt sources. For information on which peripheral is being mapped, please refer to .
| NVIC IRQ mapping | Interrupt Source |
|---|---|
| 0 | PMCU |
| 1 | Debug |
| 2 | Flash |
| 3 | WWDT0 |
| 4 | GPIO0 |
| 5 | GPIO1 |
| 6 | GPIO2 |
| 7 | GPIO3 |
| 8 | ADC0_SEQ0 |
| 9 | ADC0_SEQ1 |
| 10 | ADC0_SEQ2 |
| 11 | ADC0_SEQ3 |
| 12 | ADC0_DCOMP |
| 13 | ADC1_SEQ0 |
| 14 | ADC1_SEQ1 |
| 15 | ADC1_SEQ2 |
| 16 | ADC1_SEQ3 |
| 17 | ADC1_DCOMP |
| 18 | ADC2_SEQ0 |
| 19 | ADC2_SEQ1 |
| 20 | ADC2_SEQ2 |
| 21 | ADC2_SEQ3 |
| 22 | ADC2_DCOMP |
| 23 | MCAN |
| 24 | PWM0_INT |
| 25 | PWM1_INT |
| 26 | PWM2_INT |
| 27 | PWM3_INT |
| 28 | PWM4_INT |
| 29 | ECAP0 |
| 30 | ECAP1 |
| 31 | EQEP0 |
| 32 | EQEP1 |
| 33 | EQEP2 |
| 34 | UC0 |
| 35 | UC1 |
| 36 | UC2 |
| 37 | UC3 |
| 38 | UC4 |
| 39 | UC5 |
| 40 | DMA |
| 41 | TINIE_LITE |
| 42 | EPI |
| 43 | AES.INT_EVENT0 |
| 44 | TIMG4_0 |
| 45 | TIMG12_0 |
| 46 | TMU_LUF_INT |
| 47 | TMU_LVF_INT |
| 48-63 | Reserved (Tie low) |
The NVIC is configured through memory-mapped registers in the system private peripheral bus (PPB) region. See Arm Cortex-M33 NVIC Registers for the list of NVIC registers. The software development kit (SDK) provided with the devices supports the standard Arm Cortex Microcontroller Software Interface Standard (CMSIS) register access definitions for the NVIC. Application software must use 32-bit aligned, word-size transactions when accessing any NVIC register.
In addition to interfacing peripheral interrupts to the processor, the NVIC also supports programmable priority for each interrupt.
Peripheral interrupt enables can be read, set, and cleared through the interrupt set-enable (ISER) and interrupt clear-enable (ICER) registers in the NVIC. Each ICER and ISER register supports 32 different interrupts. The interrupts are mapped to the ISER and ICER registers with interrupt zero in the BIT0 position (LSB) and interrupt 31 in the BIT31 position (MSB) of each register. For example, SETENA[m] in NVIC_ISERn, allows interrupt 32n + m to be accessed.
To enable an interrupt, set the corresponding enable bit in the ISER register. Writing a '0' to ISER has no effect. It is possible to read the ISER or ICER registers to determine which interrupts are enabled. Upon a read, a '1' indicates that an interrupt is enabled; a '0' indicates disabled. To disable an interrupt, set the corresponding clear enable bit in the ICER register. Writing a '0' to ICER has no effect.
In the event that an interrupt is disabled in the NVIC, if the interrupt is asserted by the corresponding peripheral then the NVIC interrupt will go to a pending state but the processor is not interrupted. If an interrupt is disabled when in an active state (when a handler is running) it will remain active until the exception handler returns or a reset occurs, but no further activations will happen.
Pending interrupt status can be read, set, and cleared through the interrupt set-pending (ISPR) and interrupt clear-pending (ICPR) registers in the NVIC. Each ISPR and ICPR register supports 32 interrupts, with interrupt zero in the BIT0 position (LSB) and interrupt 31 in the BIT31 position (MSB) of each register. For example, SETPEND[m] in NVIC_ISPRn, allows interrupt 32n + m to be accessed.
To read if an interrupt is pending, read either the ISPR or the ICPR. Upon a read, a '1' indicates that an interrupt is pending; a '0' indicates not pending. To set an interrupt to a pending state through software, set the corresponding bit in the ISPR register. Writing a '0' to ISPR has no effect. To clear an interrupt pending state, set the corresponding bit in the ICPR register. Writing a '0' to ICPR has no effect. Note that if a peripheral interrupt condition is still present, the pending state will be set again by hardware even if it is cleared.
The IABR registers in the NVIC indicate the active state of each interrupt. Each IABR register supports 32 interrupts, with interrupt 0 in the BIT0 position (LSB) and interrupt 31 in the BIT31 position (MSB) of each register. For example, ACTIVE[m] in NVIC_IABRn, indicates the active state for interrupt 32n+m.
To read if an interrupt is active, read the IABR register. Upon a read, a '1' indicates that an interrupt is active; a '0' indicates not active.
The STIR register in the NVIC is used to generate an interrupt from software. The INTID field of the STIR register designates the interrupt ID of the interrupt to trigger, in the range of 0-48. For example, a INTID value of 0x03 specified IRQ3. When the USERSETMPEND bit in the CCR register is set to '1', unpriveileged software can access the STIR register. Only privileged software can enable unprivileged access.
Interrupts on the NVIC have programmable priority. There are 16 priority levels possible. Priority is set by programming the IPR registers in the NVIC. Each priority field is 8 bits in length, and the priority for 4 interrupts is configured per 32-bit IPR register. AM13E230x only implements the most significant 4 bits of each 8-bit priority field (giving the 16 priority levels). Lower priority values have higher priority. System exceptions (Reset, NMI, and HardFault) have fixed priorities of -4, -2, and -1, respectively. As such, these exceptions always have higher priority than peripheral interrupts. Peripheral interrupt priorities are programmable as 0, 16, 32, 48, 64, …, 240 with 0 being highest priority and 240 being lowest priority.
If the processor is currently handling an exception, it can only be preempted by a higher priority exception. In the event that there are multiple exceptions in a pending state which all have the same priority level assigned, the exception with the lowest exception number is taken first.
| Address | Register | CMSIS | Description |
|---|---|---|---|
| 0xE000.E100 - 0xE000.E13C | NVIC_ISER0 - NVIC_ISER15 | NVIC->ISER[0] - NVIC->ISER[15] | Interrupt set-enable register |
| 0xE000.E180 - 0xE000.E1BC | NVIC_ICER0 - NVIC_ICER15 | NVIC->ICER[0] - NVIC->ICER[15] | Interrupt clear-enable register |
| 0xE000.E200 - 0xE000.E23C | NVIC_ISPR0 - NVIC_ISPR15 | NVIC->ISPR[0] - NVIC->ISPR[15] | Interrupt set-pending register |
| 0xE000.E280 - 0xE000.E2BC | NVIC_ICPR0 - NVIC_ICPR15 | NVIC->ICPR[0] - NVIC->ICPR[15] | Interrupt clear-pending register |
| 0xE000.E300 - 0xE000.E33C | NVIC_IABR0 - NVIC_IABR15 | NVIC->IABR[0] - NVIC->IABR[15] | Interrupt active bit register |
| 0xE000.E400 - 0xE000.E5DC | NVIC_IPR0 - NVIC_IPR119 | NVIC->IPR[0] - NVIC->IPR[119] | Interrupt priority register (0 - 3) - Interrupt priority register (115 - 119) |
| 0xE000EF00 | STIR | NVIC->STIR | Software trigger interrupt register |