手机版

ARM_Cortex-M3内核结构(15)

发布时间:2021-06-07   来源:未知    
字号:

2.异常退出

当异常服务程序最后一条指令将进入异常时的 LR 的值加载到 PC 中。该操作指示中断服务结束,在 从异常返回时处理器将执行下列操作之一:

如果激活异常的优先级比所有被压栈(等待处理)的异常的优先级都高,则处理器会末尾连锁到一 个激活异常。

如果没有激活异常,或者如果被压栈的异常的最高优先级比激活异常的最高优先级要高,则处理器 返回到上一个被压栈的中断服务程序。

如果没有激活的中断或被压栈的异常,则处理器返回线程模式。 在启动了中断返回序列后,下述的处理就将进行: 出栈:先前压入栈中的寄存器在这里恢复。内部的出栈顺序与入栈时的相对应,堆栈指针的值也改

回先前的值。

更新NVIC寄存器:伴随着异常的返回,它的活动位也被硬件清除。对于外部中断,倘若中断输入再 次被置为有效,悬起位也将再次置位,新一次的中断响应序列也可随之再次开始。

异常返回值:异常返回值存放在LR中。这是一个高28位全为1的值,只有[3:0]的值有特殊含义,如 表2.10所示。当异常服务例程把这个值送往PC时,就会启动处理器的中断返回序列。因为LR的值是由 Cortex-M3自动设置的,所以只要没有特殊需求,就不要改动它。

表 2.10 EXC_RETURN 各位含义

因此,上述表格中EXC_RETURN的值有三种情况: 0xFFFF_FFF1:返回处理器模式;

0xFFFF_FFF9:返回线程模式,并使用主堆栈;

0xFFFF_FFFD:返回线程模式,并使用线程堆栈。 例如系统中使用了PendSV异常,服务程序结束时由处理模式返回到线程模式前使用进程堆栈,如 程序清单L2.3所示。

程序清单 L2.3 异常返回类型实例

OSPendSV

LDR LR,=0Xfffffffd BX LR

;异常服务程序

;返回到线程模式进程堆栈

ARM_Cortex-M3内核结构(15).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
×
二维码
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)