3.9异常 ·进入异常 在异常发生后,ARM7TDMI内核会作以下工作: 1.在适当的LR中保存下一条指令的地址,当异常入 口来自: ■ARM状态,那么ARM7TDMl将当前指令地址 加4或加8复制(取决于异常的类型)到LR中; ·为Thumb状态,那么,ARM7TDMl将当前指令 地址加4或加8(取决于异常的类型)复制到LR 中;异常处理器程序不必确定状态
3.9 异常 • 进入异常 在异常发生后,ARM7TDMI内核会作以下工作: 1.在适当的LR中保存下一条指令的地址,当异常入 口来自: ▪ARM状态,那么ARM7TDMI将当前指令地址 加4或加8复制(取决于异常的类型)到LR中; ▪为Thumb状态,那么ARM7TDMI将当前指令 地址加4或加8 (取决于异常的类型)复制到LR 中;异常处理器程序不必确定状态
3.9异常 ·进入异常 在异常发生后,ARM7TDMI内核会作以下工作: 2.将CPSR复制到适当的SPS中; 3.将CPSR模式位强制设置为与异常类型相对应的值; 4.强制PC从相关的异常向量处取指
3.9 异常 • 进入异常 在异常发生后,ARM7TDMI内核会作以下工作: 2.将CPSR复制到适当的SPSR中; 3. 将CPSR模式位强制设置为与异常类型相对应的值; 4.强制PC从相关的异常向量处取指
3.9异常 ·进入异常 ARM7TDMI内核在中断异常时置位中断禁止标 志,这样可以防止不受控制的异常嵌套。 注:异常总是在ARM状态中进行处理。当处理器处 于Thumb状态时发生了异常,在异常向量地址装入 PC时,会自动切换到ARM状态
ARM7TDMI内核在中断异常时置位中断禁止标 志,这样可以防止不受控制的异常嵌套。 注:异常总是在ARM状态中进行处理。当处理器处 于Thumb状态时发生了异常,在异常向量地址装入 PC时,会自动切换到ARM状态。 3.9 异常 • 进入异常
3.9异常 ·退出异常 当异常结束时,异常处理程序必须: 1.将LR中的值减去偏移量后存入PC,偏移量根据异 常的类型而有所不同; 2.将SPSR的值复制回CPSR; 3.清零在入口置位的中断禁止标志。 注:恢复CPSR的动作会将T、F和l位自动恢复为异 常发生前的值
当异常结束时,异常处理程序必须: 1.将LR中的值减去偏移量后存入PC,偏移量根据异 常的类型而有所不同; 2.将SPSR的值复制回CPSR; 3.清零在入口置位的中断禁止标志。 注:恢复CPSR的动作会将T、F和I位自动恢复为异 常发生前的值。 3.9 异常 • 退出异常
图示进入异常过程 2.用户程序运行时发生 系统模式 IRQ模式 IRG⑤序触运行 程序A RQ服务程序 确作程序,假定当前处理 ■粥状态?闲熔族入允 Jump I奶视式都PSR寄存器 ■置位l位(禁止IRQ中断) ■清零T位(进入ARM状态) ■设置M○D位,切换处理器 模式至IRQ模式 LR LR sys BackAddr ■将下一条指令的地址存入 寄存器 PC JumpAddr N ZC V MOD IRQ模式的LR寄存器 CPSR ???? .1?0 IRQ ■将跳转地址存入PC,实 SPSR PsYs 现跳转 ?”表示对该位不关心
程序A IRQ服务程序 系统模式 IRQ模式 程 序 寄 存 器 组 图示进入异常过程 1. 程序在系统模式下运行 用户程序,假定当前处理 器状态为Thumb状态、允 许IRQ中断; 2. 用户程序运行时发生 IRQ中断,硬件完成以下 动作: LR_sys SPSR_irq LR LR_irq PC CPSR SPSR ? ? ? ? . . . 0 ? 1 SYS N Z C V . . . I F T MOD ▪置位I位(禁止IRQ中断) ▪清零T位(进入ARM状态) ▪设置MOD位,切换处理器 模式至IRQ模式 ▪将下一条指令的地址存入 IRQ模式的LR寄存器 ▪将CPSR寄存器内容存入 IRQ模式的SPSR寄存器 ▪将跳转地址存入PC,实 现跳转 ? ? ? ? . . . 1 ? 0 IRQ BackAddr JumpAddr ????. . .0?1SYS “?”表示对该位不关心