中断处理流程以及程序状态寄存器CPSR的本质


前言

在前面已经介绍了通用寄存器r0-r14,其中包括r13(SP)堆栈指针寄存器(比如c语言的执行,子函数的调用都会用到堆栈指针),r14(LR)程序链接寄存器保存子程序的返回地址以及保存异常发生时PC-4(当前执行的指令地址,执行完异常处理后继续回来处理)的值;实现异常等操作后程序的返回;PC(R15)是程序计数器,用来存放即将要执行程序的地址;功能寄存器有CPSR和SPSR,CPSR是当前程序状态寄存器,SPSR是保存程序状态寄存器,所以spsr能够保存cpsr中的值;有了这些概念以后,接下来看一下异常发生是CPU具体的操作步骤和操作流程究竟是怎样的?


一、当前程序状态寄存器(CPSR)

在本期分享之前,先来带大家看一个比较厉害的功能寄存器----CPSR(当前程序状态寄存器);
它的作用主要有以下几个:
(1)保存最近已处理的 ALU (算数逻辑单元)操作的信息;
(2)控制中断的使能与禁止;
(3)设置处理器的运行模式;
下面从寄存器内部结构上来看一下:
在这里插入图片描述

31位  N位  符号标志位   1运算结果负数  0运算结果正数
30位  Z位  结果0标志位  1运算结果为0 	 0运算结果非0
29位  C位  进位标志     
		 	  加法 1存在进位  	0不存在进位
			  减法 1不存在借位 	0存在借位
28位  V位  溢出表示  	1存在溢出  0不存在溢出
7位   I位  irq控制     	1禁止irq 0使能irq
6位   F位  fiq控制     	1禁止irq 0使能irq
5位   T位              	1 thumb状态  0arm状态
4-0位 模式控制

二、异常的分类

2.1 7个异常源

异常主要有以下几个:

(1)复位异常     		0x0				reset
(2)未定义异常  		0x4				undef
(3)软件中断     		0x8				swi
(4)预取中止     		0xc				pre_abort
(5)数据中止  		    0x10			data_abort
(6)irq         	    0x18			中断请求
(7)fiq          		0x1c			快速中断请求

2.2 异常的优先级

在这里插入图片描述
这里按照优先级介绍各个异常:
高优先级:
(1)复位指的时比如按下复位按键,那么CPU会从头开始执行程序;
(2)数据中止:由存储器发生的异常;
(3)快中断FIQ
(4)中断IRQ
(5) 预取中止:取指令时发现未定义或者不可识别的指令;
低优先级:
(6)未定义:未定义变量;
(7)软件中断:比如SWI软件中断;

2.3 为什么FIQ比IRQ快?

ARM的FIQ模式提供了更多的banked备份寄存器,r8 ~r14,SPSR;而IRQ模式提供的banked寄存器为R13,R14,SPSR;
这就意味着在ARM的IRQ模式下,中断处理程序自己要保存R8到R12这几个寄存器,然后退出中断处理时程序要恢复这几个寄存器,而FIQ模式由于这几个寄存器都有banked寄存器,模式切换时CPU自动保存这些值到banked寄存器,退出FIQ模式时自动恢复,所以这个过程FIQ比IRQ快.

2.4 异常与工作模式的区别

这里需要说明的是ARM的工作模式和异常中有几个名字一样,但是它们的本质是不一样的,一种是工作模式,另一种是异常源;
这里给出图片供大家区分:
在这里插入图片描述
相应的异常源产生时会使得CPU进入不同的处理模式;

三、异常的处理流程

3.1 异常处理机制

异常发生时,cpu区分异常,自动跳转到异常向量表基地址固 定偏移量处执行代码
处理的具体流程如下:

3.2 进入异常处理流程:

(1)将当前指令的下一条指令的地址(PC+4)存入LR,以便于后续CPU处理完异常后跳回当前继续执行程序;
(2)SPSR = CPSR(保存当前程序的状态,恢复的时候也是恢复到原来程序的状态);(保护现场)
(3)修改CPSR模式位;
(4)PC赋值为异常向量表的偏移量;(使得主程序能够跳转到异常处处理异常);

3.3 退出异常的处理流程:

(1)将LR中存储的地址-4放入PC中;(-4的原因是因为要恢复到异常发生前,也就是进入异常前的指令地址处);
(2)CPSR = SPSR;(恢复现场);
(3)清除中断标志位;


总结

本期主要分享的时ARM920T的7种工作模式以及其7种异常源,并且对CPU处理异常的机制进行了详细的流程分析,这是非常重要的一部分,也是后续在学习裸机开发中中断部分的基础,想要学好嵌入式,中断是CPU非常重要的处理任务的一种方法,它能够极大的提高CPU的工作效率,从而使得整个系统更加流畅的进行工作;小伙伴们加油,理解起来哦!
最后,各位小伙伴们如果喜欢我的分享可以点赞收藏哦,你们的认可是我创作的动力,一起加油!

  • 13
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值