📄 watchdog.bak
字号:
#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 + -