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

📄 watchdog.cpp

📁 蓝宇BBPC-SOM2496嵌入式主板 看门狗编程实例代码与函数
💻 CPP
字号:
#include <dos.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "watchdog.h"

/***************************************************************************
使能看门狗:		EnableWDT
入口参数:	
返回值	:	VOID
****************************************************************************/
void EnableWDT(void)
{
	unsigned int WchCon;		
	WchCon=(
		(inport(CTL_OFF+OFFS_WCHDOGCON)|WCHDOG_EN)
		&(~WCHDOG_WRST)
		&(~WCHDOG_NMIFLAG)
		&(~WCHDOG_RSTFLAG)
		);
	outport(CTL_OFF+OFFS_WCHDOGCON, WCHDOG_CMD1);	/* Watch-dog Timer write sequence */
  	outport(CTL_OFF+OFFS_WCHDOGCON, WCHDOG_CMD2);	/* Watch-dog Timer write sequence */
  	outport(CTL_OFF+OFFS_WCHDOGCON, WchCon);	/* Enable Watch-dog timer */
	
}
/***************************************************************************
禁止看门狗:		DisableWDT
入口参数:	
返回值	:	VOID
****************************************************************************/
void DisableWDT(void)
{
	outport(CTL_OFF+OFFS_WCHDOGCON, WCHDOG_CMD1);	/* Watch-dog Timer write sequence */
  	outport(CTL_OFF+OFFS_WCHDOGCON, WCHDOG_CMD2);	/* Watch-dog Timer write sequence */
  	outport(CTL_OFF+OFFS_WCHDOGCON, 0x0000);	/* Disable Watch-dog timer */
}
/***************************************************************************
喂狗:		FeedWDT
入口参数:	
返回值	:	VOID
****************************************************************************/
void FeedWDT(void ) 
{	
     	outport(CTL_OFF+OFFS_WCHDOGCON, WCHDOG_RSTCMD1);	/* Watch-dog Timer reset sequence */
			outport(CTL_OFF+OFFS_WCHDOGCON, WCHDOG_RSTCMD2);	/* Watch-dog Timer reset sequence */
}
/***************************************************************************
设看门狗的时间间隔:SetWDT
入口参数:	Idan ;Idan设时间间隔,
-----------------------------------------------------------------------
参数:	0       1     2       3        4        5        6        7 

cpu主频:  
50  MHz 41   us 42 ms 83.8 ms 167.8 ms 335.5 ms 671   ms 1.34   s  2.68 s
75  MHz 27.3 us 28 ms 55.9 ms 111.8 ms 223.7 ms 447.4 ms 894.8  ms 1.79 s
100 MHz 20.5 us 21 ms 41.9 ms 83.9 ms  167.8 ms 335.5 ms 671    	ms  1.34 s

返回值	:	VOID
****************************************************************************/
void SetWDT(char Idan)
{
	unsigned int watcon=1;
	unsigned char far*pFarUchar;
	pFarUchar = (unsigned char  far *)MK_FP(0,LONG_TIME_WDOG_COUNT_ADR);
	*pFarUchar=0;	
	if(Idan>7)		/*超出表示最大时间间隔*/
		Idan=7;
	watcon<<=Idan;
 	outport(CTL_OFF+OFFS_WCHDOGCON, WCHDOG_CMD1);	/* Watch-dog Timer write sequence */
  	outport(CTL_OFF+OFFS_WCHDOGCON, WCHDOG_CMD2);	/* Watch-dog Timer write sequence */
  	outport(CTL_OFF+OFFS_WCHDOGCON, watcon);
  	return;	
}

/***************************************************************************
设长时间看门狗的时间间隔:SetLongTimeWDT
入口参数:	nCount ;nCount设时间间隔参数,
-----------------------------------------------------------------------

cpu主频:  
50  MHz 看门狗的时间= 2.68 s*nCount
75  MHz 看门狗的时间= 1.79 s*nCount
100 MHz 看门狗的时间= 1.34 s*nCount
返回值	:	VOID
****************************************************************************/
static unsigned char nCountStory=0;
void SetLongTimeWDT(unsigned char nCount)
{
	unsigned char far*pFarUchar;	
	SetWDT(7);
	nCountStory=nCount;	
	pFarUchar = (unsigned char  far *)MK_FP(0,LONG_TIME_WDOG_COUNT_ADR);
	*pFarUchar=nCount;
}

/***************************************************************************
喂狗:		FeedLongWDT
入口参数:	
返回值	:	VOID
****************************************************************************/
void FeedLongWDT(void ) 
{	
	unsigned char far*pFarUchar;
	pFarUchar = (unsigned char  far *)MK_FP(0,LONG_TIME_WDOG_COUNT_ADR);	
	*pFarUchar=nCountStory;
     	outport(CTL_OFF+OFFS_WCHDOGCON, WCHDOG_RSTCMD1);	/* Watch-dog Timer reset sequence */
	outport(CTL_OFF+OFFS_WCHDOGCON, WCHDOG_RSTCMD2);	/* Watch-dog Timer reset sequence */
}

/***************************************************************************
冷启动系统:
入口参数:	
返回值	:	VOID
****************************************************************************/
void  ColdResetSystem(void)
{
  
  /* enable watch dog to reset system */
  unsigned char far*pFarUchar;
  pFarUchar = (unsigned char  far *)MK_FP(0,LONG_TIME_WDOG_COUNT_ADR);
  *pFarUchar=0;	
  disable();
  outport(BIOS_PAGE_REG,0xff);
  outport(CTL_OFF+OFFS_WCHDOGCON, WCHDOG_CMD1);	/* Watch-dog Timer write sequence */
  outport(CTL_OFF+OFFS_WCHDOGCON, WCHDOG_CMD2);	/* Watch-dog Timer write sequence */
  outport(CTL_OFF+OFFS_WCHDOGCON, 0xC001);
  while(1);		//等看门狗超时
  enable();		//永远执行不到
}

⌨️ 快捷键说明

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