| 注意 | 在ARM文档中,使用术语Exception来描述异常。Exception主要是从处理器被动接受异常的角度出发,而Interrupt带有向处理器主动申请的色彩。在本书中,对“异常”和“中断”不做严格区分,两者都是指请求处理器打断正常的程序执行流程,进入特定程序循环的一种机制。 |
异 常 类 型 | 处理器模式 | 执行低地址 | 执行高地址 |
复位异常(Reset) | 特权模式 | 0x00000000 | 0xFFFF0000 |
未定义指令异常(Undefined interrupt) | 未定义指令中止模式 | 0x00000004 | 0xFFFF0004 |
软中断异常(Software Abort) | 特权模式 | 0x00000008 | 0xFFFF0008 |
预取异常(Prefetch Abort) | 数据访问中止模式 | 0x0000000C | 0xFFFF000C |
数据异常(Data Abort) | 数据访问中止模式 | 0x00000010 | 0xFFFF0010 |
外部中断请求IRQ | 外部中断请求模式 | 0x00000018 | 0xFFFF0018 |
快速中断请求FIQ | 快速中断请求模式 | 0x0000001C | 0xFFFF001C |
优 先 级 | 异 常 |
最高 1 | 复位异常 |
2 | 数据中止 |
3 | 快速中断请求 |
4 | 中断请求 |
5 | 预取指令异常 |
6 | 软件中断 |
最低 7 | 未定义指令 |
| 注意 | 用户和系统模式是仅有的不可通过异常进入的两种模式,也就是说,要进入这两种模式,必须通过编程改变CPSR。 |
异 常 | 模 式 | 用 途 |
快速中断请求 | FIQ | 进行快速中断请求处理 |
外部中断请求 | IRQ | 进行外部中断请求处理 |
SWI | SVC | 进行操作系统的高级处理 |
复位 | SVC | 进行操作系统的高级处理 |
预取指令中止异常 | ABORT | 虚存和存储器保护 |
数据中止异常 | ABORT | 虚存和存储器保护 |
未定义指令 | Undefined | 软件模拟硬件协处理器 |
| 注意 | 在计算指令中引用offset数值的时候,要考虑处理器流水线中指令预取对PC值的影响。 |
异 常 | 地 址 | 用 途 |
复位 | - | 复位没有定义LR |
数据中止 | LR-8 | 指向导致数据中止异常的指令 |
FIQ | LR-4 | 指向发生异常时正在执行的指令 |
IRQ | LR-4 | 指向发生异常时正在执行的指令 |
预取指令中止 | LR-4 | 指向导致预取指令异常的那条指令 |
SWI | LR | 执行SWI指令的下一条指令 |
未定义指令 | LR | 指向未定义指令的下一条指令 |
| 注意 | 可以使用Scatter文件定义加载向量表的地址,这样上述代码的拷贝工作由C库函数完成。 |
| 注意 | SWI指令和其他所以ARM指令一样,可以被条件执行。 |
欢迎光临 DIY编程器网 (http://diybcq.com/) | Powered by Discuz! X3.2 |