异常概述
Cortex-M 异常概述
Cortex-M处理器的异常架构具有多种特性,支持多个系统异常和外部中断。编号1~15的为系统异常,16及以上的则为中断输入(处理器的输入,不必从封装上的I/O引脚上访问)。包括所有中断在内的多数异常,都具有可编程的优先级,一些系统异常则具有固定的优先级。
不同Cortex-M3或Cortex-M4 微控制器的中断源的编号(1~240)可能会不同,优先级也可能会有所差异。这是因为为了满足不同的应用需求,芯片设计者可能会对Cortex-M3或Cortex-M4 设计进行相应的配置。
有一点需要注意,中断编号(如中断#0)表示到Cortex-M3处理器NVIC的中断输入。对于实际的微控制器产品或片上系统(SoC),外部中断输入引脚编号同NVIC的中断输入编号可能会不一致。例如,头几个中断输入可能会被分配给内部外设,而外部中断引脚则可能会分到下几个中断输入。因此,需要检查芯片生产商的数据手册,以确定中断是如何编号的。
异常处理用于识别每个异常,而且在ARMv7-M架构中具有多种用途。例如,当前正在运行的异常的编号数值位于特殊寄存器中断程序状态寄存器(IPSR)中,或者NVIC中一个名为中断控制状态寄存器(VECTACTIVE域)的寄存器。




对于使用CMSIS-Core的普通编程,中断标识由中断枚举实现,从数值0开始(代表中断#0)。系统异常的编号为负数。CMSIS-Core还定义了系统异常处理的名称。


CMSIS-Core访问函数之所以使用另外一种编号系统,是因为这样可以稍微提高部分API函数的效率(例如,设置优先级)。中断的编号和枚举定义是同设备相关的,它们位于微控制器供应商提供的头文件中,在一个名为IRQn的typedef段中。CMSIS-Core中的多个NVIC访问函数都会使用这种枚举定义。


