您当前的位置:五五电子网电子知识单片机-工控设备嵌入式系统-技术ARM程序跳转到中断服务例程的功能实现 正文
ARM程序跳转到中断服务例程的功能实现

ARM程序跳转到中断服务例程的功能实现

点击数:7483 次   录入时间:03-04 11:52:58   整理:http://www.55dianzi.com   嵌入式系统-技术

    在32位ARM系统中,一般都是在中断向量表中放置一条分支指令或PC寄存器加载指令,实现程序跳转到中断服务例程的功能。例如:

    IRQEntry B HandleIRQ ;跳转范围较小

    B HandleFIQ

    或IRQEntry LDR PC,=HandleIRQ ;跳转的范围是任意32位地址空间

    LDR PC,=HandleFIQ

    LDR伪指令等效生成1条存储读取指令和1条32位常数定义指令。32位常数存储在LDR指令附近的存储单元中,相对偏移小于4KB。该32位数据就是要跳转到的中断服务程序入口地址。

    之所以使用LDR伪指令,是因为ARM的RISC指令为单字指令,不能装载32位的立即数(常数),无法直接把一个32位常数数据或地址数据装载到寄存器中。下面一般程序与上述伪指令功能等效,但中断向量表描述得更为清晰。其中VectorTable为相对LDR指令的偏移量:

    IRQEntry LDR PC,VectorTable+0

    ;与LDR PC,=HandleIRQ等效

    LDR PC,VectorTable+4

    ;与LDR PC,=HandleFIQ等效

    ……

    VectorTable DCD HandleTRQ

    DCD HandleFIQ

    ……

    HandleIRQ

    ……

    HandleFIQ

    一般ARM嵌入式系统的程序都是固化在从00000000H开始的低端ROM空间中,中断向量表VectorTable也是固化在ROM中,所以上述两种方法都无法在程序运行时动态随机修改中断向量表。不论对于初学ARM处理器的程序员还是有经验的程序员,设置中断向量都相当繁琐,必须修改ARM的C程序的启动代码。一段晦涩的汇编代码很不方便,比较容易出错。




本文关键字:程序  嵌入式系统-技术单片机-工控设备 - 嵌入式系统-技术