第2讲ARM体系结构精选.pptVIP

  • 16
  • 0
  • 约2.18万字
  • 约 82页
  • 2016-12-31 发布于湖北
  • 举报
第2讲ARM体系结构精选

* 3.8 ARM体系的异常 复位异常 当nRESET信号被拉低时,ARM处理器放弃正在执行的指令,等到nRESET信号再次变高时,处理器执行以下操作: 强制M[4:0]变为b10011,系统进入管理模式; 将CPSR中的标志位I和F置位,IRQ与FIQ中断被禁止; 将CPSR中的标志位T清零,处理器处于ARM状态; 强制PC从地址0x00开始对下一条指令进行取指; 返回到ARM状态并恢复执行。 * 3.8 ARM体系的异常 中断请求异常 只有当CPSR中相应的中断屏蔽位被清除时,才可能发生IRQ异常,中断请求(IRQ)异常由一个nIRQ输入端的低电平所产生的正常中断。 注:中断异常产生时,中断异常模式下的R14保存的是PC的值。 取指 译码 执行 取指 译码 执行 取指 译码 执行 周期4 周期5 周期1 周期2 周期3 PC-8 指令1 指令2 指令3 PC-4 PC 中断发生周期 指令1的执行不会中断; 异常程序结束时返回到指令2; 进入中断服务程序时,指令3地址被保存在R14中。 * 程序运行在用户模式下,当一个IRQ异常中断发生时,内核切换到“中断模式”,并自动的做如下处理: 3.8 ARM体系的异常 进入IRQ异常模式 R0~R12 R13_usr R14_usr R15 CPSR - R13_irq R14_irq SPSR_irq USR模式 IRQ模式 2 I=1,T=0,mod=irq 3 异常向量地址0x0018 4 ISR代码将寄存器压栈 5 1 将异常处理程序的返回地址保存到异常模式下的R14(R14_irq)中。 1 用户模式的CPSR被保存到新的IRQ中断异常模式SPSR_irq中。 2 修改CPSR,禁止新的IRQ中断产生,进入ARM状态,设置为IRQ模式。 3 设置IRQ模式下的PC为IRQ异常处理程序的中断入口向量地址0 4 将IRQ中断异常模式的栈顶指针保存到R13_irq中,之后软件处理程序调用中断服务程序为中断源服务。 5 * 从R13_irq中获取IRQ中断异常模式的栈顶指针。 1 3.8 ARM体系的异常 退出IRQ异常模式 R0~R12 R13_usr R14_usr R15 CPSR - R13_irq R14_irq SPSR_irq IRQ模式 USR模式 恢复CPSR 2 R14减4后为返回地址 3 ISR代码将寄存器出栈 1 将SPSR_irq中的内容复制到CPSR。 2 由于流水线的特性,将R14_irq指向的地址减去一个偏移量后存入R15(PC),实现指令为: SUBS PC,R14_irq,#4 3 中断服务程序执行完毕后,系统将通过以下几步软件操作返回用户模式: * 3.8 ARM体系的异常 快速中断请求异常 快速中断请求(FIQ)适用于对一个突发事件的快速响应,这得益于在ARM状态中,快中断模式有8个专用的寄存器可用来满足寄存器保护的需要(这可以加速上下文切换的速度)。 不管异常入口是来自ARM状态还是Thumb状态,FIQ处理程序都会通过执行下面的指令从中断返回: SUBS PC,R14_fiq,#4 在一个特权模式中,可以通过置位CPSR中的F位来禁止FIQ异常。 * 系统模式 FIQ模式 程 序 寄 存 器 组 FIQ中断的例子 “?”表示该位无关 SPSR_fiq PC CPSR SPSR MOD T F I . . . N Z C V SYS 1 0 0 . . . ? ? ? ? R8 ~ R12 R8_fiq ~ R12_fiq LR LR_sys LR_fiq R0~R7 SP_sys SP_fiq Thumb Thumb 指令1 指令2 指令3 BX指令 BX指令 ARM ARM SYS 1 0 0 . ? ? ? ? FIQ 0 1 1 . . . ? ? ? ? BackAddr JumpAddr Jump 1 0 SYS 1 0 0 . . . ? ? ? ? Jump BackAddr-4 Thumb不是一个完整的体系结构,不能指望处理器只执行Thumb指令而不支持ARM指令集。 因此,Thumb指令只需要支持通用功能,必要时可以借助于完善的ARM指令集,比如,所有异常自动进入ARM状态。 在系统模式下运行用户程序,当前处理器处于Thumb状态,执行Thumb指令代码,同时处理器还允许IRQ和FIQ中断。 指令1的在执行过程产

文档评论(0)

1亿VIP精品文档

相关文档