ARM异常和中断控制器
本教程介绍了ARM异常和中断控制器。有关其他ARM教程内容,请参阅以下页面。
ARM教程page1
ARM教程第二页
ARM教程第3页
ARM教程第4页
ARM教程第5页
ARM教程第6页
手臂矢量表
异常/中断 | 速记 | 地址 | 高地址 |
---|---|---|---|
重置 | 重置 | 0 x00000000 | 0 xffff0000 |
未定义指令 | UNDEF | 0 x00000004 | 0 xffff0004 |
软件中断 | 瑞士 | 0 x00000008 | 0 xffff0008 |
预取中止 | PABT | 0 x0000000c | 0 xffff000c |
数据中止 | DABT | 0 x00000010 | 0 xffff0010 |
保留 | - | 0 x00000014 | 0 xffff0014 |
中断请求 | 硬中断请求优先级别 | 0 x00000018 | 0 xffff0018 |
快速中断请求 | FIQ | 0 x0000001c | 0 xffff001c |
重置:
当处理器启动时发生。初始化系统,为不同的处理器模式设置堆栈。在进入复位处理程序时,CPSR处于SVC模式,IRQ和FIQ位都被设置为1,屏蔽任何中断
数据中止:
第二优先级。当我们试图读/写一个无效的地址或访问错误的访问权限时发生。在进入数据中止处理程序时,IRQ将被禁用(I-bit集1),而FIQ将被启用IRQ被屏蔽,但FIQ保持未屏蔽。
FIQ:
最高优先级中断IRQ和FIQ被禁用,直到FIQ被处理。
硬中断请求优先级别:
第2高优先级中断IRQ处理程序只在没有FIQ和数据中止正在进行时输入。
预取中止:
类似于数据中止,但发生在地址获取失败时。在进入处理程序时,irq被禁用,但fiq仍然是启用的,并且可以在预取中止期间发生。
瑞士:
软件中断(SWI)异常发生在SWI指令执行时,没有其他高优先级异常被标记。
未定义指令:
未定义指令异常发生在不在ARM或Thumb指令集中的指令到达管道的执行阶段时,并且没有其他异常被标记。与SWI相同的优先级,因为一次可以发生一个。意思是被执行的指令不能同时是SWI指令和未定义指令。
ARM异常处理
发生异常时,会发生以下事件:
•将CPSR保存到异常模式的SPSR中。
•PC存储在例外模式的LR中。
链接寄存器被设置为基于当前指令的特定地址。例如,对于ISR, LR =最后执行的指令+ 8
•更新CPSR异常信息
•将PC设置为异常处理程序的地址。