打印
[AVR单片机]

急!ATMEGA128的JTAG和PF口使用问题

[复制链接]
3313|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yw912|  楼主 | 2013-12-19 09:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教,我使用ATMEGA128单片机,PF4-PF7做按键扫描脚,JTAG也使用了PF4-PF7脚,熔丝位的JTAGEN使能,OCDEN        禁止,然后程序开始运行时置位JTD,关闭JTAG,但是JTD不能置1,PF4-PF7不能用做IO口,程序如下
void JTAG_Disable(void)
{
    unsigned char temp = 0;
    temp = MCUCSR | (1 << JTD);
    MCUCSR = temp;
    MCUCSR = temp;
}

//-------------------------------------------
void SysInit()
{
        JTAG_Disable();
        DDRA = 0xff;//PA3,PA4,PA6,PA7设置为输出
        PORTA = 0xff;
        DDRB = (1 << RS) | (1 << RW) | (1 << EN) | (1 << LCDRESET);
        PORTB= 0xff;
        DDRD = (1 << LCDCS1) | (1 << LCDCS2) | (1 << SDAT) | (1 << SCLT);
        DDRD &=~( (1 << KEY2) | (1 << KEY9));
        PORTD = 0xff;
        DDRG = (1 << LCDLED) | (1 << BEEP)| (1 << FLASHALE)| (1 << FLASHWE) | (1 << FLASHOE);
        PORTG = 0xff;
        DDRE = (1 << FLASH_CS) | (1 << KEY7);
        DDRE &=~( (1 << KEY6) | (1 << KEY8));
        PORTE = 0xff;
        DDRF = (1 << A16) | (1 << A17)| (1 << A18) | (1 << KEY1) | (1 << KEY3)| (1 << KEY5);
        DDRF &= ~(1 << KEY4);
        PORTF = 0xff;

       
       
        UCSR0B = 0x00; //disable while setting baud rate   //UART0 INIT
             UCSR0A = 0x00;
             UCSR0C =(1<<UCSZ01)|(1<<UCSZ00);//8bit+1bit stop
             UBRR0L=71;
             UBRR0H=0;
             UCSR0B =(1 << RXCIE) |(1<<RXEN0)|(1<<TXEN0);//RXCEN TXCEN 接收中断使能

        UCSR1B = 0x00; //disable while setting baud rate  //UART1 INIT
       UCSR1A = 0x00;
       UCSR1C = (1<<UCSZ11)|(1<<UCSZ10);//8bit+1bit stop
       UBRR1L=71;
       UBRR1H=0;
       UCSR1B =(1 << RXCIE1) | (1<<RXEN1)|(1<<TXEN1);//RXCEN TXCEN 接收中断使能

       
        CLR_FLASHALE;
        SET_FLASHWE;
        SET_FLASHOE;

        TCCR0=0x07;                                      //普通模式,OC0不输出,1024分频
       TCNT0=147;                                    //初值,定时为10ms
       TIFR=0x01;                                       //清中断标志位
       TIMSK=0x01;                                      //使能定时器0溢出中断

        EICRB = 0x80;//INT7下降沿中断
        EIMSK = 0x80;//打开外部中断7

        cli();
        wdt_disable();//调用WDT.H的函数才可以初始化看门狗,直接写WDTCR,不能分频
        wdt_enable(WDTO_2S);
       
        sei();


}
JTD到底应该怎么关闭,哪位能指点下

相关帖子

沙发
huangxz| | 2013-12-19 15:13 | 只看该作者
要使用PORTF4...7,必须将jtagen(熔丝位)关闭。

使用特权

评论回复
评分
参与人数 1威望 +6 收起 理由
qin552011373 + 6 赞一个!
板凳
qin552011373| | 2013-12-20 08:45 | 只看该作者
仔细看看datasheet

使用特权

评论回复
地板
yw912|  楼主 | 2013-12-20 09:52 | 只看该作者
资料写jtagen(熔丝位)使能,程序里把JTD置1,可以关闭JTAG,PORTF4-7就可以做IO口了

使用特权

评论回复
5
huangxz| | 2013-12-20 13:44 | 只看该作者
楼主再仔细看看,JTD为1只是禁止jtag,而并不会使pf4..7作为普通io口

当这一位为'0’,且JTAG使能熔丝位JTAGEN被编程时JTAG接口使能;否则JTAG接
口功能禁止。为了防止无意改变JTAG接口的工作状态,需要遵守如下时间限制:在四个
时钟周期之内对这个位两次写入需要的数据。
若JTAG接口未与其他JTAG电路连接,JTD位应置为’1’ ,以避免JTAG接口TDO引
脚的静态电流。

使用特权

评论回复
6
yw912|  楼主 | 2013-12-20 14:34 | 只看该作者
那就是说必须要把jtagen(熔丝位)关闭,用ISP烧录了?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

21

帖子

1

粉丝