ARM 裸机开发学习笔记(5)中断体系结构
ARM体系CPU一共有7种工作模式,分别为:用户模式,快速中断模式,中断模式,管理模式,数据访问终止模式,系统模式,未定义指令中止模式。
可以通过软件来进行模式切换,或者发生各类中断,异常时CPU自动进入相应的模式。除用户模式外,其余的6中工作模式都属于特权模式。大多数程序运行于用户模式,进入特权模式是为了处理中断,异常,或者访问被保护的系统资源。
1. 异常事件处理方式
CPU运行过程中,是如何知道外设发生了某些事件,如按键,触摸屏,与外设数据的交互。
有两种方法:
(1)查询方式:可以用程序不断的查询各个设备的状态,并响应相关状态,做出一定的处理。但是这种方法比较占用CPU资源,不适用于多任务的系统。
(2)中断方式:当某个事件发生时,硬件会设置某个寄存器,CPU在执行完一条指令后会通过硬件查看这个寄存器。如果相应的事件发生了,则中断当前程序流程,跳转到一个固定的地址处理该事件。处理完后返回被中断程序
2.中断处理过程
- 中断控制器汇集各类外设发出的中断信号,然后告诉CPU。
- CPU保存当前程序的运行环境(各个寄存器等),调用中断服务程序(ISR, InterruptService Routine)来处理这些中断。
- 在ISR中通过读取中断控制器、外设的相关寄存器来识别这是哪个中断,并进行相应的处理。
- 清除中断:通过读写中断控制器和外设的相关寄存器来实现。
- 最后恢复被中断程序的运行环境(即上面保存的各个寄存器等),继续执行。
S3C2410/S3C2440的中断控制器结构如图9.4所示,可以从中看出中断的处理细节。
- Request sources(without sub-reg)中的中断源被触发后,会将SRCPND中的相应位置一。如果该中断没有被INTMSK屏蔽,则会进入中断优先级的处理。
- Request sources(with sub-reg)中的中断触发时,会将SUBSRCPND某一位置一。如果没被SUBMASK屏蔽,进入下一步的优先级的处理。
- 如果被触发的中断是快中断(可以通过设置INTMOD的相应位为1,来使得该中断号对应的中断为快中断),则CPU进入快中断模式处理。可以说,快中断具有最高优先级。
- 如果是一般中断,可能有几个同时发生,未被INTMSK屏蔽的中断,经过比较选出优先级最高的,然后此中断在INTPND中对应 的位被置一。CPU检查INTPND位,进入IRQ模式进行处理。
- 中断源的确定:INTPND或是INTOFFSET.
3.通过中断点灯
这个实验是通过通过中断方式以按键的形式点亮led灯。
3.1 head.s程序如下:
@******************************************************************************
@ File:head.S
@ 功能:初始化,设置中断模式、管理模式的栈,设置好中断处理函数
@*************************************</