1.3 Cortex-M3 Processor NVIC

The Cortex-M3 processor contains an NVIC, which is responsible for:

  • Facilitating low-latency exception and interrupt handling
  • Controlling power management

The following table lists the 11 exceptions that NVIC supports. The NVIC also supports up to 83 dynamically re-prioritizable external interrupts, each with up to 16 levels of priority (see Table 1-2). The NVIC maintains knowledge of stacked (nested) interrupts to enable tail-chaining of interrupts. In MSS, the NVIC is configured to have 16 levels of priority (4 msb in BASEPRI register) are implemented, so BASEPRI register [7-4] are used for the priority setting and [3-0] are read as zeros.

The following table lists exceptions. The detailed description of these exceptions can be found in the ARM Cortex-M3 Technical Reference Manual.

Table 1-1. Cortex-M3 Processor Exceptions
Cortex-M3 ExceptionsPosition in Interrupt Vector TablePriorityDescription
Reset1 (zero position is stack pointer)–3Invoked on power-up and reset
Non-maskable exception2–2Non-maskable interrupt (NMI)—watchdog timeout interrupt
HardFault3–1Hard fault interrupt: all fault conditions if the corresponding fault handler is not enabled
Memory management exception4ConfigurableMemory management interrupt: memory management fault; MPU violation or access to illegal locations.
Bus fault exception5ConfigurableBus fault interrupt: bus error; occurs when the AHB interface receives an error response from a bus slave (also called prefetch abort if it is an instruction fetch or data abort if it is a data access).
UsageFault6ConfigurableUsage fault interrupt: exceptions resulting from a program error or trying to access a coprocessor (the Cortex-M3 does not support a coprocessor).
SVCall11ConfigurableSupervisory call interrupt
Debug monitor12ConfigurableDebug monitor interrupt: breakpoints, watchpoints, or external debug requests
PendSV14ConfigurablePend supervisory interrupt
SysTick15ConfigurableSystem tick timer interrupt

The interrupt sources listed in the following table are connected to the NVIC of the Cortex-M3 processor in the MSS.

Table 1-2. Cortex-M3 Processor Interrupts
Cortex-M3 Interrupt Signal Source Description
INTNMI WDOGTIMEOUTINT WATCHDOG This interrupt is asserted (if enabled) if the counter reaches zero and interrupt rather than reset generation has been selected on counter timeout.
INTISR[0] WDOGWAKEUPINT WATCHDOG This interrupt is asserted (if enabled) on crossing the WDOGMVRP level when the SLEEPING input is asserted.
INTISR[1] RTC_WAKEUP_INTR RTC RTC match/wake up interrupt from RTC block
INTISR[2] SPIINT0 SPI_0 Interrupt from SPI 0
INTISR[3] SPIINT1 SPI_1 Interrupt from SPI 1
INTISR[4] I2C_INT0 I2C_0 Interrupt from I2C 0
INTISR[5] I2C_SMBALERT0 I2C_0 Interrupt from I2C 0
INTISR[6] I2C_SMBSUS0 I2C_0 Interrupt from I2C 0
INTISR[7] I2C_INT1 I2C_1 Interrupt from I2C 1
INTISR[8] I2C_SMBALERT1 I2C_1 Interrupt from I2C 1
INTISR[9] I2C_SMBSUS1 I2C_1 Interrupt from I2C 1
INTISR[10] MMUART0_INTR MMUART_0 Interrupt from MMUART 0
INTISR[11] MMUART1_INTR MMUART_1 Interrupt from MMUART 1
INTISR[12] MAC_INT MAC Interrupt from Ethernet MAC
INTISR[13] PDMAINTERRUPT PDMA Interrupt from peripheral DMA block
INTISR[14] TIMER1_INTR TIMER Timer1 interrupt
INTISR[15] TIMER2_INTR TIMER Timer2 interrupt
INTISR[16] CAN_INTR CAN Interrupt from CAN
INTISR[17] ENVM_INT0 ENVMTOAHB0 Asserted on an eNVM_0 basis at the completion of PROGRAM, ECC ERROR, etc.
INTISR[18] ENVM_INT1 ENVMTOAHB1 Asserted on an eNVM_1 basis at the completion of PROGRAM, ECC ERROR, etc.
INTISR[19] COMM_BLK_INTR COMBLK Communication block interrupt
INTISR[20] USB_MC_INT USB CPU interrupts
INTISR[21] USB_DMA_INT USB Core’s DMA engine performs data transfer between endpoint memories and system memory via AHB master port. DMA controller-interrupt.
INTISR[22] MSSDDR_PLL_LOCK_INT SYSREG Interrupt indicating that MSSDDR PLL has achieved lock.
INTISR[23] MSSDDR_PLL_LOCKLOST_INT SYSREG Interrupt indicating that MSSDDR PLL has lost lock.
INTISR[24] SW_ERRORINTERRUPT SYSREG If set, it indicates to the Cortex-M3 processor that:

– One of the masters of the switch attempted an access that resulted in either an error termination by the slave (or possibly the switch itself) or

– Was decoded as an access to unimplemented address space or o. If the master attempted an access while disabled or

– In the case of the fabric master, attempted to access the protected region of memory space

This signal is set by ORing the fields of SW_ERRORSTATUS. It is cleared by writing 1 to the SW_CLEARSTATUS bit.

INTISR[25] CACHE_ERRINTR SYSREG If asserted, indicates that the interrupt is coming from CACHE. This interrupt is generated in the SysReg by ORing of the various interrupts from the CACHE block: CC_HRESPERRINT0, CC_HRESPERRINT1, CC_HRESPERRINT2, CC_HRESPERRINT3.
INTISR[26] DDRB_INTR SYSREG If asserted, indicates that the interrupt is coming from DDRBRDIGE module. 
Interrupts from MSS DDR Bridge module: DDRB_ERROR and DDRB_LOCKTIMEOUT.

These interrupts are ORed in the SysReg and fed to the Cortex-M3 processor.

INTISR[27] HPD_XFR_CMP_INT HPDMA It is asserted when any HPDMA completes a descriptor transfer. Once asserted, it remains asserted until cleared by means of writing 1 to the bit in the control register of the Descriptor-N (0, 1, 2, 3). If HPDMA completes more than one descriptor transfers before the interrupt is serviced then this bit remains asserted until all the descriptors have had Clr_D<N>_Xfr_cmp_int written to 1.
INTISR[28] HPD_XFR_ERR_INT HPDMA It is asserted when any HPDMA completes a descriptor transfer with error. Once asserted, it remains asserted until cleared by means of writing 1 to the bit in the control register of the Descriptor-N (0, 1, 2, 3). If HPDMA completes more than one descriptor with errors before the interrupt is serviced then this bit remains asserted until all the descriptors have had Clr_D<N>_Xfr_err_int written to 1.
INTISR[29] ECCINTR SYSREG It is asserted when an ECC error has been detected in ESRAM0, ESRAM1, MAC, CAN, MDDR, and USB. This is generated by ORing ECC interrupts from these modules.
INTISR[30] MDDR_IO_CALIB_INT SYSREG The interrupt is generated when MDDR calibration is finished. For the calibration after reset, this would be followed by locking the codes directly.

However, for in-between runs during functional DDR operation, the assertion of interrupt does not guarantee lock as the state machine would wait for the ideal time (DRAM self-refresh) for locking. This can be used by the firmware to insert an ideal time, and provides an indication of availability of locked codes.

INTISR[31] FAB_PLL_LOCK_INT SYSREG Interrupt indicating that MSSDDR PLL has achieved lock
INTISR[32] FAB_PLL_LOCKLOST_INT SYSREG Interrupt indicating that MSSDDR PLL has lost lock
INTISR[33] FIC64_INT SYSREG This interrupt will be generated by FIC64 when one of the following conditions is true:

Write error for HPDMA or switch WCBs (from DDR_AXI_INTF)

Simultaneous read and write accesses by HPDMA and switch for same address

Lock time out condition

INTISR[34] F2H_INTERRUPT[0] FPGA fabric Interrupt from the FPGA fabric
INTISR[35] F2H_INTERRUPT[1] FPGA fabric Interrupt from the FPGA fabric
INTISR[36] F2H_INTERRUPT[2] FPGA fabric Interrupt from the FPGA fabric
INTISR[37] F2H_INTERRUPT[3] FPGA fabric Interrupt from the FPGA fabric
INTISR[38] F2H_INTERRUPT[4] FPGA fabric Interrupt from the FPGA fabric
INTISR[39] F2H_INTERRUPT[5] FPGA fabric Interrupt from the FPGA fabric
INTISR[40] F2H_INTERRUPT[6] FPGA fabric Interrupt from the FPGA fabric
INTISR[41] F2H_INTERRUPT[7] FPGA fabric Interrupt from the FPGA fabric
INTISR[42] F2H_INTERRUPT[8] FPGA fabric Interrupt from the FPGA fabric
INTISR[43] F2H_INTERRUPT[9] FPGA fabric Interrupt from the FPGA fabric
INTISR[44] F2H_INTERRUPT[10] FPGA fabric Interrupt from the FPGA fabric
INTISR[45] F2H_INTERRUPT[11] FPGA fabric Interrupt from the FPGA fabric
INTISR[46] F2H_INTERRUPT[12] FPGA fabric Interrupt from the FPGA fabric
INTISR[47] F2H_INTERRUPT[13] FPGA fabric Interrupt from the FPGA fabric
INTISR[48] F2H_INTERRUPT[14] FPGA fabric Interrupt from the FPGA fabric
INTISR[49] F2H_INTERRUPT[15] FPGA fabric Interrupt from the FPGA fabric
INTISR[50] GPIO_INT[0] GPIO Interrupt from GPIO
INTISR[51] GPIO_INT[1] GPIO Interrupt from GPIO
INTISR[52] GPIO_INT[2] GPIO Interrupt from GPIO
INTISR[53] GPIO_INT[3] GPIO Interrupt from GPIO
INTISR[54] GPIO_INT[4] GPIO Interrupt from GPIO
INTISR[55] GPIO_INT[5] GPIO Interrupt from GPIO
INTISR[56] GPIO_INT[6] GPIO Interrupt from GPIO
INTISR[57] GPIO_INT[7] GPIO Interrupt from GPIO
INTISR[58] GPIO_INT[8] GPIO Interrupt from GPIO
INTISR[59] GPIO_INT[9] GPIO Interrupt from GPIO
INTISR[60] GPIO_INT[10] GPIO Interrupt from GPIO
INTISR[61] GPIO_INT[11] GPIO Interrupt from GPIO
INTISR[62] GPIO_INT[12] GPIO Interrupt from GPIO
INTISR[63] GPIO_INT[13] GPIO Interrupt from GPIO
INTISR[64] GPIO_INT[14] GPIO Interrupt from GPIO
INTISR[65] GPIO_INT[15] GPIO Interrupt from GPIO
INTISR[66] GPIO_INT[16] GPIO Interrupt from GPIO
INTISR[67] GPIO_INT[17] GPIO Interrupt from GPIO
INTISR[68] GPIO_INT[18] GPIO Interrupt from GPIO
INTISR[69] GPIO_INT[19] GPIO Interrupt from GPIO
INTISR[70] GPIO_INT[20] GPIO Interrupt from GPIO
INTISR[71] GPIO_INT[21] GPIO Interrupt from GPIO
INTISR[72] GPIO_INT[22] GPIO Interrupt from GPIO
INTISR[73] GPIO_INT[23] GPIO Interrupt from GPIO
INTISR[74] GPIO_INT[24] GPIO Interrupt from GPIO
INTISR[75] GPIO_INT[25] GPIO Interrupt from GPIO
INTISR[76] GPIO_INT[26] GPIO Interrupt from GPIO
INTISR[77] GPIO_INT[27] GPIO Interrupt from GPIO
INTISR[78] GPIO_INT[28] GPIO Interrupt from GPIO
INTISR[79] GPIO_INT[29] GPIO Interrupt from GPIO
INTISR[80] GPIO_INT[30] GPIO Interrupt from GPIO
INTISR[81] GPIO_INT[31] GPIO Interrupt from GPIO