5.5.1 NVIC 中断使能和禁止使能
ARM® Cortex-M0+ 处理器支持最多32 个外部中断源,分别对应中断使能设置寄存器NIVC_ISER 的32 个使能位,
和中断使能清除寄存器NVIC_ICER 的32 个禁止位。将使能位置1,允许中断;将禁止位置1,禁止中断。
上文中NVIC 中断使能仅针对处理器NVIC 而言,外设的中断是否使能,还受相应外设的中断控制寄存器控制。
5.5.2 NVIC 中断挂起和清除挂起
在中断发生时,如果系统正在处理与之相同优先级或更高优先级的中断,系统将不会立即处理此中断,而是将中
断的状态设置为挂起,保存在中断挂起状态寄存器中;在处理器未进入此中断处理之前,如没有手动清除挂起状态,
该状态将会一直保持有效。当处理器开始进入中断处理时,硬件会自动清除相应的中断挂起状态。
用户可通过设置中断挂起设置寄存器NVIC_ISPR 的对应位,将此中断的状态设置为挂起状态,如果系统没有正在
处理与之相同优先级或更高优先级的中断,此中断将被立即响应并处理。
用户可以通过设置中断挂起清除寄存器NVIC_ICPR 的对应位,将此中断的状态设置为挂起清除状态。
5.5.3 NVIC 中断优先级
中断优先级控制寄存器NVIC_IPR0 ~ NVIC_IPR7,用于设置IRQ0~IRQ31 的中断优先级,每个中断源使用8 位,
在CW32x030 中仅使用了高两位,最多可设置4 个中断优先级。
注意:
ARM® Cortex-M0+ 的中断优先级寄存器的设置应在中断使能之前,用户不可在中断使能之后改变中断优先级,
这将导致不可预知的结果。
5.5.4 NVIC 中断屏蔽
在某些特殊场合,需要禁止所有中断,可以使用中断屏蔽寄存器PRIMASK 实现。PRIMASK 只有最低1 位有效,
将此位置1,除了NMI 和硬件错误异常之外的所有外部中断和异常都被禁止;清0 后,允许响应中断和异常。该
位复位后默认为0。
ARM® Cortex-M0+ 有专用的ARM 指令用于修改PRIMASK 寄存器,CPSIE i 和CPSID i,详细请参考《ARM® v6-M
Architecture Reference Manual》。
汇编指令示例参考:
CPSIE i ; 清除 PRIMASK (使能中断)
CPSID i ; 设置 PRIMASK (禁止中断)
C 语言(调用CMSIS 设备驱动库)示例参考:
void __enable_irq(void); // 清除 PRIMASK
void __disable_irq(void); // 设置 PRIMASK
5.5.5 外设中断使能
外设模块一般都有各自的中断使能寄存器,在使用中断时,必须首先打开外设中断使能,同时参见表5-1 中断向
量表打开该中断源的NVIC 中断使能。具体外设的中断使能,请参阅相关外设模块章节描述。
|