1、ARM体系的CPU有7种工作模式:
1)用户模式(usr):ARM处理器正常的程序执行状态。
2)快速中断模式(fiq):用于高速数据传输或通道处理。
3)中断模式(irq):用于通用的中断处理。
4)管理模式(svc):操作系统使用的保护模式。
5)数据访问终止模式(abt):当要取的数据或指令不存在或地址不允许访问时进入该模式,用于虚拟存储和存储保护。
6)系统模式(sys):运行具有特权的操作系统任务。
7)未定义指令中止模式(und):ARM处理器认为当前指令未定义时进入该模式,该模式可用于协处理器的软件仿真。
另外ARM体系的CPU有2种工作状态
1)ARM状态:此时处理器执行32位的ARM指令。
2)Thumb状态:此时处理器执行16位的Thumb指令。
CPU一上电后是ARM状态。
2、 ARM920T有31个通用的32位寄存器和6个程序状态寄存器。这37个寄存器分为7组,当进入某个工作模式时就使用他那组的寄存器,有些寄存器,不同的工作模式下有自己的副本,当切换到另一个模式时,那个模式下的寄存器副本将被使用,这些寄存器被称为备份寄存器。
图中R0到R15可直接访问,这些寄存器中除R15外都是通用寄存器,他们技能保存数据也能保存地址。R13~R15稍有特殊,R13就是栈指针寄存器,通常被用于保存栈指针,R14又称为程序连接寄存器,当执行BL跳转指令时,R14得到R15(程序计数器PC)的备份,而当发生中断或异常时,对应的R14_svc、R14_irq、R14_fiq、R14_abt、R14_und中保存程序计数器R15的返回值。
快速中断模式有7个备份寄存器,所以进入快速中断模式时,若是R0~R7不变,基本不需要保存其他寄存器,可直接进入,从而大大提高了进入该模式的速度。
每种工作模式除了有R0~R15共16个寄存器外,还有第17个寄存器CPSR(当前程序状态寄存器),CPSR中一些位被用于标示当前的程序状态,一些位被用于标示当前处于什么工作模式。
CPSR寄存器各位代表的意思:
各种工作模式除了有CPSR寄存器外还有SPSR(程序状态保存寄存器),当切换进入另一个工作模式时,在SPSR中保存前一个工作模式的CPSR的值,等到返回前一个工作模式的时候,可以把SPSR的值恢复到CPSR中。
综上所述,当一个异常发生时,将切换到相应的工作模式,这是ARM920T CPU核将完成以下事情:
1)在异常异常工作模式的连接寄存器R14中保存前一个工作模式的下一条指令。
2)将CPSR的值复制到异常工作模式的SPSR中。
3)将CPSR的工作模式设为这个异常工作模式的对应的值。
4)令程序计数器PC的值等于这个异常模式在异常向量表中的地址,即中断入口地址。
相反的,从异常工作模式退出回到前一个工作模式时,需要:
1)将连接寄存器里保存的地址返还给PC。
2)将异常工作模式的SPSR的值返还给CPSR。
3、s3c2440的中断控制器
CPU运行过程中,要知道外设发生不预期的事件有2中方法:
1)查询方式:通过循环不断的查询个设备的状态是否有改变,从而做出判断在该设备上是否有事件发生。
2)中断方式:当中断发生时,硬件会改变某个寄存器的值,CPU执行完一条指令后,用过硬件查看该寄存器的值,如果关注的事件发生了,则中断当前的的程序,跳转到该事件对应的地址处理这件事,处理完后又跳回来执行先前的程序。这种方法实现较复杂,但效率高。
CPU处理中断的方式基本相同:
1)中断控制器汇集各类设备发出的中断信号,然后告诉CPU
2)CPU保存当前程序的运行环境,调用中断服务程序(ISR)来处理这些中断
3)在ISR中通过读取中断控制器、外设的相关寄存器来识别这是哪个中断,并进行相应的处理。
4)清除中断:通过读写中断控制器和外设的相关寄存器来实现
5)最后恢复被中断程序的运行环境,继续运行。
中断体系中外设以CPU的关系图:
这篇是对中断进行了大概简述,下篇会涉及到中断相关寄存器和具体操作。