目录
1.概念
- 异常是能够引起程序流偏离正常流程的事件,当异常发生时,正在执行的程序就会被挂起,处理器转而执行一块与该事件相关的代码(异常处理)。事件可以是外部输入,也可以是内部产生的,外部产生的事件通常被称作中断或中断请求(IRQ)。
- 异常发生时执行的软件代码为异常处理,而当异常处理与中断事件相关时,又可称作中断处理或中断服务程序(ISR)。在编译好的程序映像中,异常处理是作为程序代码的一部分出现的。
- 当异常处理执行完异常后,就会返回到中断前的程序,并且继续执行之前的任务。因此,异常处理程序需要有种手段来记录中断前程序的状态,并且在中断完成之后能够将这些信息恢复,这可以通过硬件机制或硬件和软件配合来实现。
- 通常的做法是,异常会被划分为多个优先等级,在执行低优先级的异常处理时,更高优先级的异常可以被触发并且执行,这个过程一般被称为异常嵌套。异常的优先级可以是可编程的,也可以是固定的。除了优先级的设置,有些异常(包括多数的中断)可以由软件禁止或使能。
2.异常类型
Cortex-M0处理器内置了中断控制器,并且支持最多32个中断请求(IRQ)输入,以及1个不可屏蔽中断(NMI)输入。根据微控制器产生设计的不同,IRQ和NMI可以由外部产生,也可以由片上外设产生。此外,它还支持多个内部异常。
Cortex-M0的每个异常源都有一个单独的异常编号,NMI的编号为2,而片上外设和外部中断的则为16~47。1 ~ 15的其他编号,用于处理器内部的系统异常,这个范围内的有些编号还没有使用。
每种异常类型都有对应的优先级,有些异常的优先级是固定的,而有些则是可编程的。异常类型、编号和优先级如下:

- 不可屏蔽中断(NMI):NMI同IRQ类似,只是它不能被禁止,并且优先级仅次于复位,它对于工业控制和汽车之类的高可靠性系统非常有用。根据微控制器设计的不同,NMI可以用于掉电处理,也可以连接到看门狗单元,以便在系统停止响应时将系统复位。由于NMI不能被控制寄存器禁止,其响应的及时性就得到了保证。
- 硬件错误:硬件错误异常用于处理程序执行时产生的错误,这些错误可以是试图执行未知的操作码、总线接口或存储器系统的错误,也可以是试图切换至ARM状态之类的非法操作。
- SVC(请求管理调用):SVC指令执行时就会产生SVC异常,其通常用在具有操作系统的系统中,为应用程序提供了访问系统服务的入口。
- PendSV(可挂起的系统调用):PendSV是用于带操作系统的应用程序的另外一个异常,SVC异常在SVC指令执行后会马上开始,PendSV在这点上有所不同,它可以延迟执行,在OS上执行PendSV可以确保高优先级任务完成后才执行系统调度。
- 系统节拍:NVIC中的Sys Tick定时器为OS应用可以利用的另一个特性。几乎所有操纵系统的运行都需要上下文切换,而这一过程通常需要依靠定时器产生定时中断来完成。Cortex-M0处理器内集成了一个简单的定时器,这样就使得设备间移植操作系统更加容易。
- 中断:Cortex-M0微控制器可以支持1 ~ 32个中断,中断信号可以连接到片上外设,也可以通过I/O端口连接到外部中断源上。外部中断只有在使能后才能使用,如果中断被禁止了,或者处理器正在运行另外一个相同或更高优先级的异常处理,则该中断请求会被存储在挂起状态寄存器中。当高优先级的中断处理完成或返回后,挂起的中断请求才可以执行。应该注意的是,在微控制器的外部接口中,外部中断信号可以是高电平也可以是低电平,或者可以通过编程配置。
3.异常优先级定义
在Cortex-M0处理器中,每个异常都对应一个优先级。优先级决定了异常是否执行或者是否延迟执行(处于挂起态),Cortex-M0处理器支持3个固定的最高优先级以及4个可编程的优先级。对于具有可编程优先级的异常,优先级配置寄存器为8位宽,而且只能使


952

被折叠的 条评论
为什么被折叠?



