这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » R8C/1B的看门狗设置问题,程序总是进行复位,

共4条 1/1 1 跳转至

R8C/1B的看门狗设置问题,程序总是进行复位,

菜鸟
2008-07-03 17:48:43     打赏
R8C/1B的看门狗设置问题,程序总是进行复位,大家帮帮忙,看看问题出在哪?
开启了看门狗的话总是复位,去掉了就没事,不知道什么原因?
void initMCU()
{
  unsigned char i="0";
  asm("FCLR I");/                      /关中断
                                                     //将CPU时钟切换为主时钟20MHz
  prc0 = 1;                                    //解除对cm0,cm1,ocd寄存器的写保护
  cm13 = 1;                                 //接通 Xin-Xout
  cm15 = 1;                                 //Xin-Xout驱动能力:高
  cm05 = 0;                                 //Xin-Xout启动
  cm16 = 0;                                 //无分频模式
  cm17 = 0;
  cm06 = 0;                                //使CM16,CM17有效
  while(1)
            {                                            //等待主时钟振荡稳定
          if(!ocd3){
             if(i>=10) break;
           else ++i;
             }
      }
  ocd2 = 0;                                        //选择主时钟
  prc0 = 0;                                          //设定对cm0,cm1,ocd寄存器的写保护
  prc1=1;
        pm12=1;                                      //看门狗复位
        prc1=0;
        wdc7=1;                                       //128分频
       wdts=0xff;                                     //启动看门狗
        asm("FSET I");//开中断
  }



关键词: 看门狗     设置     问题     程序     总是     进行     复位    

助工
2008-07-04 09:21:55     打赏
2楼

光是你吃了,主程序里有没喂狗啊?喂狗也要时序的。


菜鸟
2008-07-04 10:48:49     打赏
3楼
不知道您的主程序里是否有喂狗?

另外,对您的程序我有以下建议:

等待主时钟振荡稳定那一部分,只需要等待5个时钟周期就可以了,没有必要使用While(1){}循环,因为一旦if 判断那段出错,系统就有可能陷入死循环.
建议用以下代码代替:
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");



菜鸟
2008-07-08 14:18:04     打赏
4楼
个人拙见:Walkersum兄的做法是判断OCD3位,如果主时钟振荡就跳出循环这中做法是可取的,但是bona说的对,用whille(1)就有些不妥,建议做如下修改:
unsigned int WaitCounter;
WaitCounter = 1000;
while(WaitCounter--)
{
     if(!ocd3)
         break;
}

共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]