ARM 中断处理过程
时间:11-09
来源:互联网
点击:
1.寄存器R16用作CPSR(Current Program Status Register,当前程序状态寄存器),CPSR可在任何运行模式下被访问,它包括条件标志位、中断禁止位、当前处理器模式标志位,以及其他一些相关的控制和状态位。
每一种运行模式下又都有一个专用的物理状态寄存器,称为SPSR(Saved Program Status Register,备份的程序状态寄存器),当异常发生时,SPSR用于保存CPSR的当前值,从异常退出时则可由SPSR来恢复CPSR。
由于用户模式和系统模式不属于异常模式,他们没有SPSR,当在这两种模式下访问SPSR,结果是未知的
当中断产生的时候,把CPSR保存在SPSR是自动完成的。
1、将下一条指令的地址存入相应连接寄存器LR,以便程序在处理异常返回时能从正确的位置重新开始执行。若异常是从ARM状态进入,LR寄存器中保存的是下一条指令的地址(当前PC+4或PC+8,与异常的类型有关);若异常是从Thumb状态进入,则在LR寄存器中保存当前PC的偏移量,这样,异常处理程序就不需要确定异常是从何种状态进入的。例如:在软件中断异常SWI,指令MOV PC,R14_svc总是返回到下一条指令,不管SWI是在ARM状态执行,还是在Thumb状态执行。
2、将CPSR复制到相应的SPSR中。
3、根据异常类型,强制设置CPSR的运行模式位。
4、强制PC从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。
还可以设置中断禁止位,以禁止中断发生。
如果异常发生时,处理器处于Thumb状态,则当异常向量地址加载入PC时,处理器自动切换到ARM状态
1、将连接寄存器LR的值减去相应的偏移量后送到PC中。
2、将SPSR复制回CPSR中。
3、若在进入异常处理时设置了中断禁止位,要在此清除。
可以认为应用程序总是从复位异常处理程序开始执行的,因此复位异常处理程序不需要返回。
几种CPU工作模式
除用户模式外都是特权模式(任意地进行处理器模式的切换)。。
除用户模式和系统模式外都是异常模式。
对不同的中断模式都有独立的堆栈和独立的堆栈指针(SP)和(LR)
从SWI和Undef异常返回时使用
movs pc,LR
从FIQ,IRQ和预取终止返回时使用
SUBS PC, LR, #4
从数据异常返回时使用
SUBS PC, LR, #8
在使用上述指令异常返回时,如果LR之前被压栈的话使用LDM
LDMFD SP! {PC}^
每一种运行模式下又都有一个专用的物理状态寄存器,称为SPSR(Saved Program Status Register,备份的程序状态寄存器),当异常发生时,SPSR用于保存CPSR的当前值,从异常退出时则可由SPSR来恢复CPSR。
由于用户模式和系统模式不属于异常模式,他们没有SPSR,当在这两种模式下访问SPSR,结果是未知的
当中断产生的时候,把CPSR保存在SPSR是自动完成的。
对异常的响应
当一个异常出现以后,ARM微处理器会执行以下几步操作:(自动处理的)1、将下一条指令的地址存入相应连接寄存器LR,以便程序在处理异常返回时能从正确的位置重新开始执行。若异常是从ARM状态进入,LR寄存器中保存的是下一条指令的地址(当前PC+4或PC+8,与异常的类型有关);若异常是从Thumb状态进入,则在LR寄存器中保存当前PC的偏移量,这样,异常处理程序就不需要确定异常是从何种状态进入的。例如:在软件中断异常SWI,指令MOV PC,R14_svc总是返回到下一条指令,不管SWI是在ARM状态执行,还是在Thumb状态执行。
2、将CPSR复制到相应的SPSR中。
3、根据异常类型,强制设置CPSR的运行模式位。
4、强制PC从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。
还可以设置中断禁止位,以禁止中断发生。
如果异常发生时,处理器处于Thumb状态,则当异常向量地址加载入PC时,处理器自动切换到ARM状态
从异常返回(手动处理的)
异常处理完毕之后,ARM微处理器会执行以下几步操作从异常返回:1、将连接寄存器LR的值减去相应的偏移量后送到PC中。
2、将SPSR复制回CPSR中。
3、若在进入异常处理时设置了中断禁止位,要在此清除。
可以认为应用程序总是从复位异常处理程序开始执行的,因此复位异常处理程序不需要返回。
几种CPU工作模式
用户模式(User,usr) | 正常程序执行的模式 |
快速中断模式(FIQ,fiq) | 用于高速数据传输和通道处理 |
外部中断模式(IRQ,irq) | 用户通常的中断使用 |
特权模式(Supervisor,sve) | 供操作系统使用的一种保护模式 |
数据访问中止模式(Abort,abt) | 用于虚拟存储及存储保护 |
未定义指令中止模式(Undefin- ed,und) | 用于支持通过软件仿真硬件的协处理器 |
系统模式(System,sys) | 用于运行特权级的操作系统任务 |
除用户模式外都是特权模式(任意地进行处理器模式的切换)。。
除用户模式和系统模式外都是异常模式。
对不同的中断模式都有独立的堆栈和独立的堆栈指针(SP)和(LR)
从SWI和Undef异常返回时使用
movs pc,LR
从FIQ,IRQ和预取终止返回时使用
SUBS PC, LR, #4
从数据异常返回时使用
SUBS PC, LR, #8
在使用上述指令异常返回时,如果LR之前被压栈的话使用LDM
LDMFD SP! {PC}^
ARM中断处 相关文章:
- ARM中断处理及状态机嵌套实现(11-19)
- 关于arm中的中断处理(11-11)
- ARM中断处理分析(11-11)
- ARM中断处理类型(11-22)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)