SLAU962A December 2025 – June 2026 MSPM33C321A , MSPM33C321A-Q1
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 480 native peripheral interrupt sources. For information on which peripheral is being mapped please see the corresponding data sheet.
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.
Interrupts on the NVIC have programmable priority. There are 64 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. The Arm Cortex-M33 only implements the most significant 6 bits of each 8-bit priority field (giving the 64 priority levels). Lower priority values have higher priority. System exceptions (reset, NMI, hard fault) have fixed priorities of -3, -2, and -1, respectively. As such, these exceptions always have higher priority than peripheral interrupts. Peripheral interrupt priorities are programmable as 0, 64, 128, or 192, with 0 being highest priority and 192 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) |