ARM之看门狗

来源:互联网 发布:mac镜像安装方法 编辑:程序博客网 时间:2024/05/16 17:57

看门狗(watchdog)包括一个4分频的预分频器和一个32位的计数器,时钟通过预分频器输入定时器。定时器递减计数,递减的最小值为0XFF。如果设置一个小于0XFF的值,系统会将0XFF装入计数器,因此最小看门狗间隔为t(pclk)X256X4。
  

 看门狗的用途是使微控制器在进入错误状态后的一定时间内复位。当看门狗使能时,如果用户程序没有在周期时间内喂狗(重装),看门狗会产生一个系统复位。
    看门狗的特性如下:
1.如果没有周期性重装,则产生片内复位。
2.调试模式。
3.由软件使能,但要求禁止硬件复位或看门狗复位/中断~。
4.错误/不完整的喂狗时序会导致复位/中断(如果使能)。
5.指示看门狗复位的标志。
6.带内部预分频器的可编程32位定时器。
7.可选择t(pclk)X4的倍数的时间周期。

基本操作:看门狗应当根据下面的方法来使用
1.在WDTC寄存器中设置看门狗定时器的固定装载值;
2.在WDMOD寄存器中设置模式;
3.通过向WDFEED寄存器顺序写入0XAA和0X55启动看门狗;
4.在看门狗向下溢出之前应当再次喂狗,以防止复位/中断~!
当看门狗计数器想下溢出时,程序计数器将从0x00000000开始,和外部复位一样。可以检查看门狗超时标志WDTOF来确定看门狗是否产生复位条件,WDTOF标志必须由软件清零。


基础实验:
1.看门狗溢出复位实验:
由于LPC复位后执行FLASH内的代码,因而需将程序写入FLASH中,即在ADS中选择DebugInFlash或者RelInFlash。正常情况下,周期喂狗,防止看门狗溢出,当意外情况发生,喂狗周期被打断,超过WDTC设定的时间,看门狗将回溢出并产生复位,发生WDT复位后,程序判断看门狗溢出标志是否已被清楚,若没有被清除,则蜂鸣器鸣叫报警。
2.看门狗溢出产生内中断实验:
看门狗使能后,需要程序在规定周期内重新喂狗,否则会产生看门狗溢出。看门狗溢出能产生中断或者复位,具体由用户程序决定。程序使能看门狗,设定看门狗溢出时间值,并且设定WDMOD为溢出产生中断,PS:看门狗超时中断只能通过禁止VIC中断的方式返回!

 

void delay(int nTime)
{
      // time=0: adjust the Delay function by WatchDog timer.
      // time>0: the number of loop time
      // resolution of time is 100us.
    int i,adjust=0;
    if(nTime==0)
    {
        nTime   = 200;
        adjust = 1;
        delayLoopCount = 400;
  //PCLK/1M,Watch-dog disable,1/64,interrupt disable,reset disable
        rWTCON = ((PCLK/1000000-1)<<8)|(2<<3);
        rWTDAT = 0xffff;                              //for first update
        rWTCNT = 0xffff;                              //resolution=64us @any PCLK
        rWTCON = ((PCLK/1000000-1)<<8)|(2<<3)|(1<<5); //Watch-dog timer start
    }
    for(;nTime>0;nTime--)
        for(i=0;i<delayLoopCount;i++);
    if(adjust==1)
    {
        rWTCON = ((PCLK/1000000-1)<<8)|(2<<3);   //Watch-dog timer stop
        i = 0xffff - rWTCNT;                     //1count->64us, 200*400 cycle runtime = 64*i us
        delayLoopCount = 8000000/(i*64);         //200*400:64*i=1*x:100 -> x=80000*100/(64*i)  
    }
}