ARM中断程序的原理和实现.pdfVIP

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
摘要: 本文首先简要概述了 ARM 处理器的异常中断种类、响应和返回过程;然后重点讨论了中断解析程 序的原理和实现,并分别给出了普通中断和向量中断的处理示例流程图和详细的参考代码。 关键词: 异常中断;中断解析程序;向量中断; ARM 处理器 引言 ARM 编程特别是系统初始化代码的编写中通常需要实现中断的响应、解析跳转和返回等操作,以便支 持上层应用程序的开发,而这往往是困扰初学者的一个难题。中断处理的编程实现需要深入了解 ARM 内 核和处理器本身的中断特征,从而设计一种快速简便的中断处理机制。需要说明的是,具体的上层高级语 言编写的中断服务函数不在本文的讨论范围之内。 ARM 处理器异常中断处理概述 当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行。当异常中断处 理程序执行完成后,程序返回到发生中断的指令的下一条指令处执行。在进入异常中断处理程序时,要保 存被中断的程序的执行现场。从异常中断处理程序退出时,要恢复被中断的程序的执行现场。 ARM 体系中通常在存储地址的低端固化了一个 32 字节的硬件中断向量表, 用来指定各异常中断及其处 理程序的对应关系。当一个异常出现以后, ARM 微处理器会执行以下几步操作: 1)保存处理器当前状态、中断屏蔽位以及各条件标志位; 2 )设置当前程序状态寄存器 CPSR 中相应的位; 3)将寄存器 lr_mode 设置成返回地址; 4 )将程序计数器 (PC)值设置成该异常中断的中断向量地址,从而跳转到相应的异常中断处理程序处执行。 在接收到中断请求以后, ARM 处理器内核会自动执行以上四步,程序计数器 PC 总是跳转到相应的固 定地址。 从异常中断处理程序中返回包括下面两个基本操作: 1)恢复被屏蔽的程序的处理器状态; 2 )返回到发生异常中断的指令的下一条指令处继续执行。 当异常中断发生时,程序计数器 PC 所指的位置对于各种不同的异常中断是不同的,同样,返回地址对于 各种不同的异常中断也是不同的。例外的是,复位异常中断处理程序不需要返回,因为整个应用系统是从 复位异常中断处理程序开始执行的。 支持中断跳转的解析程序 解析程序的概念和作用 如前所述, ARM 处理器响应中断的时候,总是从固定的地址开始的,而在高级语言环境下开发中断服 务程序时,无法控制固定地址开始的跳转流程。为了使得上层应用程序与硬件中断跳转联系起来,需要编 写一段中间的服务程序来进行连接。这样的服务程序常被称作中断解析程序。 每个异常中断对应一个 4 字节的空间,正好放置一条跳转指令或者向 PC 寄存器赋值的数据访问指令。 理论上可以通过这两种指令直接使得程序跳转到对应的中断处理程序中去。但实际上由于函数地址值为未 知和其它一些问题,并不这么做。 这里给出一种常用的中断跳转流程: 图 1 中断跳转流程图 这个流程中的关键部分是中断向量表,为了让解析程序能找到向量表,应该将向量表的地址固定化(编 程者自定义)。这样,整个跳转流程的所有程序地址都是固定的,当中断触发后,就可以自动运行。其中, 只有向量表的内容是可变的,编程者只要在向量表中填入正确的目标地址值就可以了。这使得上层中断处 理程序和底层硬件跳转有机地联系起来。 解析过程示例 以一次 IRQ 跳转为例,假定中断向量表定义在 0开始的外部 RAM 空间: 图 2 中断解析示例流程 图 2 中实线表示的流程都用 ARM 汇编语言编写,一般作为 boot 代码的一部分放在系统的底层模块中。填 写向量表的操作可以在上层应用程序中方便地实现,比如在 C 语言中: *( int *(0) = (int) ISR_IRQ; 这样就将 IRQ 中断的服务程序入口地址( 0)填写到中断向量表中的固定地址 0 开 始的 4 字节空间了。 如此一来,就可避免在应用程序中计算中断的跳转地址,并且可以很方便的选择不同的函数作为指定中 断的服务程序。当然,在程序开发时要合理开辟好向量表,避免对向量表地址空间不必要的写操作。

文档评论(0)

拉拉链 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档