ARM 嵌入式系统中断向量表的动态配置.pdfVIP

ARM 嵌入式系统中断向量表的动态配置.pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
电子之家 资料版权归合法所有者所有 严禁用于商业用途 ARM 嵌入式系统中断向量表的动态配置 江西理工大学 吴君钦 谢斌 任克强 摘要:通常 32 位 ARM 嵌入式系统的中断向量表是在程序编译前设置好的,每次编写中断程序都要改 C 程序的汇编启动代 码,相当繁琐。本文给出一种配置 ARM 中断向量表新方法。该方法比通常方法仅增加一条指令执行时间,简便高效,功能 完备,向量表在运行时动态生成,C 程序可以使用固定向量表的启动代码,并可隐藏起来。 关键词:动态配置 嵌入式系统 ARM 中断向量表 引 言 一般 32 位 ARM 嵌入式系统的中断向量表是程序编译前设置好的。在编写 32 位 ARM 嵌入式系统的中断服务程序、设 置和修改 ARM 体系结构的中断向量表时,常感到相当麻烦,不得不修改汇编代码,对不喜欢使用汇编代码编程的程序员尤 其如此。当需要在程序运行过程中动态修改中断向量的程序时会感到更为不便,不得不增加很多分支处理指令才能实现。为 此本文提出一种简便高效的配置方法,实现了 ROM 固化程序在运行时动态配置ARM 嵌入式系统中断向量表的功能。 1 ARM 中断向量两种设置方法 在 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 HandleIRQ DCD HandleFIQ …… 欢迎光临中国最大的电子工程师应用网站 网址: 电子之家 资料版权归合法所有者所有 严禁用于商业用途 HandleIRQ …… HandleFIQ 一般 ARM 嵌入式系统的程序都是固化在从 开始的低端 ROM 空间中,中断向量表 VectorTable 也是固化在 ROM 中,所以上述两种方法都无法在程序运行时动态随机修改中断向量表。不论对于初学 ARM 处理器的程序员还是有经 验的程序员,设置中断向量都相当繁琐,必须修改 ARM 的C 程序的启动代码。一段晦涩的汇编代码很不方便, 比较容易 出错。 2 X86 与 ARM 处理器中断向量表比较 实模式 X86 程序员都熟悉, 在 X86 体系结构的 PC 系统中,不论是用汇编还是用 C 语言,都可以动态随机地设置、 修改中断向量表——只需简单地把中断服务例程的入口地址写入到中断向量表数据区,即可完成向量表的设置。 X86 向量表设置方便的原因有两个。其一是中断向量表与程序代码完全分离,中断向量表设置在RAM 数据空间,向量 表存放的数据是纯粹地址数据;而在 ARM 向量表中存放的是与中断服务例程入口有关的一条分支指令。另一个原因是,除 BIOS 外,大多数 PC 程序都是在运行时加载到 RAM 中的,程序数据是不加区别的,所以可以很容易在程序运行的过程中从 数据生成程序,并可以很容易把 CPU 控制权转到新生成的程序中。 表面上看,在 ARM 第二种中断向量设置方法的向量表 VectorTable 中也是纯地址数据,不含指令代码,似乎可以把 VectorTable 设置在 RAM 数据段中。然而一般 ARM 体系的 ROM 代码段和 RAM 数据段间的偏移远大于 212 ,故超出了 LDR 使用 PC 为基址的相对寻址范

文档评论(0)

锦绣中华 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档