wei318525 发表于 2012-7-27 21:47:41

看门狗定时器问题,大家帮忙看看,谢谢

大家有谁对看门狗定时器有过研究的,帮我看看这个问题                                                               
看门狗作为间隔定时器使用
WDTCTL = WDT_MDLY_32;                                    
/* WDT is clocked by fSMCLK (assumed 1MHz) */
#define WDT_MDLY_32         (WDTPW+WDTTMSEL+WDTCNTCL)                         /* 32ms interval (default) */
#define WDT_MDLY_8          (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS0)                  /* 8ms   " */
#define WDT_MDLY_0_5      (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1)                  /* 0.5ms   " */
#define WDT_MDLY_0_064      (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1+WDT                                    
而我的子系统时钟SMCLK和辅助系统时钟ACLK均选用12M高频晶体振荡器    BCSCTL2 |= SELM_2 + SELS;   // MCLK = SMCLK = XT2 (12M)                           
这个时候SMCLK是12M,而看门狗定时器的时钟也是SMCLK,但要求是1M               
这个会出现矛盾,系统是怎么处理的                     

谢谢大家帮忙看看指导一下

主函数如下
#include"1602.c"

uchar *s1 = "wei32210130";
void Init_CPU()
{
    uchar i;
    WDTCTL = WDTPW+WDTHOLD;                   //关闭看门狗
   //所有的IO口为高电平
    P1DIR = 0XFF;P1OUT = 0XFF;
    P2DIR = 0XFF;P2OUT = 0XFF;
    P3DIR = 0XFF;P3OUT = 0XFF;
    P4DIR = 0XFF;P4OUT = 0XFF;
    P5DIR = 0XFF;P5OUT = 0XFF;
    P6DIR = 0XFF;P6OUT = 0XFF;
   
    BCSCTL1&=~XT2OFF;                        //清XT2失效标志
    do
    {
       IFG1=~OFIFG;                //等待晶振起振       
       for(i=0xff;i>0;i--);       
    }
    while(IFG1&OFIFG);                //晶振起振
    BCSCTL2 |= SELM_2 + SELS;   // MCLK = SMCLK = XT2 (12M)
    _EINT();

}

void main()
{
    Init_CPU();
    uchar i;
    WDTCTL = WDT_MDLY_32;                  //间隔定时器,定时32ms
    P6DIR |= BIT2;P6OUT |= BIT2;         //关闭电平转换
   
    LcdReset();
    DispStr(0,0,s1);
    LocateXY(0,9);                      //确定写入字符的显示位置
/*    LcdWriteCommand(0x07, 1);         //整体显示左移
    for(i = 12; i > 0; i--)
    {
      LcdWriteData(0x20);
      //延时250ms
      IFG1 &= ~WDTIFG;
      while(!(IFG1 & WDTIFG));
      IFG1 &= ~WDTIFG;
    }*/
    while(1)
    {
      LcdWriteCommand(0x05, 1);         //整体显示右移
      
      for(i = 24; i > 0; i--)
      {
            LcdWriteData(0x20);
            //延时250ms
            IFG1 &= ~WDTIFG;
            while(!(IFG1 & WDTIFG));
            IFG1 &= ~WDTIFG;
      }
   
      
      LcdWriteCommand(0x07, 1);         //整体显示左移
      
      for(i = 24; i > 0; i--)
      {
            LcdWriteData(0x20);
            //延时250ms
            IFG1 &= ~WDTIFG;
            while(!(IFG1 & WDTIFG));
            IFG1 &= ~WDTIFG;
      }
    }   

}

cooco369 发表于 2012-8-30 15:09:43

好东西,要定

peecehood 发表于 2012-10-8 13:50:35

assumed 1MHz
假如12MHz的话
32ms/12=2.6MS
建议改用ACLK
页: [1]
查看完整版本: 看门狗定时器问题,大家帮忙看看,谢谢