分配中断向量表,浅谈ARM的硬件启动程序设计

电工技术 4年前 (2022) aysz01
0

众所周知,ARM要求中断向量表必须防放置在从0x00000000地址开始的连续32字节的空间内。ARM9定义的中断向量在向量表中的地址如下面所示,当中断发生后,ARM处理器会强制把PC指针指向中断向量表中对应的终端类型的地址处。

中断向量表的程序设计如下:

CODE32

AREA Startup,CODE,READONLY

; /* 异常向量表 */

Vectors

LDR PC, ResetAddr ;把ResetAdde地址上的存储器的内容装载到PC上

LDR PC, UndefinedAddr

LDR PC, SWI_Addr

LDR PC, PrefetchAddr

LDR PC, DataAbortAddr

DCD 0

LDR PC, IRQ_Addr

LDR PC, FIQ_Addr

ResetAddr DCD ResetInit;为ResetAddr分配以ResetInit地址值,

UndefinedAddr DCD Undefined

SWI_Addr DCD SoftwareInterrupt

PrefetchAddr DCD PrefetchAbort

DataAbortAddr DCD DataAbort

Nouse DCD 0

IRQ_Addr DCD IRQ_Exception

FIQ_Addr DCD FIQ_Handler

对ResetAddr而言,此时ResetAddr实质上只作为一个指针(指向ResetInit),没有分配空间,ResetAddr地址的存储器上装载的是ResetInit的地址。

ResetInit

BL InitStack ; 初始化堆栈

BL TargetBusInit ; 总线系统初始化 (函数中不允许堆栈操作)

BLTargetResetInit; 针对目标板的系统初始化

以ResetInit为例,存储器空间分配如下所示:

注意中断向量表要存放在代码段startup的开始处(Entry开始),而程序被链接时,该startup代码段被链接在整个程序的入口地址。

版权声明:aysz01 发表于 2022-08-06 17:33:41。
转载请注明:分配中断向量表,浅谈ARM的硬件启动程序设计 | 鳌游电工

暂无评论

暂无评论...