微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM 的异常处理学习笔记

ARM 的异常处理学习笔记

时间:11-10 来源:互联网 点击:

嵌入式系统的Bootloader。运行完bootloader代码后,会自动跳转至利用高级语言编写的系统应用程序或是开始运行操 作 系统内核。而对于中断的处理在系统启动代码中对于初学者是较难理解的。
当CPU接收到中断请求信号之后且允许CPU响应中断请求,则对于FIQ和非矢量IRQ中断CPU会根据中断控制器设定的工作模式去自动执行

0x0000001C 或0x00000018处的跳转指令。执行
b HandlerIRQ
#跳转到
HandlerIRQ HANDLER HandleIRQ
#这个宏定义的动作是要跳转到HandleIRQ中存放的地址去运行。
#然后在复位初始化代码(ResetHandler)中会看到有:
/* Setup IRQ handler*/
ldr r0,=HandleIRQ
ldr r1,=IsrIRQ
str r1,[r0]
这里是把IsrIRQ的地址放到了HandleIRQ中。因此程序会跳转到IsrIRQ去执行。
#ARM7TDMI 内核只支持FIQ和IRQ两个中断请求,当有多个中断请求信号同时有效的时#候,是利用软件的方式来完成优先级判定,然后再跳转到相应的中断服务程序。在 IsrIRQ中,CPU会读取中断挂起寄存器的数值来判定中断来源和优先级。而S3C44B0中集成的中断控制器提供了一种更为快速有效的中断响应方式: 矢量中断利用中断控制器的硬件方式直接提供对中断服务的快速响应:当多重中断请求信号发生时,由硬件优先级判定逻辑确定哪个中断请求将被响应,同时硬件逻 辑还利用向量表中的跳转指令使CPU直接跳转到相应的中断服务程序入口出。这样在很大程度上减小了中断响应的延迟。
那么在程序设计上,就需要我们在矢量中断表中对应的地址上放置各个中断请求对应的服务程序入口地址,如:
VECTOR_BRANCH:
ldr pc,=HandlerEINT0 /*0x00000020*/
ldr pc,=HandlerEINT1 /*0x00000024*/
ldr pc,=HandlerEINT2 /*0x00000028*/
ldr pc,=HandlerEINT3 /*0x0000002C*/
ldr pc,=HandlerEINT4567 /*0x00000030*/
ldr pc,=HandlerTICK /*0x00000034 */
b .
b .
ldr pc,=HandlerZDMA0 /*0x00000040*/
ldr pc,=HandlerZDMA1 /*0x00000044*/
……

6、中断向量表http://www.mcu16.com/embed/arm/arm593.htm

a、中断向量表指定了个异常中断及其处理程序的对应关系。他通常存放在存储地址的低端。在ARM体系中,异常中断向量表的大小为32字节,其中每个异常中断占据4个字节大小,保留了4个字节空间。
b、每个异常中断对应的中断向量表中的4个字节的空间中存放了一个跳转指令或者一个向PC寄存器中赋值的数据访问指令。通过这两种指令,程序将跳转到相应的异常中断处理程序处执行。
c、当几个异常中断同时发生时,系统并不能按照一定的次序来处理这些异常中断,例如:当FIQ、IRQ和第三个其他中断同时发生,FIQ比IRQ优先级高,IRQ会忽略,直到FIQ返回到用户代码为止。

各个异常中断的中断向量地址以及中断的处理优先级
——————————————————————————————————————
中断向量地址 | 异常中断类型 | 异常中断模式 | 优先级(6最低) |
—————————|—— ——————|—————————|———— —————|
0x00 | 复位 | 特权模式 | 1 |
0x04 | 未定义的指令 | UND终止模式 | 6 |
0x08 | 软件中断 | 特权模式 | 6 |
0x0C | 指令预取终止 | 终止模式 | 5 |
0x10 | 数据访问终止 | 终止模式 | 2 |
0x14 | 保留 | 未使用 | 未使用 |
0x18 | 外部中断请求 | IRQ模式 | 4 |
0x1C | 快速中断请求 | FIQ模式 | 3 |
——————————————————————————————————————

7、总结
S3C44B0利用两个向量表高效而可靠的实现了对异常的处理,掌握了S3C44B0微处理器的异常模式以及对异常处理中复位、FIQ和IRQ响应的过 程,可以在很大程度上帮助我们理解ARM7TDMI内核对异常处理的工作原理,有利于理解S3C44B0的启动代码(或Bootloader),还可以更 有效的利用芯片的硬件资源编写出精简而由高效的嵌入式程序代

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top