为什么要引入中断?
为了实现并发活动,为了实现计算机系统的自动化工作,系统必须具备处理中断的能力。
为了解决计算机CPU处理速度快,外设速度慢的矛盾。可使计算机与多台外设同时工作,以提高计算机系统的整体工作效率。
所谓中断,是指CPU在正常运行程序时,由于内部/外部事件或由程序预先安排的事件,引起CPU中断正在运行的程序,而转到为内部/外部事件或为预先安排的事件服务的程序中去,服务完毕,再返回去执行波暂时中断的程序。
中断的处理过程
硬件完成
拷贝CPSR到SPSR_<mode>
设置正确的CPSR位(切换到ARM状态、切换到异常模式、禁止中断)
保存返回地址在LR_<mode>
设置PC到异常向量地址
中断服务程序完成
中断服务程序可能保存需要使用的寄存器(堆栈中)
用户服务程序可以打开中断,以接受中断嵌套
恢复保存的寄存器(中断现场数据不能被自动保留在堆栈中,用户必须选择通用寄存器来保护)
通过调用Reti(或其它相应指令)指令将PSR和PC出栈,从而恢复原来的执行流程。
可屏蔽中断处理的一般过程为:
1. 外设径8259A提出中断请求,如果IF=1且无DMA请求,LOCK无效,则8259A的中断请求信号INTR才能送到CPU。
2. CPU发INTA信号响应,在第二个INTA周期中,外部中断控制器送中断类型号。
3. OLDFLAG→STACK
4. OLDCS→STACK
5. 获取CS并赋值
6. LDTP→STACK
7. 给IP赋值
8. 执行CS、IP处的外设中断服务程序
9. 中断返回,执行IRET中断返回指令
·OLDTP退线
·OLDCS退线
·OLDFLAG退线
10. 继续执行当前程序中的下条指令
其中2~7步为中断响应及处理过程。
中断嵌套
指当CPU正在处理某个中断源即正在执行中断服务程序时,会出现优先级更高的中断源申请中断,为了使更急的中断源及时得到服务,需要暂时中断(挂起)当前正在执行的级别较低的中断服务程