- 1、本文档共48页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第9章异常中断处理.
Assemble Language of ARM 第9章 异常中断处理 9.1 ARM异常中断处理概述 控制程序的执行流程有3种方式: 正常情况下,程序每执行一条指令,程序计数器寄存器pc将增加4或2字节; 通过跳转指令,程序可以跳转到特定的地址标号处执行,或者跳转到特定的子程序处执行; B指令 BL指令 BLX指令,BX指令 当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行。 中断向量表指定了各异常中断及其处理程序的对应关系,通常放在内存的低地址端。 在ARM体系中,异常中断向量表的大小为32字节,其中每个异常中断占据4个字节,保留4个字节。 每个异常中断对应的中断向量表中的4个字节空间中存放一条跳转指令或者一条向PC寄存器中赋值的数据访问指令。 各异常中断的中断向量地址及其异常中断处理优先级表 9.1.3 异常中断使用的寄存器 各异常中断对应着一定的处理器模式。 应用程序通常运行在用户模式下。 各种不同的处理器模式对应于该处理器模式的物理寄存器组。 异常处理中的寄存器使用 与异常发生相关的模式改变意味着所调用的异常处理程序至少要访问: 私有的 SP_mode (stack pointer ). 私有的 LR_mode (link register). 私有的 SPSR_mode (saved program status register ). 在 FIQ异常处理中, 另有5个私有的通用寄存器 (r8_fiq to r12_fiq). 其它的寄存器是所有模式公用的. 异常处理程序必须确保其他的寄存器在退出前恢复到原来的状态 这可以通过将任何正在使用的寄存器的内容保存在堆栈中,并在返回前恢复来实现 任何所需寄存器的初始化要由应用程序的起始代码来完成,参阅: “Embedded Software Development” 2.9 进入和退出异常中断的过程 ARM微处理器对异常的响应过程用伪码可以描述为: R14_Exception_Mode = Return Link SPSR_Exception_Mode = CPSR CPSR[4:0] = Exception Mode Number CPSR[5] = 0???;当运行于ARM工作状态时 If Exception_Mode == Reset or FIQ then CPSR[6] = 1??;当响应FIQ异常时,禁止新的FIQ异常?? CPSR[7] = 1 ;禁止新的IRQ异常 PC = Exception Vector Address 各种中断响应的伪代码参见教材P.265-268 9.2.2? 从异常中断处理程序中返回 从异常中断处理程序中返回包括以下两个基本操作: 1、恢复被中断的程序的处理器状态,即将SPSR_mode寄存器内容复制到当前程序状态寄存器CPSR中。 2、返回到发生异常中断的指令的下一条指令执行,即将lr_mode寄存器的内容复制到程序计数器PC中。 复位异常中断处理程序不需要返回,整个应用系统是从复位异常中断处理程序开始执行的。 异常返回指令 异常返回: 使用一数据处理指令: 相应的指令取决于什么样的异常 在特权模式不仅仅更新PC,而且 拷贝SPSR 到 CPSR 向量表指令 ARM or Thumb? 9.3 在应用程序中安装异常中断处理程序 将异常中断处理程序注册到异常中断向量表中有两种办法: 使用跳转指令 使用数据读取指令LDR 1. 地址0x0处为ROM的情况 使用数据读取指令LDR直接向程序计数器PC中赋值; 使用跳转指令直接跳转到异常中断处理器程序 参见教材P.271的代码 2. 地址0x0处为RAM的情况 只能使用数据读取指令LDR直接向程序计数器PC中赋值; 而且必须将中断向量表从ROM中复制到RAM的地址0x0开始处的存储空间中。 9.4 SWI异常中断处理程序 通过SWI异常中断,用户模式的应用程序可以调用系统模式下的代码。 在SWI指令中包括一个24位的立即数,指示了用户请求的特定的SWI功能。 软中断 9.4.2 SWI异常中断调用 执行SWI指令后,系统将会把CPSR寄存器的内容保存到寄存器SPSR_svc中,将返回地址保存到LR_svc中。 在特权模式调用SWI 须将原始的寄存器SPSP_svc和寄存器LR_svc值保存在数据栈中,以免内容被破坏。 从应用程序中调用SWI 使用汇编指令调用特定的SWI功能 从C程序中调用特定的SWI功能 从应用程序中动态调用SWI 直到运行时才能确定需要调用的SWI功能号 SWI 调用 传递参数到SWIs 参数传递使用: SWI 号 (e.g. semi-hosting, 使用0x123456 (ARM)
文档评论(0)