19.08.2013 Views

ARM7TDMI-S(Rev 4)技术参考手册 - Read

ARM7TDMI-S(Rev 4)技术参考手册 - Read

ARM7TDMI-S(Rev 4)技术参考手册 - Read

SHOW MORE
SHOW LESS

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 同步器输出端的低电平

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!