watchdog.c

来自「某培训中心的实验代码」· C语言 代码 · 共 78 行

C
78
字号
#include "2410addr.h"
#include "2410lib.h"
void watchdog_test(void);
void __irq watchdog_int(void);

//复位次数
int f_ucSencondNo=0;

/*************************************************
Function name: Main
Parameter    : void
Description	 : 主功能函数
Return		 : void
Argument     : void
Autor & date :
**************************************************/
int Main(void)
{	
	 ChangeClockDivider(1,1);
     ChangeMPllValue(0xa1,0x3,0x1);   
     Port_Init();
     Uart_Select(0);
     Uart_Init(0,115200);
	Uart_Printf("watchdog test is beginning\n");
	
	watchdog_test();
}

/**********************************
		watchdog_init
watchdog interrupt service routine
************************************/ 
void watchdog_test(void)
{
  //initialize interrupt registers
  ClearPending(BIT_WDT);
 
  //建立WatchDog中断
  pISR_WDT=(unsigned)watchdog_int;
  
  //Prescaler value=100、clock division factor=128
  //t_watchdog=1/[PCLK/(Prescaler value+1)/Division_factor]=0.00025856
  //disable watchdog
  rWTCON=((100<<8)|(3<<3)); 
  
  //看门狗时钟周期T=WTCNT*t_watchdog=4S
  //看门狗喂狗
  rWTDAT=15000;
  rWTCNT=15000;
  rWTCON|=((1<<5)|(1<<2));//enable Watchdog timer ang watchdog interrupt
  
  //rWTCON|=((1<<5)|(1<<2)|1);//watchdog 复位,时间间隔为4S。
  rWTCON|=(1<<5)|(1<<2);//每4S watchdog 一次中断。
    

  //开中断
  EnableIrq(BIT_WDT);
  
  while(f_ucSencondNo<11);
 }

/****  watchdog_init  ****/
void __irq watchdog_int(void)
{
  //清除中断
  ClearPending(BIT_WDT);
  f_ucSencondNo++;
  
  if(f_ucSencondNo<11)
  Uart_Printf("%ds",f_ucSencondNo);
  else
  {
    //mask watchdog timer interrupt
    DisableIrq(BIT_WDT);
    Uart_Printf("watch dog is ok\n");
  }
  
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?