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

众所周知,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代码段被链接在整个程序的入口地址。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭