ARM处理器模式和片内寄存器, ARM 异常及中断
FIQ | +0x1c |
ARM V4 以下版本 Vector Table 的地址为 0x00000000,V4 以上版本 Vector Table 地址可在 0x00000000,0xFFFF0000 间进行选择。
ARM 构架下,中断为异常的一种。以中断为例,当接收到中断后,ARM core 首先将当前模式下的 CPSR,PC 寄存器分别保存到异常模式下的 SPSR,LR 寄存器,然后将目标模式的 PC 寄存器值设为地址 0x00000018(或0xFFFF0018),最后切换到目标模式----即 IRQ 模式。切换到目标模式后执行的第一条指令便是地址 0x00000018(或0xFFFF0018)上的指令。此处一般为一个跳转指令,用于跳转执行中断处理函数。其它异常处理方式相似。
S3C6410 中有个 32KBIROM(internel ROM),里面固化了一段程序。其开头就是一个 Vector Table。以 IROM 模式启动时,IROM 被映射到 0x00000000 位置,所以执行的第一条指令便是 Vector Table 中的 Reset 异常跳转指令(ARM core 上电时在 0 地址取第一条指令)。我们可以利用此 IROM 的异常向量表实现 u-boot 下的中断处理。
刚上电,初始化中断,使S3C6410 能接收并处理中断。中断发生后,先执行 0x00000018 中的异常跳转,转去执行 IROM 中的中断处理函数。此处理函数很简单:将 0x0C001FF8 (落于 SRAM 地址范围)处的值赋给 PC。所以,我们可将我们自己的中断处理函数的入口地址存于 0x0C001FF8 处,当中断发生后,便会自动调用我们的中断处理函数。其它异常的实现方法类似,只是 0x0C001FF8 要改成别的值。具体为何值,需分析 IROM 中的代码。
S3C6410 IROM 的反汇编代码,可以在网上搜索到。或者也可以自己提取进行反汇编。
ARM处理器模式片内寄存器中 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)