×
单片机 > 单片机程序设计 > 详情

ARM异常向量表初始化

发布时间:2020-05-28 发布时间:
|
中断向量表的程序设计如下:

     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实质上只作为一个指针(指向ResetInit),没有分配空间,

ResetAddr地址的存储器上装载的是ResetInit的地址。

ResetInit
        BL      InitStack               ; 初始化堆栈                                              
        BL      TargetBusInit           ; 总线系统初始化 (函数中不允许堆栈操作)
   BL  TargetResetInit   ; 针对目标板的系统初始化  

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

 

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

=========================

1. undef exception handler

    当前指令,如果CPU不支持,它会自动将该指令交给Co-processor.(如:MMU, FPU) 处理。

   如果Co-processor也无法识别这条指令,则产生异常.

2. SWI handler

   当执行SWI指令时,产生这种中断.

3. Data abort

    由数据异常触发.

   通常有3种指令引发数据异常, 这些指令都是访存操作.(都是由MMU引入后才可能会发生的情况)

  LDR / STR

  SWAP

  LDM / STM

 

  MMU的失效类型,又分为5种:

  存储访问失效

  地址对齐失效

  地址变换失效

  域控制器失效

  访问控制权限失效

 

  因此当异常发生后,需要通过访问CP15来获知异常产生的具体原因和情况。

4. Pretetch Abort

  对于ARM处理器来说,由于其内部使用了哈佛结构---独立的数据的指令总线.

  因此,在数据/指令的读取过程中产生的异常也就很自然地可以区分开来

  本质上而言,这些异常都是同属于存储访问失败产生的异常,因此这些异常都由MMU相关,在ARM手册中DataAbort和PrefetchAbort都

  称为Memory abort。

 

  Prefetch也就是在预取指令的动作后产生的,当处理器运行到这个无效的指令时(这个无效与undefined exception中的不可识别不同,

  是指不存在或是无法得到)就触发该异常。

关键字:ARM  异常向量表  初始化 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
基于arm的指纹识别门禁系统是如何设计的