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 InterruptSignalSourceDescription
INTNMIWDOGTIMEOUTINTWATCHDOGThis interrupt is asserted (if enabled) if the counter reaches zero and interrupt rather than reset generation has been selected on counter timeout.
INTISR[0]WDOGWAKEUPINTWATCHDOGThis interrupt is asserted (if enabled) on crossing the WDOGMVRP level when the SLEEPING input is asserted.
INTISR[1]RTC_WAKEUP_INTRRTCRTC match/wake up interrupt from RTC block
INTISR[2]SPIINT0SPI_0Interrupt from SPI 0
INTISR[3]SPIINT1SPI_1Interrupt from SPI 1
INTISR[4]I2C_INT0I2C_0Interrupt from I2C 0
INTISR[5]I2C_SMBALERT0I2C_0Interrupt from I2C 0
INTISR[6]I2C_SMBSUS0I2C_0Interrupt from I2C 0
INTISR[7]I2C_INT1I2C_1Interrupt from I2C 1
INTISR[8]I2C_SMBALERT1I2C_1Interrupt from I2C 1
INTISR[9]I2C_SMBSUS1I2C_1Interrupt from I2C 1
INTISR[10]MMUART0_INTRMMUART_0Interrupt from MMUART 0
INTISR[11]MMUART1_INTRMMUART_1Interrupt from MMUART 1
INTISR[12]MAC_INTMACInterrupt from Ethernet MAC
INTISR[13]PDMAINTERRUPTPDMAInterrupt from peripheral DMA block
INTISR[14]TIMER1_INTRTIMERTimer1 interrupt
INTISR[15]TIMER2_INTRTIMERTimer2 interrupt
INTISR[16]CAN_INTRCANInterrupt from CAN
INTISR[17]ENVM_INT0ENVMTOAHB0Asserted on an eNVM_0 basis at the completion of PROGRAM, ECC ERROR, etc.
INTISR[18]ENVM_INT1ENVMTOAHB1Asserted on an eNVM_1 basis at the completion of PROGRAM, ECC ERROR, etc.
INTISR[19]COMM_BLK_INTRCOMBLKCommunication block interrupt
INTISR[20]USB_MC_INTUSBCPU interrupts
INTISR[21]USB_DMA_INTUSBCore’s DMA engine performs data transfer between endpoint memories and system memory via AHB master port. DMA controller-interrupt.
INTISR[22]MSSDDR_PLL_LOCK_INTSYSREGInterrupt indicating that MSSDDR PLL has achieved lock.
INTISR[23]MSSDDR_PLL_LOCKLOST_INTSYSREGInterrupt indicating that MSSDDR PLL has lost lock.
INTISR[24]SW_ERRORINTERRUPTSYSREGIf 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_ERRINTRSYSREGIf 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_INTRSYSREGIf 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_INTHPDMAIt 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_INTHPDMAIt 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]ECCINTRSYSREGIt 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_INTSYSREGThe 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_INTSYSREGInterrupt indicating that MSSDDR PLL has achieved lock
INTISR[32]FAB_PLL_LOCKLOST_INTSYSREGInterrupt indicating that MSSDDR PLL has lost lock
INTISR[33]FIC64_INTSYSREGThis 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 fabricInterrupt from the FPGA fabric
INTISR[35]F2H_INTERRUPT[1]FPGA fabricInterrupt from the FPGA fabric
INTISR[36]F2H_INTERRUPT[2]FPGA fabricInterrupt from the FPGA fabric
INTISR[37]F2H_INTERRUPT[3]FPGA fabricInterrupt from the FPGA fabric
INTISR[38]F2H_INTERRUPT[4]FPGA fabricInterrupt from the FPGA fabric
INTISR[39]F2H_INTERRUPT[5]FPGA fabricInterrupt from the FPGA fabric
INTISR[40]F2H_INTERRUPT[6]FPGA fabricInterrupt from the FPGA fabric
INTISR[41]F2H_INTERRUPT[7]FPGA fabricInterrupt from the FPGA fabric
INTISR[42]F2H_INTERRUPT[8]FPGA fabricInterrupt from the FPGA fabric
INTISR[43]F2H_INTERRUPT[9]FPGA fabricInterrupt from the FPGA fabric
INTISR[44]F2H_INTERRUPT[10]FPGA fabricInterrupt from the FPGA fabric
INTISR[45]F2H_INTERRUPT[11]FPGA fabricInterrupt from the FPGA fabric
INTISR[46]F2H_INTERRUPT[12]FPGA fabricInterrupt from the FPGA fabric
INTISR[47]F2H_INTERRUPT[13]FPGA fabricInterrupt from the FPGA fabric
INTISR[48]F2H_INTERRUPT[14]FPGA fabricInterrupt from the FPGA fabric
INTISR[49]F2H_INTERRUPT[15]FPGA fabricInterrupt from the FPGA fabric
INTISR[50]GPIO_INT[0]GPIOInterrupt from GPIO
INTISR[51]GPIO_INT[1]GPIOInterrupt from GPIO
INTISR[52]GPIO_INT[2]GPIOInterrupt from GPIO
INTISR[53]GPIO_INT[3]GPIOInterrupt from GPIO
INTISR[54]GPIO_INT[4]GPIOInterrupt from GPIO
INTISR[55]GPIO_INT[5]GPIOInterrupt from GPIO
INTISR[56]GPIO_INT[6]GPIOInterrupt from GPIO
INTISR[57]GPIO_INT[7]GPIOInterrupt from GPIO
INTISR[58]GPIO_INT[8]GPIOInterrupt from GPIO
INTISR[59]GPIO_INT[9]GPIOInterrupt from GPIO
INTISR[60]GPIO_INT[10]GPIOInterrupt from GPIO
INTISR[61]GPIO_INT[11]GPIOInterrupt from GPIO
INTISR[62]GPIO_INT[12]GPIOInterrupt from GPIO
INTISR[63]GPIO_INT[13]GPIOInterrupt from GPIO
INTISR[64]GPIO_INT[14]GPIOInterrupt from GPIO
INTISR[65]GPIO_INT[15]GPIOInterrupt from GPIO
INTISR[66]GPIO_INT[16]GPIOInterrupt from GPIO
INTISR[67]GPIO_INT[17]GPIOInterrupt from GPIO
INTISR[68]GPIO_INT[18]GPIOInterrupt from GPIO
INTISR[69]GPIO_INT[19]GPIOInterrupt from GPIO
INTISR[70]GPIO_INT[20]GPIOInterrupt from GPIO
INTISR[71]GPIO_INT[21]GPIOInterrupt from GPIO
INTISR[72]GPIO_INT[22]GPIOInterrupt from GPIO
INTISR[73]GPIO_INT[23]GPIOInterrupt from GPIO
INTISR[74]GPIO_INT[24]GPIOInterrupt from GPIO
INTISR[75]GPIO_INT[25]GPIOInterrupt from GPIO
INTISR[76]GPIO_INT[26]GPIOInterrupt from GPIO
INTISR[77]GPIO_INT[27]GPIOInterrupt from GPIO
INTISR[78]GPIO_INT[28]GPIOInterrupt from GPIO
INTISR[79]GPIO_INT[29]GPIOInterrupt from GPIO
INTISR[80]GPIO_INT[30]GPIOInterrupt from GPIO
INTISR[81]GPIO_INT[31]GPIOInterrupt from GPIO