main.c

来自「s3c2440的实验手册」· C语言 代码 · 共 98 行

C
98
字号
//看门狗的复位功能,超时没有喂狗会引起复位
#include "2440addr.h"
void watchdog_test(void) ;
extern void Uart_Printf(char *fmt,...);
extern void Uart_Init(int baud);

 void ClearPending(int bit);
void ClearSubPending(int bit);
unsigned f_ucSencondNo;

__irq void  watchdog_isr(void);


 
void Main(void)
 
{ 
 f_ucSencondNo=0;
 Uart_Init(115200); 
 Uart_Printf("watchdog test is beginning\n");   
 watchdog_test();

}




void watchdog_test(void) 
{
  
 /****************初始化************************/ 
 //建立WatchDog中断服务程序句柄
	pISR_WDT = (unsigned)watchdog_isr;
	
  //initialize interrupt registers 
	ClearPending(BIT_WDT_AC97);   
	ClearSubPending(BIT_WDT);	

 
  
 /***************启动看门狗*******************/
 
  //Prescaler value=100、clock division factor=128、PCLK=50M
  //t_watchdog=1/[PCLK/(Prescaler value+1)/Division_factor]=0.00025856 
  //disable watchdog 
  rWTCON=((prescaler_value<<8)|(clock_select<<3));   
  //看门狗时钟周期T=WTCNT*t_watchdog=3.8784S 
  //看门狗喂狗 
  rWTDAT=15000; 
  rWTCNT=15000; 
  rWTCON|=(1<<5)|(1<<2);   //使能WDT定时器和中断 


  //开中断 
  EnableIrq(BIT_WDT_AC97);
  EnableSubIrq(BIT_WDT);
  while(f_ucSencondNo<11);
  while(1) ;

 }
 
 
 
  
 void ClearPending(int bit)
{
	register i;
    rSRCPND &= ~bit; 
    rINTPND |= bit;
	i = rINTPND; 
}

void ClearSubPending(int bit)
{
	register i;
	rSUBSRCPND &= ~bit;	
	i = rINTPND;
} 


 __irq void  watchdog_isr(void)
{
	

	 f_ucSencondNo++;
	 if(f_ucSencondNo<11) 
  	 	Uart_Printf("%ds\n",f_ucSencondNo); 
    else 
    { 
    	
    	DisableIrq(BIT_WDT_AC97); 
    	DisableSubIrq(BIT_WDT);
    	Uart_Printf("watch dog is okooooo\n"); 
    }
	
	ClearPending(BIT_WDT_AC97);
	ClearSubPending(BIT_WDT);	  
}

⌨️ 快捷键说明

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