You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
广州周立功单片机发展有限公司 Tel (020)38730976 38730916 Fax 38730925 http //www.zlgmcu.com<br />
表 2-3 异常入口/出口<br />
异常或入口 返回指令 之前的状态<br />
ARM r14_x Thumb r14_x<br />
备注<br />
BL MOV PC,R14 PC+4 PC+2<br />
SWI MOVS PC,R14_svc PC+4 PC+2<br />
未定义的指令 MOVS PC,R14_und PC+4 PC+2<br />
预取指中止 SUBS PC,R14_abt,#4 PC+4 PC+4<br />
FIQ SUBS PC,R14_fiq,#4 PC+4 PC+4<br />
IRQ SUBS PC,R14_irq,#4 PC+4 PC+4<br />
- 15 -<br />
此处 PC 为 BL, SWI, 未定义的指<br />
令取指或者预取中止指令的地址<br />
此处 PC 为由于 FIQ 或 IRQ 占先而<br />
没有被执行的指令的地址<br />
数据中止 SUBS PC,R14_abt,#4 PC+8 PC+8 此处 PC 为产生数据中止的装载或<br />
保存指令的地址<br />
复位 无 复位时保存在 r14_svc 中的值不可<br />
预知<br />
2.9.2 进入异常<br />
进入异常<br />
当处理异常时 <strong>ARM7TDMI</strong>-S 内核会<br />
1. 在适当的 LR 中保存下一条指令的地址 当异常入口来自<br />
ARM状态<br />
于异常的类型<br />
<strong>ARM7TDMI</strong>-S 将下一条指令的地址复制到 LR 中 当前 PC+4 或 PC+8 取决<br />
Thumb 状态 <strong>ARM7TDMI</strong>-S 将 PC 加偏移值 PC+4 或 PC+8 取决于异常的类型 写入 LR<br />
当进入异常时 异常处理程序不必确定状态 例如在 SWI 情况下 MOVS PC,r14_svc 总是返回<br />
到下一条指令 而不管 SWI 是在 ARM 还是在 Thumb 状态下执行<br />
2. 将 CPSR 复制到适当的 SPSR<br />
3. 根据异常将 CPSR 模式强制设为某一值<br />
4. 强制 PC 从相关的异常向量处对下一条指令取指<br />
<strong>ARM7TDMI</strong>-S 内核在中断异常时置位中断禁止标志 这样可防止不受控制的异常嵌套<br />
注 异常总是在 ARM 状态中进行处理 当处理器处于 Thumb 状态时发生了异常 在异常向量地址装<br />
入 PC 时 会自动切换到 ARM 状态<br />
2.9.3 退出异常<br />
退出异常<br />
当异常结束时 异常处理程序必须<br />
1. 将 LR 中的值减去偏移量后移入 PC 偏移量根据异常的类型而有所不同 见表 2-3<br />
2. 将 SPSR 的值复制回 CPSR<br />
3. 清零在入口置位的中断禁止标志<br />
注 恢复 CPSR 的动作会将 T, F 和 I 位自动恢复为异常发生前的值<br />
2.9.4 快速中断请求<br />
快速中断请求<br />
快速中断请求(FIQ)异常支持数据转移或通道处理 在 ARM 状态中 FIQ 模式有 8 个专用的寄存器可<br />
用来满足寄存器保护的需要 这是上下文切换的最小开销<br />
将 nFIQ 信号拉低可实现外部产生 FIQ<br />
不管异常入口是来自 ARM 状态还是 Thumb 状态 FIQ 处理程序都会通过执行下面的指令从中断返回<br />
SUBS PC,R14_fiq,#4<br />
在一个特权模式中 可通过置位 CPSR 中的 F 标志来禁止 FIQ 异常 当 F 标志清零时 <strong>ARM7TDMI</strong>-S<br />
在每条指令结束时检测 FIQ 同步器输出端的低电平