ARM底层学习笔记-中断体系结构

时间:2021-03-19 19:08:25
中断体系结构

1.arm中断体系结构
I.
7中工作模式:系统模式;用户模式;快中断模式;中断模式;管理模式;数据访问终止模式;未定义中止模式

工作模式下有哪些东西:1.有不同的寄存器;2.不同的权限(配合MMU使用);3.触发条件
  
不同的寄存器:同是指令mov R8, #1,不同的模式其实可能用的是不同的寄存器,好处就是一种模式切换的另一种模式,就不用保存(不需保存现场),切换不同寄存器就可以了。这也就是快速中断模式下有自己寄存器比较多就是这个原因,不需要保存太多东西。

不同权限:配合mmu使用,有些模式下不能访问一些东西;
 
触发条件:1.上电后,位于svc;2.发生中断处于irq模式;

II.
异常:
先说中断:当你在家看电视的时候怎么知道有客人来了?一种,查询方法(没过5分钟打开门去看一下);另一种,中断方法(按下门铃,让你知道,并停止看电视,去开门)。中断是一种异常。

发生了异常,会有哪些事情发生?
1.cpu会强制进入异常模式,即切换寄存器;
2.pc指针=异常入口(固定地址);

怎么用中断?有被中断者,有要处理的中断
1.中断发生,保存当前状态(ps0.初始化引脚等1.使能中断);
2.中断处理(ps1.分辨中断源2.进行处理3.清理工作);
3.恢复原来状态;

使用过程中需要做的工作:
使能/禁止中断寄存器;
状态寄存器(分辨中断);
触发中断电平类型设置寄存器;
引脚功能设置寄存器(引脚功能:输入输出中断等)(ps硬件相关的设置);
优先级寄存器;

发生中断的执行过程:
1.进入IRQ模式,切换reg(sp等);
2.pc=irq进入对应异常类型的入口地址;
以上为纯硬件的,下面是软件的
b handleirq
1.计算返回地址(被中断处地址);
2.保存现场(一堆寄存器);
3.调用处理函数(1.分辨中断;2.处理;3.清除,清中断。):对于外部中断,有一个寄存器INTOFFSET,其值对应于具体的中断,即对应具体的外部中断号,据此可知其他类型的异常应该也有这样一个寄存器来分辨本类型异常中具体发生的是哪一个中断;
4.恢复现场;

注:中断寄存器每一个中断有自己的使能位,所有中断还有一个总的使能位。