第6章 异常与中断处理
1、异常与中断的概念。
异常包含了中断
2、ARM V7体系架构支持的7种异常类型:
复位、未定义指令、软件中断、预取指中止、数据中止、外部中断、快中断。
3、SWI软中断异常、与硬中断的异同、SWI指令格式。
软中断是软件实现的中断,也就是程序运行时其他程序对它的中断。
软中断与硬中断的区别有:
l 软中断发生时间由程序控制,而硬中断发生时间随机;
l 软中断是由程序调用发生的,而硬中断是由外设引发的。
SWI指令
SWI指令用于产生软中断,从用户模式变换到管理模式,CPSR保存到管理模式的SPSR中。
指令格式:SWI{cond} immed_24 ;immed_24为软中断号(服务类型)
4、IRQ中断与FIQ中断的异同点
工作模式不同
使用寄存器不同:
ARM的FIQ模式提供了更多的banked备份寄存器,r8~r14,SPSR;而IRQ模式提供的banked寄存器为R13,R14,SPSR.
(这就意味着在ARM的IRQ模式下,中断处理程序自己要保存R8到R12这几个寄存器,然后退出中断处理时程序要恢复这几个寄存器,而FIQ模式由于这几个寄存器都有banked寄存器,模式切换时CPU自动保存这些值到banked寄存器,退出FIQ模式时自动恢复,所以这个过程FIQ比IRQ快.)
优先级不同:
FIQ比IRQ有更高优先级,FIQ优先级为3,IRQ优先级为4。如果FIQ和IRQ同时产生,那么FIQ先处理;如果。
中断处理流程相同:
l 初始化微处理器中断有关的寄存器,开放中断。
l I/O端口或部件完成数据操作后产生中断请求信号。
l 当中断请求信号有效时,微处理器可能处在不可中断状态。等微处理器允许中断时保存当前状态,停止它现行的操作并开始进行中断源的识别。
l 在识别出优先级最高的中断源后,微处理器转到对应的中断服务例程入口,并应答中断,I/O端口或部件收到应答信号后,撤消其中断请求。
l 微处理器读入或写出数据,当中断服务例程结束后,返回到原来的被中断程序处继续执行。
5、中断源与优先级仲裁
1)93个中断源,分别由四个中断向量控制器管理;
2)默认情况下的中断优先级。
所谓优先级,指的以下两层含义:
l 若有2个及2个以上的中断源同时提出中断请求,微处理器先响应哪个中断源,后响应哪个中断源。
l 若1个中断源提出中断请求,并得到响应后,又有1个中断源提出中断请求,后来的中断源能否中断前一个中断源的中断服务程序。
6、中断相关寄存器
中断向量地址寄存器(VICnADDRESS):填写中断向量表、
中断源未决寄存器(VICnRAWINTR)、中断使能寄存器(VICnINTENABLE)、中断选择寄存器(VICnINTSELECT)、
屏蔽寄存器(INTMSK)、中断未决寄存器(INTPND)等。
7、中断未决寄存器的清除方法:对应位写1。
8、中断跳转流程:
中断编程步骤
l 建立系统中断向量表,设置微处理器内核的程序状态寄存器CPSR中的F位和I位。一般情况下中断均需使用数据栈,因此还需建立用户数据栈。这一部分内容对应的程序指令,通常编写在系统引导程序中。
l 设置各中断源的中断向量。通常需要利用向量地址寄存器来计算,若中断号还对应有子中断,需求出子中断地址偏移。
l 中断控制初始化。主要是初始化微处理器内部的中断控制的寄存器。针对某个具体的中断源,设置其中断控制模式、中断是否屏蔽、中断优先级等。
l 完成I/O端口或部件具体操作功能的中断服务程序。中断服务程序中,在返回之前必须清除现场,返回中断前的状态。