首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 维修教程知识 > 单片机栏
一种嵌入式系统实现的JTAG调试器
来源:本站整理  作者:佚名  2009-11-05 11:09:30



    arm7TDMI寄存器和内存访问的实现

    边界扫描链分布在ARM7TDMI的32位数据总线的周围, arm7TDMI每次取指令或者进行数据存储时都要通过32位数据总线进行。这样, 通过边界扫描链1, 就可以插入新指令或者新数据, 同时也可以捕获出现在数据总线上的数据。通过这种方式, 可以检查和修改arm7TDMI的通用寄存器和系统内存。

    以读取寄存器R0 的值为例, 介绍边界扫描链1 的操作过程。

    读取寄存器R0的值可以用指令STR R0, [R0] ( 机器码为0xE5800000) 来实现。该指令可将寄存器R0 的值存储到内存单元R0中去。因为在ARM7TDMI处于调试状态时, ARM7TDMI和外部是隔离开的, 所以该指令实际上不能访问内存单元,也不会对内存单元产生任何影响。使用指令STR R0, [R0]可使得寄存器R0的值出现在数据总线上, 这样就可以通过扫描链1将其捕获,然后从TDO输出。指令STR R0, [R0]的执行需要两个指令执行周期。在第一个指令执行周期, 执行地址计算; 在第二个指令执行周期,将寄存器R0的值放到数据总线上去。对arm寄存器写操作及访问内存的方法与此类似,都是通过扫描链1, 只是所使用的指令不同而已。

    网络编程

    通过网络编程, 可以对目标系统实现远程调试。网络通信通过μClinux下的socket编程实现,首先PC(调试主机)通过网络向仿真器发送命令, 仿真器通过统一的程序接口分析调试命令, 并将调试命令转换成JTAG标准所要求的时序,通过I/O口线发送到目标板; 然后目标板执行命令,并将命令执行后得到的调试信息返回给仿真器, 接着仿真器将调试信息通过网络发送给PC,这样用户在PC上便得到了调试信息。

    JTAG调试器测试及部分执行结果

    本设计最终完成了一种在Linux终端下操作的JTAG调试器。调试器上电后便在μClinux 下自动运行调试器客户端程序, 同时在PC的Cygwin环境下运行JTAG调试器服务器端程序jtager , 建立网络连接。然后在Cygwin下键入用户调试命令, 执行下列操作: (1)写目标板上的CPU状态;(2)读写编址在统一内存空间的外部设备寄存器; (3)读写目标机上的RAM; (4)读写目标机上的固态存储设备, 如Flash;(5)对嵌入式ICE- RT进行调试。

    设计实现的调试器的用户命令较多, 下面仅列出两条典型命令IDCODE 和REG 执行后的结果。

    执行IDCODE命令后, 读出了一个基于S3C4510B的目标开发板内的CPUID号, 从而得到Device ID=0x1F0F0F0F.通过逻辑分析仪分析几个JTAG接口信号的时序关系, 可以观察到JTAG扫描连的访问过程以及该过程中各种状态的转移,结果与JTAG_调试原理吻合。

    执行RE命令后, 得到了寄存器R0~R15及CPSR内容, 即读出了目标开发板处理器S3C4510B在当前处理器模式下的所有寄存器值, 而且还可以通过其他命令对其进行修改。

    此外, 通过扫描链2可以访问嵌入式ICE- RT的17个宽度不同的内部调试寄存器, 通过这些寄存器使目标arm7TDMI分别进入调试状态的3种方式, 即控制DBGRQ信号、断点和观察点, 实现在线调试功能。

上一页  [1] [2] [3]  下一页

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)

推荐阅读

图文阅读

热门阅读

Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:143,339.80000 毫秒