CMSIS-CORE
Version 3.30
CMSIS-CORE support for Cortex-M processor-based devices
|
Describes programming of interrupts and exception functions. More...
Enumerations | |
enum | IRQn_Type { NonMaskableInt_IRQn = -14, HardFault_IRQn = -13, MemoryManagement_IRQn = -12, BusFault_IRQn = -11, UsageFault_IRQn = -10, SVCall_IRQn = -5, DebugMonitor_IRQn = -4, PendSV_IRQn = -2, SysTick_IRQn = -1, WWDG_STM_IRQn = 0, PVD_STM_IRQn = 1 } |
Definition of IRQn numbers. More... | |
Functions | |
void | NVIC_SetPriorityGrouping (uint32_t PriorityGroup) |
Set priority grouping [not for Cortex-M0 variants]. More... | |
uint32_t | NVIC_GetPriorityGrouping (void) |
Read the priority grouping [not for Cortex-M0 variants]. More... | |
void | NVIC_EnableIRQ (IRQn_Type IRQn) |
Enable an external interrupt. More... | |
void | NVIC_DisableIRQ (IRQn_Type IRQn) |
Disable an external interrupt. More... | |
uint32_t | NVIC_GetPendingIRQ (IRQn_Type IRQn) |
Get the pending interrupt. More... | |
void | NVIC_SetPendingIRQ (IRQn_Type IRQn) |
Set an interrupt to pending. More... | |
void | NVIC_ClearPendingIRQ (IRQn_Type IRQn) |
Clear an interrupt from pending. More... | |
uint32_t | NVIC_GetActive (IRQn_Type IRQn) |
Get the interrupt active status [not for Cortex-M0 variants]. More... | |
void | NVIC_SetPriority (IRQn_Type IRQn, uint32_t priority) |
Set the priority for an interrupt. More... | |
uint32_t | NVIC_GetPriority (IRQn_Type IRQn) |
Get the priority of an interrupt. More... | |
uint32_t | NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) |
Encodes Priority [not for Cortex-M0 variants]. More... | |
void | NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t *pPreemptPriority, uint32_t *pSubPriority) |
Decode the interrupt priority [not for Cortex-M0 variants]. More... | |
void | NVIC_SystemReset (void) |
Reset the system. More... | |
ARM provides a template file startup_device for each supported compiler. The file must be adapted by the silicon vendor to include interrupt vectors for all device-specific interrupt handlers. Each interrupt handler is defined as a weak function to an dummy handler. These interrupt handlers can be used directly in application software without being adapted by the programmer.
The table below describes the core exception names and their availability in various Cortex-M cores.
Core Exception Name | IRQn Value | M0 | M0p | M3 | M4 | SC000 | SC300 | Description |
---|---|---|---|---|---|---|---|---|
NonMaskableInt_IRQn | -14 | Non Maskable Interrupt | ||||||
HardFault_IRQn | -13 | Hard Fault Interrupt | ||||||
MemoryManagement_IRQn | -12 | Memory Management Interrupt | ||||||
BusFault_IRQn | -11 | Bus Fault Interrupt | ||||||
UsageFault_IRQn | -10 | Usage Fault Interrupt | ||||||
SVCall_IRQn | -5 | SV Call Interrupt | ||||||
DebugMonitor_IRQn | -4 | Debug Monitor Interrupt | ||||||
PendSV_IRQn | -2 | Pend SV Interrupt | ||||||
SysTick_IRQn | -1 | System Tick Interrupt |
The following exception names are fixed and define the start of the vector table for Cortex-M0 variants:
The following exception names are fixed and define the start of the vector table for a Cortex-M3:
The following is an examples for device-specific interrupts:
Device-specific interrupts must have a dummy function that can be overwritten in user code. Below is an example for this dummy function.
The user application may simply define an interrupt handler function by using the handler name as shown below.
The code below shows the usage of the CMSIS NVIC functions NVIC_SetPriorityGrouping(), NVIC_GetPriorityGrouping(), NVIC_SetPriority(), NVIC_GetPriority(), NVIC_EncodePriority(), and NVIC_DecodePriority() with an LPC1700.
The code below shows the usage of the CMSIS NVIC functions NVIC_EnableIRQ(), NVIC_GetActive() with an LPC1700.
enum IRQn_Type |
The core exception enumeration names for IRQn values are defined in the file device.h.
Negative IRQn values represent processor core exceptions (internal interrupts). Positive IRQn values represent device-specific exceptions (external interrupts). The first device-specific interrupt has the IRQn value 0.
The table below describes the core exception names and their availability in various Cortex-M cores.
void NVIC_ClearPendingIRQ | ( | IRQn_Type | IRQn | ) |
This function removes the pending state of the specified interrupt IRQn. IRQn cannot be a negative number.
[in] | IRQn | Interrupt number |
void NVIC_DecodePriority | ( | uint32_t | Priority, |
uint32_t | PriorityGroup, | ||
uint32_t * | pPreemptPriority, | ||
uint32_t * | pSubPriority | ||
) |
This function decodes an interrupt priority value with the priority group PriorityGroup to preemptive priority value pPreemptPriority and subpriority value pSubPriority. In case of a conflict between priority grouping and available priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set.
[in] | Priority | Priority |
[in] | PriorityGroup | Priority group |
[out] | *pPreemptPriority | Preemptive priority value (starting from 0) |
[out] | *pSubPriority | Subpriority value (starting from 0) |
void NVIC_DisableIRQ | ( | IRQn_Type | IRQn | ) |
This function disables the specified device-specific interrupt IRQn. IRQn cannot be a negative value.
[in] | IRQn | Number of the external interrupt to disable |
void NVIC_EnableIRQ | ( | IRQn_Type | IRQn | ) |
This function enables the specified device-specific interrupt IRQn. IRQn cannot be a negative value.
[in] | IRQn | Interrupt number |
uint32_t NVIC_EncodePriority | ( | uint32_t | PriorityGroup, |
uint32_t | PreemptPriority, | ||
uint32_t | SubPriority | ||
) |
This function encodes the priority for an interrupt with the priority group PriorityGroup, preemptive priority value PreemptPriority, and subpriority value SubPriority. In case of a conflict between priority grouping and available priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set.
[in] | PriorityGroup | Priority group |
[in] | PreemptPriority | Preemptive priority value (starting from 0) |
[in] | SubPriority | Subpriority value (starting from 0) |
uint32_t NVIC_GetActive | ( | IRQn_Type | IRQn | ) |
This function reads the Interrupt Active Register (NVIC_IABR0-NVIC_IABR7) in NVIC and returns the active bit of the interrupt IRQn.
[in] | IRQn | Interrupt number |
uint32_t NVIC_GetPendingIRQ | ( | IRQn_Type | IRQn | ) |
This function returns the pending status of the specified interrupt IRQn.
[in] | IRQn | Interrupt number |
uint32_t NVIC_GetPriority | ( | IRQn_Type | IRQn | ) |
This function reads the priority for the specified interrupt IRQn. IRQn can can specify any device-specific (external) interrupt, or core (internal) interrupt.
The returned priority value is automatically aligned to the implemented priority bits of the microcontroller.
[in] | IRQn | Interrupt number |
uint32_t NVIC_GetPriorityGrouping | ( | void | ) |
This functuion returns the priority grouping (flag PRIGROUP in AIRCR[10:8]).
void NVIC_SetPendingIRQ | ( | IRQn_Type | IRQn | ) |
This function sets the pending bit for the specified interrupt IRQn. IRQn cannot be a negative value.
[in] | IRQn | Interrupt number |
void NVIC_SetPriority | ( | IRQn_Type | IRQn, |
uint32_t | priority | ||
) |
Sets the priority for the interrupt specified by IRQn.IRQn can can specify any device-specific (external) interrupt, or core (internal) interrupt. The priority specifies the interrupt priority value, whereby lower values indicate a higher priority. The default priority is 0 for every interrupt. This is the highest possible priority.
The priority cannot be set for every core interrupt. HardFault and NMI have a fixed (negative) priority that is higher than any configurable exception or interrupt.
[in] | IRQn | Interrupt Number |
[in] | priority | Priority to set |
void NVIC_SetPriorityGrouping | ( | uint32_t | PriorityGroup | ) |
The function sets the priority grouping PriorityGroup using the required unlock sequence. PriorityGroup is assigned to the field PRIGROUP (register AIRCR[10:8]). This field determines the split of group priority from subpriority. Only values from 0..7 are used. In case of a conflict between priority grouping and available priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.
[in] | PriorityGroup | Priority group |
void NVIC_SystemReset | ( | void | ) |
This function requests a system reset by setting the SYSRESETREQ flag in the AIRCR register.