原创 manymany-2440裸机篇之6 看门狗

2009-6-8 00:35 4033 4 6 分类: MCU/ 嵌入式

//***************************************************
//manymany-2440裸机篇之6 看门狗icon
//***************************************************
//目的:掌握看门狗的使用和设计,
//***************************************************

//看门狗的作用在于:防止系统跑飞,提高系统稳定性,
//故而必要时需要一条小狗看家。icon

//***************************************************
//Designed by: http://blog.ednchina.com/Manymany/
//2009-05-20
//**********************************************************


//看门狗工作原理:
//设本系统程序完整运行一周期的时间是Tp,看门狗的定时周期为Ti,
//Ti>Tp,在程序正常运行时,定时器就不会溢出,若由于干扰等原因
//使系统不能在Tp时刻修改定时器的记数值,定时器将在Ti时刻溢出,
//引发系统复位,使系统得以重新运行,从而起到监控的作用。
//**********************************************************
//看门狗设计步骤:
//1,设置看门狗中断操作,包括全局中断操作和看门狗中断的使
//      能,看门狗中断向量的定义。
//2,对看门狗控制寄存器WTCON设置,包括设置预分频比例因子,
//      分频器的分频值,中断使能,复位使能。
//3,喂狗,即对WTDAT看门狗数据寄存器和WTCNT看门狗计数寄存器的设置。
//4,启动看门狗。
//**********************************************************

#include "2440addr.h"
#include "2440lib.h"
void watchdog_timer(void);
void watchdog_reset(void);
void __irq Watchdog_ISR(void);


       //复位次数
int count="0";


void xmain(void)
{
 ChangeClockDivider(3,1);
 ChangeMPllValue(127,2,1);  //405MHZ
 Isr_Init();
 
 /*看门狗定时器用于系统出错时复位,如果不想重启处理器,那么看门狗定时器禁用,
   如果想使用看门狗定时器提供正常的定时功能,需使用看门狗中断和看门狗定时器*/

 watchdog_timer();       //看门狗定时器函数
  //watchdog_reset();    //看门狗复位函数
     
}
//*********************************************
                 
//看门狗定时器函数
void watchdog_timer(void)
{
           //清WatchDog中断寄存器
  rSRCPND |=BIT_WDT_AC97;
  rINTPND |=BIT_WDT_AC97;
  rSUBSRCPND |= BIT_SUB_WDT; 
  
                 //建立WatchDog中断
  pISR_WDT_AC97=(unsigned)Watchdog_ISR;
 
      //预分频值=100;时钟除数因子=128 ;PCLK=67.5MHz
      //每个定时器时钟周期t_watchdog=1/[PCLK/(预分频值+1)/时钟除数因子]
      //                            =1/[67.5*1000000/(100+1)/128]=0.0002
      //不允许中断
  rWTCON=((100<<8)|(3<<3));
  
          //看门狗喂狗
  rWTDAT="20000";   //WTDAT看门狗数据寄存器,看门狗定时器重载的计数值
  rWTCNT="20000";   //WTCNT看门狗计数寄存器,看门狗定时器当前计数值
                //看门狗时钟中断周期T=WTCNT*t_watchdog=4S
  rWTCON &= ~(3);   //不允许复位
 
  rWTCON |= ((1<<5)|(1<<2));    //允许看门狗定时器和允许中断产生


           //开中断
  rINTMSK &= ~(BIT_WDT_AC97);
  rINTSUBMSK &= ~(BIT_SUB_WDT);
  while(count<11);
 }
//****************************************
     //WatchDog中断
void __irq Watchdog_ISR(void)
{
 
  if(rSUBSRCPND & ~ BIT_SUB_WDT)
  {            //清除中断
      rSUBSRCPND |=(BIT_SUB_WDT);   //清除一级源中断指示寄存器相应位
      rSRCPND |= BIT_WDT_AC97;
      rINTPND |= BIT_WDT_AC97;           //清除源中断指示寄存器相应位
      count++;          //复位次数自加
 
      if(count<11)  ;   //判断复位次数
      else
      {
                     //屏蔽看门狗中断
          rINTSUBMSK |= (BIT_SUB_WDT);    //屏蔽看门狗相应中断位
          rINTMSK |= (BIT_WDT_AC97);
      }
  }


  if(rSUBSRCPND & ~ BIT_SUB_AC97)
  {
       rSUBSRCPND |=BIT_SUB_AC97; 
       rSRCPND |= BIT_WDT_AC97;
       rINTPND |= BIT_WDT_AC97;       //清除源中断指示寄存器相应位
  }
}
//*****************************************
/*以下是需要复位时选用!!
void watchdog_reset(void)      //看门狗复位函数
{
 
             //预分频值=100;时钟除数因子=128 ;PCLK=67.5MHz
             //每个定时器时钟周期t_watchdog=1/[PCLK/(预分频值+1)/时钟除数因子]
             //                            =1/[67.5*1000000/(100+1)/128]=0.0002
             //不允许中断
  rWTCON=((100<<8)|(3<<3));
 
            //看门狗时钟周期T=WTCNT*t_watchdog=4S
            //看门狗喂狗
  rWTDAT="20000";
  rWTCNT="20000";
 
  rWTCON &= ~(3<<1);    //禁止看门狗中断
 
  rWTCON|=((1<<5)|(1<<0));   //允许看门狗定时,允许复位
  while(1);
}
*/


//在这里是整个工程文件压缩https://static.assets-stash.eet-china.com/album/old-resources/2009/5/23/370afd98-f54c-4291-a5dd-59c4531ffd8d.rar在系统要求比较高的情况下,添加一个看门狗可以大大提高系统稳定性,这的确不错。iconiconicon

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户283045 2010-1-27 15:50

该程序测试后发现,看门狗好像不运转。再学习

用户9442 2009-7-7 13:16

看了楼主这些日记,受益非浅,真是太感谢了!
相关推荐阅读
用户188963 2009-08-28 16:56
我来猜09年全国电赛小车的题目
我来猜09年全国电赛小车的题目 小车+无线收发模块+2米卷尺+光电传感器+继电器 1.无线模块用来设置小车的行驶轨迹,圆的,方的,任意轨迹的。2.2米卷尺和光电传感器:小车行驶速度,距离。3.壁障4....
用户188963 2009-07-20 09:39
manymany-2440裸机篇之8 ADC模数转换
//manymany-2440裸机篇之8 ADC模数转换//***************************************************//为了对温度,压力,流量,速度,位移...
用户188963 2009-06-08 00:36
manymany-2440裸机篇之开篇
                              manymany-2440裸机篇之开篇          manymany前段时间买了块广州友善之臂的mini2440开发板,现在想学习AR...
用户188963 2009-06-08 00:36
manymany-2440裸机篇之1 流水灯与蜂鸣器
//***************************************************//manymany-2440裸机篇之流水灯与蜂鸣器//*******************...
用户188963 2009-06-08 00:36
manymany-2440裸机篇之2 下载与调试
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />玩裸机的时候,肯定要用到下载与调试,...
用户188963 2009-06-08 00:36
manymany-2440裸机篇之3 按键点亮LED
//***************************************************//manymany-2440裸机篇之3 按键点亮LED//*****************...
我要评论
2
4
关闭 站长推荐上一条 /3 下一条