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 />
在决定当前寄存器组的值之后 您可能想要访问分组的寄存器 那么您必须改变模式 通常 模式的<br />
改变只能在内核处于特权模式时才会发生 不过当处于调试状态时 一个模式可以改变到任何其它模式<br />
调试器在退出调试状态时必须恢复初始的模式 例如 如果要求调试器返回用户模式寄存器和 FIQ 模<br />
式寄存器的状态 并在超级用户模式下进入调试状态 指令序列如下<br />
STM R0,{R0-R15}<br />
MRS R0,CPSR<br />
;保存当前寄存器<br />
STR R0,R0 ;保存 CPSR 以决定当前模式<br />
BIC R0,0x1F ;清零模式位<br />
ORR R0,0x10 ;选择用户模式<br />
MSR CPSR,R0 ;进入用户模式<br />
STM R0,{R13,R14} ;保存之前不可见的寄存器<br />
ORR R0,0x01 ;选择 FIQ 模式<br />
MSR CPSR,R0 ;进入 FIQ 模式<br />
STM R0,{R8-R14} ;保存分组 FIQ 寄存器<br />
所有这些指令都以调试速度执行 调试速度远远低于系统速度 这是因为在每个内核时钟之间产生了<br />
33 个时钟来移位指令或数据 对于访问内核状态来说 这样低的访问速度是可以接受的 因为 <strong>ARM7TDMI</strong>-S<br />
处理器是全静态的 但是您不能使用该模式决定系统复位的状态<br />
当处于调试状态时 只有下面的指令才能被扫描到指令流水线执行<br />
所有的数据处理操作<br />
所有装载 保存 多路装载和多路保存指令<br />
MSR 和 MRS<br />
5.16.2 决定系统状态<br />
决定系统状态<br />
为了符合存储器系统的动态时序要求 任何对系统状态的访问都必须在 CLKEN 所限定的时钟下产生<br />
为了执行存储器访问<br />
bit33 控制<br />
CLKEN 必须强制 <strong>ARM7TDMI</strong>-S 处理器运行在正常操作模式下 这由扫描链 1 的<br />
当扫描链 1 的 bit33 位 DBGBREAK 为低时 放置在扫描链 1 当中的指令以调试速度执行 要使指令<br />
以系统速度执行 必须在 DBGBREAK 为高时将指令扫描到扫描链 1 当中<br />
在系统速度指令被扫描到数据总线并进入流水线之后 必须将 RESTART 指令装入 TAP 控制器<br />
RESTART 使 <strong>ARM7TDMI</strong>-S 处理器产生下列动作<br />
1. 自动切换到 CLKEN 控制<br />
2. 以系统速度执行指令<br />
3. 重入调试状态<br />
当执行执行完毕时<br />
INTEST 并恢复调试<br />
DBGACK 为高 内核返回到 DBGTCKEN 控制 现在可以选择 TAP 控制器中的<br />
调试器必须观察 DBGACK 和 TRANS[1:0]以确定系统速度指令是否执行完毕 为了访问存储器<br />
<strong>ARM7TDMI</strong>-S 内核在它与系统速度取得同步之后将 TRANS[1:0]都置低 这一跳变供存储器控制器仲裁<br />
<strong>ARM7TDMI</strong>-S 内核在下一个周期是否可以拥有总线 如果总线不可用 <strong>ARM7TDMI</strong>-S 处理器可以无限停<br />
止其时钟 确定存储器访问是否结束的唯一方法是检查 TRANS[1:0]和 DBGACK 的状态 当它们都为高电<br />
平时表示访问已经结束<br />
调试器通常使用 EmbeddedICE-RT 来控制调试 这样 TRANS[1:0]和 DBGACK 的状态可以通过读取<br />
EmbeddedICE-RT 状态寄存器来确定 详见调试状态寄存器一节<br />
系统存储器的状态可以通过使用系统速度多路装载和调试速度多路存储反馈到调试主机<br />
对在 bit33 置位时可以执行那些指令有一些限制 下面是在置位 bit33 时的有效指令<br />
- 51 -