找回密码
 注册
关于网站域名变更的通知
查看: 400|回复: 1
打印 上一主题 下一主题

ARM中断向量两种设置方法

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-4-14 13:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
在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程序的启动代码。一段晦涩的汇编代码很不方便,比较容易出错。

! g/ `! d6 C' O0 L) t# b
9 P- {( }$ J0 o" @9 H
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-23 21:36 , Processed in 0.093750 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表