对于ARM核,可以且只能识别7种处理器异常,每种异常都对应一种ARM处理器模式,当发生异常时,ARM处理器就切换到相应的异常模式,并调用异常处理程序进行处理。
ARM核异常处理的一般过程是:
(1)保存异常返回地址到r14_<exception_mode>(确切的说是当前PC);
(2)保存当前CPSR到SPSR_<exception_mode>;
(3)改写CPSR以切换到相应的异常模式和处理器状态(ARM状态);
(4)禁止IRQ(如果进入FIQ则禁止FIQ);
(5)跳转到相应异常向量表入口(例如IRQ跳转到IRQ_Handler入口);
【注】复位异常处理会禁止所有中断,另外由于不用返回,因此不需要作(1)(2)步。
上面的异常处理操作都是由ARM核硬件逻辑自动完成的,软件则需要完成以下工作:
(1)为ARM核建立异常向量表。ARM体系结构中定义了各种异常的入口地址,例如复位异常的入口地址为0x0,发生复位时,ARM核自动跳转到0x0处开始执行。因此,需要在各入口地址处放一条跳转指令,跳转到相应的异常处理服务程序。因此,异常向量表就是从0x0地址开始的8个字(除了7条跳转到上述异常处理程序的跳转指令外,还有一个保留字)。
(2)为各种处理器模式设置堆栈:由于异常处理程序中需要用到通用寄存器,因此,进入异常时,应该保存要使用的寄存器,保存方法是将其压入本异常模式下的堆栈,异常处理完毕后返回时,从堆栈中恢复通用寄存器的值。
ARM的异常处理
来源:
作者:
时间:2007-12-21
Tag:
点击:
最新评论共有 4 位网友发表了评论
查看所有评论
发表评论
热点关注
- 移植uClinux-2.6.9到S3C44
- 基于Qt/Embedded和Qtopia
- 华恒ColdFire系列嵌入式Li
- Linux-2.6.20内核移植到AT
- qtopia-2.2.0的交叉编译以
- 我的MiniGUI移植之路
- Qtopia安装简要入门
- 嵌入式常用IC芯片索引
- skyeye安装移植uclinux
- 嵌入式系统开发学习如何起
- linux 2.6 下基于yl2440板
- The Linux MTD, JFFS HOWT
- 嵌入式 用户图形接口uC/GU
- QT/Embedded-3.3.8初步交
- LEOS嵌入式系统地实现过程
- 构造arm-linux交叉编译工
- 学会做嵌入式Linux操作系
- armlinux启动配置文件 /et
- 常见的嵌入式操作系统都有
- uC/OS-II系统应用开发
