北航嵌入式系统幻灯片--第3章-ARM微处理器体系结构.ppt

北航嵌入式系统幻灯片--第3章-ARM微处理器体系结构.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
如果异常处理程序已经把返回地址拷贝到堆栈,那么可以使用一条多寄存器传送指令来恢复用户寄存器并实现返回。 中断处理代码的开始部分和退出部分 3.9 异常 异常的入口和出口处理 SUB LR,LR,#4 ;计算返回地址 STMFD SP!,{R0-R3,LR} ;保存使用到的寄存器 . . . LDMFD SP!,{R0-R3,PC}^ ;中断返回 注意:中断返回指令的寄存器列表(其中必须包括PC)后的“^”符号表示这是一条特殊形式的指令。这条指令在从存储器中装载PC的同时(PC是最后恢复的),CPSR也得到恢复。这里使用的堆栈指针SP(R13)是属于异常模式的寄存器,每个异常模式有自己的堆栈指针。这个堆栈指针应必须在系统启动时初始化。 3.9 异常 进入异常 在异常发生后,ARM7TDMI内核会作以下工作: 1.在适当的LR中保存下一条指令的地址,当异常入口来自: ARM状态,那么ARM7TDMI将当前指令地址加4或加8复制(取决于异常的类型)到LR中; 为Thumb状态,那么ARM7TDMI将当前指令地址加2、4或加8 (取决于异常的类型)复制到LR中;异常处理器程序不必确定状态。 3.9 异常 进入异常 在异常发生后,ARM7TDMI内核会作以下工作: 2.将CPSR复制到适当的SPSR中; 3. 将CPSR模式位强制设置为与异常类型相对应的值; 4.强制PC从相关的异常向量处取指。 ARM7TDMI内核在中断异常时置位中断禁止标志,这样可以防止不受控制的异常嵌套。 注:异常总是在ARM状态中进行处理。当处理器处于Thumb状态时发生了异常,在异常向量地址装入PC时,会自动切换到ARM状态。 3.9 异常 进入异常 当异常结束时,异常处理程序必须: 1.将LR( R14 )中的值减去偏移量后存入PC,偏移量根据异常的类型而有所不同; 2.将SPSR的值复制回CPSR; 3.清零在入口置位的中断禁止标志。 注:恢复CPSR的动作会将T、F和I位自动恢复为异常发生前的值。 3.9 异常 退出异常 程序A IRQ服务程序 系统模式 IRQ模式 程序 寄存器组 图示进入异常过程 1. 程序在系统模式下运行用户程序,假定当前处理器状态为Thumb状态、允许IRQ中断; 2. 程序运行时发生IRQ中断,硬件完成以下动作: LR_sys SPSR_irq LR_irq LR PC CPSR SPSR SYS 1 ? 0 . . . ? ? ? ? MOD T F I . . . N Z C V 置位I位(禁止IRQ中断) 清零T位(进入ARM状态) 设置MOD位,切换处理器模式至IRQ模式 将下一条指令的地址存入IRQ模式的LR寄存器 将CPSR寄存器内容存入IRQ模式的SPSR寄存器 将跳转地址存入PC,实现跳转 IRQ 0 ? 1 . . . ? ? ? ? BackAddr JumpAddr Jump SYS 1 ? 0 . . . ? ? ? ? “?”表示对该位不关心 在异常处理结束后,异常处理程序完成以下动作: 程序A IRQ服务程序 系统模式 IRQ模式 程序 寄存器组 图示退出异常过程 LR_sys SPSR_irq LR_irq LR PC CPSR SPSR SYS 1 ? 0 . . . ? ? ? ? MOD T F I . . . N Z C V 将SPSR寄存器的值复制回CPSR寄存器; 将LR寄存的值减去一个常量后复制到PC寄存器,跳转到被中断的用户程序。 IRQ 0 ? 1 . . . ? ? ? ? BackAddr JumpAddr return SYS 1 ? 0 . . . ? ? ? ? SYS 1 ? 0 . . . ? ? ? ? BackAddr-4 Jump “?”表示对该位不关心 快速中断请求(FIQ)适用于对一个突发事件的快速响应(数据传输和通道处理)保护的需要(这可以加速上下文切换的速度)。通过处理器上的FIQ输入引脚,由外部产生FIQ异常。 不管异常入口是来自ARM状态还是Thumb状态,FIQ处理程序都会通过执行下面的指令从中断返回: SUBS PC,R14_fiq,#4 在一个特权模式中,可以通过置位CPSR中的F位来禁止FIQ异常。若F位清零,则ARM在执行完当前指令后时检查FIQ输入引脚。 3.9 异常 快速中断请求 寄存器类别 寄存器在汇编中的名称 各模式下实际访问的寄存器 用户 系统 管理 中止 未定义 中断 快中断 通用寄存器和程序计数器 R0(a1) R0 R1(a2) R1 R2(a3) R2 R3(a4) R3 R4(v1) R4 R5(v2) R5 R6(v3)

文档评论(0)

mmrs369 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档