⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 watchdog.c

📁 S3C2410学习的基础资料 大部分实验源码及工程
💻 C
字号:
#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();
	while(1);	
}

/**********************************
		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 一次中断。
   
  //设置watchdog为IRQ中断模式
  rINTMOD&=0xFFFFFDFF;
  //开中断
  EnableIrq(BIT_WDT);
  
  while(f_ucSencondNo<11);
 }

/****  watchdog_int  ****/
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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -