徐春雷ARM体系结构域编程.pptVIP

  1. 1、本文档共23页,可阅读全部内容。
  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体系结构域编程.ppt

第9章 异常中断处理 9.1 ARM中异常中断处理概述 在ARM体系中通常有以下3种方式控制程序的执行流程: 在正常程序执行过程中,每执行一条ARM指令,程序计数器寄存器(PC)的值加4个字节;每执行一条Thumb指令,程序计数器寄存器(PC)的值加两个字节。整个过程是顺序执行。 通过跳转指令,程序可以跳转到特定的地址标号处执行,或者跳转到特定的子程序处执行。 当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行。 9.1.1 ARM体系中异常中断种类 ARM体系中的异常中断如表9.1所示。 9.1.2 异常中断向量表及异常中断优先级 各异常中断的中断向量地址以及中断的处理优先级如表9.2所示。 9.1.3 异常中断使用的寄存器 各异常中断对应着一定的处理器模式。应用程序通常运行在用户模式下。ARM中的处理器模式如表9.3所示。 9.2 进入和退出异常中断的过程 本节主要介绍处理器对于各种异常中断的响应过程以及从异常中断处理程序中返回的方法。对于不同的异常中断处理程序,返回地址以及使用的指令是不同的。 9.2.1 ARM处理器对异常中断的响应过程 ARM处理器对异常中断的响应过程如下: (1) 保存处理器当前状态、中断屏蔽位以及各条件标志位。 (2) 设置当前程序状态寄存器CPSR中相应的位。包括设置CPSR中的位,使处理器进入相应的执行模式;设置CPSR中的位,禁止IRQ中断,当进入FIQ模式时,禁止FIQ中断。 (3) 将寄存器lr_mode设置成返回地址。 (4) 将程序计数器值(PC),设置成该异常中断的中断向量地址,从而跳转到相应的异常中断处理程序处执行。 9.2.1 ARM处理器对异常中断的响应过程 1. 响应复位异常中断 2. 响应未定义指令异常中断 3. 响应SWI异常中断 4. 响应指令预取中止异常中断 5. 响应数据访问中止异常中断 6. 响应IRQ异常中断 7. 响应FIQ异常中断 9.2.2 从异常中断处理程序中返回 从异常中断处理程序中返回包括下面两个基本操作: 恢复被中断的程序的处理器状态,即将SPSR_mode寄存器内容复制到当前程序状态寄存器CPSR中。 返回到发生异常中断的指令的下一条指令处执行,即将lr_mode寄存器的内容复制程序计数器PC中。 复位异常中断处理程序不需要返回。整个应用系统是从复位异常中断处理程序开始执行的,因而它不需要返回。 9.2.2 从异常中断处理程序中返回 1. SWI和未定义指令异常中断处理程序的返回 2. IRQ和FIQ异常中断处理程序的返回 3. 指令预取中止异常中断处理程序的返回 4. 数据访问中止异常中断处理程序的返回 9.3 在应用程序中安装异常中断处理程序 通常有两种方法将异常中断处理程序注册到异常中断向量表中。一种使用跳转指令,另一种使用数据读取指令LDR。 使用跳转指令的方法比较简单,可以在异常中断对应的向量表中特定位置放一条跳转指令,直接跳转的该异常中断的处理程序。这种方法有一个缺点,即跳转指令只能在32 MB的空间范围内跳转。 使用数据读取指令LDR向程序计数器PC中直接赋值。 9.3.1 在系统复位时安装异常中断处理程序 可以在系统的启动代码中安装异常中断处理程序。分两种情况:一种情况是地址0x0处为ROM;另一种情况是地址0x0处为RAM。 1. 地址0x0处为ROM的情况 2. 地址0x0处为RAM的情况 9.3.2 在C程序中安装异常中断处理程序 在程序运行过程中,也可以在C程序中安装异常中断处理程序。这时需要把相应的跳转指令或者数据读取指令的编码写到中断向量表中的相应位置。下面分别讨论这两种情况下安装异常中断处理程序的方法。 1. 中断向量表中使用跳转指令的情况 2. 中断向量表中使用数据读取指令的情况 9.4 SWI异常中断处理程序 通过SWI异常中断,用户模式的应用程序可以调用系统模式下的代码。在实时操作系统中,通常使用SWI异常中断为用户应用程序提供系统功能调用。 9.4.1 SWI异常中断处理程序的实现 在SWI指令中包括一个24位的立即数,该立即数指示了用户请求的特定的SWI功能。在SWI异常中断处理程序要读取该24位的立即数,这涉及到SWI异常模式下对寄存器LR的读取,并且要从存储器读取该SWI指令。这样需要使用汇编程序来实现。通常SWI异常中断处理程序分为两级:第1级SWI异常中断处理程序为汇编程序,用于确定SWI指令中的24位的立即数;第2级SWI异常中断处理程序具体实现SWI的各个功能,它可以是汇编程序,也可以是C程序。 1. 第1级SWI异常中断处理程序 2. 使用汇编程序的第2级SWI异常中断处理程序 3. 使

文档评论(0)

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

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

1亿VIP精品文档

相关文档