Cortex-M0和Cortex-M0+的异常类型

中断(IRQ)只是ARM Cortex-M处理器中的一种异常,异常能够引起程序停止执行当前任务,去执行中断处理函数。
Cortex-M0和Cortex-M0+处理器内置了名为NVIC的中断控制器,并且支持最多32个中断请求(IRQ)输入,以及1个不可屏蔽中断(NMI)输入。根据微控制器产品设计的不同,IRQ和NMI可以由外部产生,也可以由片上外设产生。

Cortex-M0和Cortex-M0+处理器中的异常如下表所示

异常编号异常类型优先级描述
1复位-3(最高)复位
2NMI-2不可屏蔽中断
3硬件错误-1错误处理异常
4~10保留NA
11SVC可编程通过SVC指令进行系统调用
12~13保留NA
14PendSV可编程系统服务,多用有OS环境,该异常请求可以被挂起
15SysTick可编程SysTick定时器
16中断 #0可编程外部中断0
17中断 #1可编程外部中断1
47中断 #31可编程外部中断31

1 复位

优先级最高的异常,当系统被复位之后首先被执行。复位向量位于第二个字空间,第一个字为栈顶指针。详细见:Cortex-M软件结构

2 NMI

不可屏蔽中断。
NMI同IRQ类似,只是它不能被禁止,并且优先级仅仅次于复位,它对于工业控制和汽车之类的高可靠性系统非常有用。根据控制器设计的不同,NMI可用于掉电处理,也可连接到看门狗单元,以便在系统停止响应时将系统复位。由于NMI不能被控制寄存器禁止,其响应的及时性得到保证。

3 HaardFault

硬件错误异常多用于处理程序执行时产生的错误,这些错误可以是试图执行未知的操作码、总线接口或存储系统的错误,也可以是试图切换至ARM状态之类的非法操作。

4 SVC

请求管理调用。
SVC指令执行时会产生SVC异常,通常用在具有哦操作系统的系统中,为应用程序提供了访问系统服务的入口。

5 PendSV

可挂起的系统调用。
PendSV是用于带OS的应用程序的另外一个异常,SVC异常字SVC指令执行后会马上开始,PendSV在这点上有所不同,他可以延迟执行,在OS上使用PendSV可以确保高优先级任务完成才执行系统调用。
PendSV通常用在任务调度中。想象一下这么一个情况,比如A任务的时间片到了之后,有IRQ正在运行,那么系统将会执行IRQ,IRQ返回后继续执行任务A,这样一来A任务就获得了额外的时间片。在A任务的时间片到了之后,马上执行PendSV指令,由于PendSV异常的优先级较低,等到执行完IRQ之后再来执行PendSV异常进行上下文切换。

6 SysTick

NVIC中的SysTick定时器为OS应用可以利用的另外一个持性。几平所有操作系的运行都需要上下文切换,而这一过程通常需要依靠定时器产生定时中断来完成。Cortex-M处理器内集成了一个简单的定时器,这样就使得设备间移植操作系统更加容易。对干Cortex-M0和Cortex-M0+处理器,SysTick定时器及其异常是可以选的,但是在多数微控制器设计中是存在的。

7 中断

一个中断是由外围​​信号或者通过软件请求生成异常。SWI实际上是一个IRQ。
基于Cortex-M0或Cortex-M0+的微控制器可以支持1到32个中断,中断信号可以连接到片上外设,也可以通过I/O端口连接到外部中断源上。根据微控制器设计的不同,外部中断的数量可能与Cortex-M处理器的中断数量不同。
外部中断只有在使能后才能使用,如果中断被禁止了,或者处理器正在运行另外一个相同或更高优先级的异常处理,则该中断请求会被存储在挂起状态寄存器中。当高优先级的中断处理完成或返回后,挂起的中断请求才可以执行。NVIC能够接受的中断请求信号可以是高逻辑电平,也可以是中断脉冲(最小为1个时钟周期)。需要注意的是,在微控制器的外部接口中,外部中断信号可以是高电平也可以是低电平,或者可以通过编程配置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值