|
发表于 2007-12-27 17:48:28
|
显示全部楼层
以下摘自《AVR单片机嵌入式系统原理与应用实践》一书
=========================================================
17.1.3 JTAG口的使用与配置
40脚以上的AVR片内集成有一个符合IEEE 1149.1标准的JTAG接口。该JTAG接口实现了三个功能:生产过程中采用边界扫描功能对芯片进行检测;对芯片内部的非易失性存储器(Flash和EEPROM)、熔丝和锁定位进行编程;以及实现在片的实时仿真调试(On-chip debugging)。
一个JTAG端口,也就是JTAG术语中的检测访问端口(Test Access Port—TAP)需要占用4个AVR单片机的引脚。在ATmega16上,JTAG的4个端口与PC口中的4位使用相同的引脚(TDI/PC5、TDO/PC4、TMS/PC3和TCK/PC2),那么如果要使用JTAG口的功能的话,一旦设置JTAG接口处于使能状态,PC[5:2]就不能作为通常的I/O口使用了,这就意味者减少了可用的I/O口线。所以,用户应该根据实际的需要,正确设计、配置和使用JTAG口。
作为一般的用户,主要是将JTAG口用于程序下载和在片的实时仿真调试,本小节就这两种使用情况下的JTAG口的配置和使用的注意点做些说明。
1.JTAG口的控制
在ATmega16中,使用两个熔丝位(JTAG使能JTAGEN,OCD使能OCDEN)和MCUCSR寄存器中的JTD位对JTAG进行控制。其中JTD位可以由程序指令进行改变,而熔丝位则不能通过程序指令设置,只能采用编程下载方式修改。表17.1给出了3个控制位不同配置时的JTAG接口特性。
表17.1 JTAG口使能控制
JTAGEN OCDEN JTD LB2/LB1 PC[5:2]功能
1 x x x/x I/O
0 1 0 x/x JTAG(仅允许下载编程)
0 1 1 x/x I/O
0 0 0 1/1 JTAG(允许下载和在片调试)
0 0 1 x/x I/O
注:芯片出厂时JTAGEN=0,OCDEN=1
根据表17.1,用户应根据实际情况,先对相应的熔丝位进行正确的设置,然后在上电后的初始化程序中正确的改变JTD位的设置。注意:JTD控制位上电复位的初值是0,同时为了防止意外开启或关闭JTAG口,需要使用特定的指令操作时序对JTD进行设置:必须在四个时钟周期内对JTD位重复2次写入,才能将JTD标志位设置成所希望的值。
2.不使用在片实时仿真调试功能
如果不使用JTAG的实时在片仿真的调试功能,那么最好的选择就是使用SPI串口的编程下载方式,禁止掉JTAG口的所有功能。这样做的优点是,可以直接并可靠的使用PC[5:2]口的I/O功能,不必考虑JTD的设置和影响。此时只要先将熔丝位JTAGEN配置为1,禁止JTAG功能即可。
如必须使用JTAG口编程下载程序,不使用在片调试功能,通过下面的转换也能实现:
a)设置JTAGEN为0,OCDEN为1,仅使能JTAG口的编程功能。
b)用户程序应在上电后立即将JTD位设置为1,禁止JTAG口,开放PC[5:2]的I/O口功能。
这样,芯片在随后的运行中仍可将PC[5:2]作为I/O使用。
3.使用JTAG的在片调试功能
如果需要使用JTAG口的在片实时仿真调试功能,那么在硬件设计时不要将PC[5:2]与其它的器件连接,应保留它们作为调试专用接口。因为当JTAG口使能后,这4个引脚已经不具备通用I/O的功能了。
此时应设置JTAGEN为0,OCDEN为0,开放JTAG的全部功能。
总之,一旦使用了JTAG口,它就和PC[5:2]的I/O功能产生冲突和矛盾。如果一定要使用JTAG口(主要是考虑有些人依赖在片实时仿真调试手段),那么在系统设计时应尽量考虑不使用PC[5:2]的I/O功能,以损失4个引脚资源的代价,换取使用在片实时仿真调试的保留。
=================================
6.尽量减少对硬件在线实时仿真的依赖
在开发单片嵌入式系统的过程中,有许多人过分的依赖硬件在线实时仿真对系统进行调试,一旦离开了硬件在线仿真器,程序调试时就感觉无从下手。其实对内部有 FLASH 存贮器的单片机,不要硬件仿真器也能方便快速地调试程序,具体可以从以下几方面入手。

*尽量使用高级语言开发系统程序。
高级语言的结构性好,便于阅读理解,程序调试方便,比使用汇编语言有明显的优势。
*更多的使用软件模拟仿真环境。
现在许多单片机都提供软件模拟仿真环境,如AVR单片机就可以在ATMEL公司提供的AVR STUDIO开发平台的模拟仿真环境中进行软件的模拟调试。ATMEL的AVR STUDIO是一个开发AVR单片机的集成开发环境,其支持高级语言和汇编语言的源代码级软件模拟调试。在模拟仿真条件下调试算法、程序流程等可以说和硬件仿真机是没有区别的;而调试延时程序、计算一段程序运行所花的时间等方面,可以说比硬件仿真器更方便,因为许多硬件仿真机(如JTAG ICE)是无法提供程序运行时间等调试参数的。另外,对I/O端口、定时器、UART、中断响应等,在AVR STUDIO中均可实现模拟仿真,用户也可以采用软件的单步运行、设置断点等手段,分析内存和查看AVR中所有的硬件资源的数据以及使用情况。
*善用目标板上的硬件资源
在许多目标板上本身设计有系统所需要使用的LED、数码管、RS232等部件和接口,其实利用系统本身的部件和接口,也能实现和完成程序的调试开发。使用硬件仿真器的目的是要观察单片机内部的状态和数据,那么充分的利用这些原有的部件和接口,配合FLASH存贮器多次可擦写的特点,也可以实现观察单片机内部的数据和状态。
AVR单片机是支持ISP的FLASH单片机,开发时可以通过下载电缆将其和PC连成一个整体,在程序编译完后立刻下载到目标MCU中运行。在需要观察单片机内部状态时,可以程序的适当位置加入少部分代码,把MCU的内部状态和数据通过LED、数码管等显示出来。在有RS232通信接口的系统中,可以直接将需要观察的MCU内部状态送到PC机,在PC机上用串口调试器等一些超级终端来显示数据,帮助调试。现在大部分的开发环境本身就提供了超级终端,如ICC、CVAVR、BASC0M-AVR等。例如本书第16章中,就是利用USART串口作为调试手段,用于对I2C总线扩展的调试。
由于单片机采用了支持ISP的Flash技术,因此采用高级语言开发系统程序,更多的使用软件模拟仿真技术,加上使用串口RS-232输出调试数据,三者配合的开发调试手段和技术已成为开发单片机和嵌入式系统(如32位ARM的COMMAND调试手段等)的流行和高效的方法。
======================================== |
|