昨天崔说有一个ATmega32的核心板,在程序中PC口配置为输出且输出低电平的时候,在板子上实际测试还是高电平,且这写IO口输出端未接任何外设,不会受到外界电压影响。我让他置位JTD试试结果他说单纯置位JTD没效果,重新启动之后读MCUCSR寄存器的话JTD还是0。后来又修改了JTAGEN熔丝位这个问题才得到了解决。我不知道他是否按照下面的说法在四个周期内两次写操作JTD,所以无法确定是否单独修改JTD真的无法禁掉JTAG,还是必须要置位JTD和修改JTAGEN双管齐下,留待下次有板子了验证。。。
今天特地查了一下ATmega32的数据手册,总结一下JTAG和PC口复用的一些东西吧。
对于AVR系列的单片机,很多芯片都具备了JTAG接口,比如ATmega16,ATmega32,ATmega64等(除了ATmega8),而且JTAG口通常都是和PC口复用的。
在ATmega32的手册中有如下描述:若JTAG接口使能,即使出现复位,引脚PC5(TDI)、PC3(TMS) 与PC2(TCK) 的上拉电阻将被激活。通过置位MCUCSR寄存器的JTD或不对JTAG熔丝位编程可以禁止JTAG接口。
MCUCSR寄存器中的JTD位有如下说明:
此位为0时,如果JTAGEN熔丝位被编程则JTAG接口使能。如果这位为1,JTAG接口禁止。为了避免无意的禁止或使能 JTAG 接口,必须通过一个时间序列来改变JTD 位。应用软件必须在四个时钟周期内将期望的数值两次写入JTD。
此外还有两点需要注意的:
1、如果JTAG接口没有与其他JTAG电路连接,JTD应该置位。这样做的原因是为了避免JTAG接口TDO引脚的静态电流,因此可以减小系统的功耗尤其是休眠模式下的功耗。
1、如果JTAG接口没有与其他JTAG电路连接,JTD应该置位。这样做的原因是为了避免JTAG接口TDO引脚的静态电流,因此可以减小系统的功耗尤其是休眠模式下的功耗。
2、必须对JTAGEN熔丝位进行编程才能使能JTAG测试访问端口。此外还必须编程熔丝位OCDEN,并保持所有的锁定位处于非锁定状态,才能真正使片上调试系统工作。
No comments:
Post a Comment