chanfay 发表于 2007-5-24 15:22:22

M16的JTAG功能关闭后,是否就意味着下一次程序就不能通过JTAG仿真器烧写进去了?

如题,我使用的M16单片机,B口用作显示数据线,D口用作控制,A口取两口用作A/D转换,只好用C口作4X4的键盘扫描输入了,查了相关的帖子都说得把JTAG的功能关闭才能使能C口的正常I/O功能.我最关心的是,如果我把它关闭了,那是否就意味着我下次不能再通过串口JTAG仿真器往我的单片机里烧程序了?如果不能烧写的话,那我的单片机不就废了,我手头没有别的程序烧写工具了.

请各位高手给个详细的说明,先行谢过了.

在线等候.

chanfay 发表于 2007-5-24 15:26:54

我也看了数据手册,感觉要是关掉了JTAG功能,那就在我下次烧程序之前没机会把它改回来了,也就是下不了程序了,那这样一来,这几个口不就是给浪费掉了??

chanfay 发表于 2007-5-24 16:02:51

楼上的意思我没有弄懂....



意思是说没有了JTAG功能也可以用?这肯定是对的.我是怕一旦我禁用了这个功能后,以后就不能通过JTAG仿真器往里烧程序了,而我手头上又只有这个工具.

cnpollux 发表于 2007-5-24 16:16:38

我的理解:如果关闭了JTAG使能,则下次你JTAG连机都成问题,更别说下载程序了。禁止了JTAG可以使用ISP下载,不一定非要用JTAG烧写。

everglen 发表于 2007-5-24 16:51:34

同意4楼

binglin 发表于 2007-5-24 21:15:03

同意4楼,用ISP重开就可以了。

楼主,宁可没有JTAG,也不可没有ISP。



嘻嘻,我明天的JTAG及单线仿真就可以收到了,从此以后,我的JTAG仿真、单线仿真、ISP下载器都有齐了,爽。

ssyniuej 发表于 2007-5-25 16:53:02

楼上都没详细注意说明书里面的内容,你们只看到了JTAG要关闭,但没看到关闭的两种方式,用熔丝位关闭只是其中的一种方式,在这种方式下是没法再用JTAG了,如果想利用引脚功能,又想用JTAG功能,利用指令来关闭JTAG,这样就可以实现你们所要的功能,只是多一个操作了。程序工作后关闭JTAG(用指令),这样你怎么用引脚都可以了。但这样是会造成无法正常使用JTAG,所以要使用JTAG的时候,将芯片进入复位状态并保持,这时候就可以正常使用JTAG功能了。

chanfay 发表于 2007-5-25 16:54:09

汗,羡慕楼上的,我就这一个工具.本来I/O口就感觉不够用,用上A/D又少了8个口.

那看来我还是扩展下I/O吧,真的是晕.

chanfay 发表于 2007-5-25 16:54:20

汗,羡慕楼上的,我就这一个工具.本来I/O口就感觉不够用,用上A/D又少了8个口.

那看来我还是扩展下I/O吧,真的是晕.

谢谢楼上各位了.

yyw794 发表于 2007-5-26 09:59:29

使用MCUCSR=1<<JTD,就可以了。下次要用jtag时,复位端拉低电平2个时钟周期就可以了

ilymy 发表于 2007-5-26 11:50:20

jtag和isp只能互相关闭吧,自己能把自己关了?

chanfay 发表于 2007-5-28 14:08:51

http://cache.amobbs.com/bbs_upload782111/files_7/armok01155719.jpg

• Bit 7 – JTD: 禁止JTAG 接口

此位为0 时,如果JTAGEN 熔丝位被编程则JTAG 接口使能。如果这位为1, JTAG 接

口禁止。为了避免无意的禁止或使能JTAG 接口,必须通过一个时间序列来改变JTD 位。

应用软件必须在四个时钟周期内将期望的数值两次写入JTD。



结合楼上各位的帮助,我仔细看了下说明书.我的理解如下:

程序开始后执行:MCUCSR|=(1<<JTD);NOP();MCUCSR|=(1<<JTD);

是否就可以关闭JTAG的功能,而我想重启JTAG的功能,我只需将MCU复位,这样MCRCSR的JTD位又清零,就可以继续使用JTAG功能了.



以上理解是否正确?请各位朋友指点.

ssyniuej 发表于 2007-5-30 10:30:16

注意,中间的空指令不要加了,另外其实那个控制位不是被清零了,因为你直接复位后,程序就没有执行,当然不会禁用JTAG,你可以一直在复位状态下进行编程操作,完成后让复位去掉就可以正常工作了。完全不影响你的正常使用,只是多一步要自己手动复位而己。这个是我做过试验的,ISP和JTAG是独立的,另外我试验过程中不能停止复位,否则JTAG就会被禁用,所以十楼的说法不正确,因为JTAG完成后,如果不继续复位,程序就启动运行了,所以还会禁用JTAG。

bozai 发表于 2007-5-30 11:59:24

其实JTAG ICE有提供复位的功能,就是针对JTD被编程的。连接的时候提示失败,然后再那个对话框有一个选项是 激活外部复位的,这样JTAG ICE就会提供外部复位,把单片机复位的。 因此不需要手动去按复位的。



不过自己做的JTAG ICE很多电路图,很多人都没有接nRESET这个脚,都空在那。因此就没办法用这个功能。 所以这个脚应该接上。



具体接法是JTAG ICE的m16 的/SS脚 即PB4 接----|<|------到nReset 即JTAG接口的第6脚。这个二极管因该选1n5819之类的管子。

还有PD2也应该接nRESET, 这个脚应该是检测在仿真时目标版的意外复位。





另外这样写因该部可以禁止JTAG的吧

MCUCSR|=(1<<JTD);

MCUCSR|=(1<<JTD);



这样生成出来的汇编语句不止4个周期的,因该是这样比较好

unsigned char temp;

temp = MCUCSR | (1<<JTD);

MCUCSR = tmep;

MCUCSR = temp;

沐风野草 发表于 2013-4-10 19:36:02

这个问题跟编译器有关的不,我之前用IAR编译IO口可以正常使用,但是用ICC8编译后发现跟JTAG相关的四个IO口不能置低,所以我认为编译器里也有相关的设置可以关掉JTAG
页: [1]
查看完整版本: M16的JTAG功能关闭后,是否就意味着下一次程序就不能通过JTAG仿真器烧写进去了?