搜索
bottom↓
回复: 2

求助!程序要求启动必须读JTAG对应IO口的电平高低,但是JTAG调试时对应IO口不可读,这时如

[复制链接]

出0入0汤圆

发表于 2007-12-27 14:10:20 | 显示全部楼层 |阅读模式
我使用Atmega16单片机,40脚直插,由于硬件要求,PC口直接链接了8位拨码器。




我的程序启动时必须先读取PC口的8位端口,也就是先读取拨码器,来判断我需执行的功能。现在我又从PC的PC2-PC5跳线引出JTAG口进行调试,进行JTAG调试时,我知道PC2-PC5这4个IO不可当普通IO用,当调试时确实发现,读取PC口电平时,PC2-PC5这4个IO始终为0,也就是执行
语句:
....
void main(void)
{static char A=0;
..
DDRC=0X00;
A=PINC;
.....
}
始终发现A的二进制值为“**0000**”,(*表示0或者1,根据外部拨码器决定)

请问:
1,如果我拔掉JTAG调试接口,此时已经通过JTAG口将程序下载到了单片机,单片机上电运行,当单片机执行到“A=PINC;”这句话时,A的值会是“**0000**”?还是A的值是8位拨码器的值,也就是A等于“********”其中*是0或者1由拨码器决定?
2,我的目的就是通过8位PC口去读取8位拨码器的值,但是我需要通过JTAG下载程序,照理PC是可以做普通IO口用的,但是我看到说明上说JTAG口使能时,PC2-PC5不能当IO口用,是不是我需要在寄存器中设置JTAG口不使能,才能用PC口去读拨码器?
3,是不是我需要设置熔丝位,使得只可以使用JTAG口下载程序,但是不影响IO口读数据?

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2007-12-27 14:11:11 | 显示全部楼层
请求帮助,谢谢

出0入0汤圆

发表于 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调试手段等)的流行和高效的方法。

========================================
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-18 16:07

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表