嵌入式:ARM的异常管理

举报
timerring 发表于 2022/12/11 20:14:09 2022/12/11
【摘要】 在ARM体系结构中,异常中断用来处理软件中断、未定义指令陷阱及系统复位功能和外部事件,这些“不正常”事件都被划归“异常”,因为在处理器的控制机制中,它们都使用同样的流程进行异常处理。 ARM的异常中断响应过程ARM处理器对异常中断的响应过程如下将CPSR的内容保存到将要执行的异常中断对应的SPSR中 设置当前状态寄存器CPSR中的相应位将引起异常指令的下一条指令的地址保存到新的异常工作模式的...

在ARM体系结构中,异常中断用来处理软件中断、未定义指令陷阱及系统复位功能和外部事件,这些“不正常”事件都被划归“异常”,因为在处理器的控制机制中,它们都使用同样的流程进行异常处理。

ARM的异常中断响应过程

ARM处理器对异常中断的响应过程如下

将CPSR的内容保存到将要执行的异常中断对应的SPSR中 设置当前状态寄存器CPSR中的相应位

将引起异常指令的下一条指令的地址保存到新的异常工作模式的R14
给程序计数器(PC)强制赋值

每个异常模式对应有两个寄存器R13_<mode>、R14_<mode>分别保存相应模式下的堆栈指针、返回地址;堆栈指针可用来定义一个存储区域保存其它用户寄存器,这样异常处理程序就可以使用这些寄存器。
FIQ模式还有额外的专用寄存器R8_fiq~R12_fiq,使用这些寄存器可以加快快速中断的处理速度。

从异常中断处理程序中返回

从异常中断处理程序中返回时,需要执行以下四个基本操作。

所有修改过的用户寄存器必须从处理程序的保护堆栈中恢复(即出栈)。

将SPSR_mode寄存器内容复制到CPSR中,使得CPSR从相应的SPSR中恢复,即恢复被中断的程序工作状态;

根据异常类型将PC变回到用户指令流中相应指令处
最后清除CPSR中的中断禁止标志位I/F。

异常中断向量表

中断向量表中指定了各异常中断与其处理程序的对应关系。

每个异常中断对应的中断向量表的4个字节的空间中存放一个跳转指令或者一个向PC寄存器中赋值的数据访问指令。

存储器的前8个字中除了地址0x00000014之外,全部被用作异常矢量地址。

异常中断的优先级

当几个异常中断同时发生时,在ARM中通过给各异常中断赋予一定的优先级来实现处理次序。

  • 复位(最高优先级);

  • 数据异常中止;

  • FIQ;

  • IRQ;

  • 预取指异常中止;

  • SWI,未定义指令(包括缺协处理器)。

参考文献:

孟祥莲.嵌入式系统原理及应用教程(第2版)[M].北京:清华大学出版社,2017.

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。