ARM应用系统开发详解 第2章 ARM微处理器的编程模型
有关。
当确定了中止的原因后,Abort处理程序均会执行以下指令从中止模式返回,无论是在ARM状态还是Thumb状态:
SUBS PC, R14_abt, #4;指令预取中止
SUBS PC, R14_abt, #8;数据中止
以上指令恢复PC(从R14_abt)和CPSR(从SPSR_abt)的值,并重新执行中止的指令。
Software Interruupt(软件中断)
软件中断指令(SWI)用于进入管理模式,常用于请求执行特定的管理功能。软件中断处理程序执行以下指令从SWI模式返回,无论是在ARM状态还是Thumb状态:
MOV PC , R14_svc
以上指令恢复PC(从R14_svc)和CPSR(从SPSR_svc)的值,并返回到SWI的下一条指令。
Undefined Instruction(未定义指令)
当ARM处理器遇到不能处理的指令时,会产生未定义指令异常。采用这种机制,可以通过软件仿真扩展ARM或Thumb指令集。
在仿真未定义指令后,处理器执行以下程序返回,无论是在ARM状态还是Thumb状态:
MOVS PC, R14_und
以上指令恢复PC(从R14_und)和CPSR(从SPSR_und)的值,并返回到未定义指令后的下一条指令。
表2-4总结了进入异常处理时保存在相应R14中的PC值,及在退出异常处理时推荐使用的指令。
表2-4异常进入/退出
返回指令 | 以前的状态 | 注意 | ||
ARM R14_x | Thumb R14_x | |||
BL | MOV PC,R14 | PC+4 | PC+2 | 1 |
SWI | MOVS PC,R14_svc | PC+4 | PC+2 | 1 |
UDEF | MOVS PC,R14_und | PC+4 | PC+2 | 1 |
FIQ | SUBS PC,R14_fiq,#4 | PC+4 | PC+4 | 2 |
IRQ | SUBS PC,R14_irq,#4 | PC+4 | PC+4 | 2 |
PABT | SUBS PC,R14_abt,#4 | PC+4 | PC+4 | 1 |
DABT | SUBS PC,R14_abt,#8 | PC+8 | PC+8 | 3 |
RESET | NA | - | - | 4 |
注意:
1、在此PC应是具有预取中止的BL/SWI/未定义指令所取的地址。
2、在此PC是从FIQ或IRQ取得不能执行的指令的地址。
3、在此PC是产生数据中止的加载或存储指令的地址。
4、系统复位时,保存在R14_svc中的值是不可预知的。
表2-5显示异常向量地址。
表2-5异常向量表
地址 | 异常 | 进入模式 |
0x0000,0000 | 复位 | 管理模式 |
0x0000,0004 | 未定义指令 | 未定义模式 |
0x0000,0008 | 软件中断 | 管理模式 |
0x | 中止(预取指令) | 中止模式 |
0x0000,0010 | 中止(数据) | 中止模式 |
0x0000,0014 | 保留 | 保留 |
0x0000,0018 | IRQ | IRQ |
0x | FIQ | FIQ |
当多个异常同时发生时,系统根据固定的优先级决定异常的处理次序。异常优先级由高到低的排列次序如表2-6所示。
表2-6异常优先级
优先级 | 异常 |
1(最高) | 复位 |
2 | 数据中止 |
3 | FIQ |
4 | IRQ |
5 | 预取指令中止 |
6(最低) | 未定义指令、SWI |
当系统运行时,异常可能会随时发生,为保证在ARM处理器发生异常时不至于处于未知状态,在应用程序的设计中,首先要进行异常处理,采用的方式是在异常向量表中的特定位置放置一条跳转指令,跳转到异常处理程序,当ARM处理器发生异常时,程序计数器PC会被强制设置为对应的异常向量,从而跳转到异常处理程序,当异常处理完成以后,返回到主程序继续执行。
2.7本章小节
本章对ARM微处理器的体系结构、寄存器的组织、处理器的工作状态、运行模式以及处理器异常等内容进行了描述,这些内容也是ARM体系结构的基本内容,是系统软、硬件设计的基础。
ARM微处理器编程模 相关文章:
- ARM·微处理器的编程模型(11-24)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
