wdt.c

来自「iar公司的s3c44b0x评估板的源程序」· C语言 代码 · 共 65 行

C
65
字号
/*
*******************************************************************************
*   HEADER FILES
*******************************************************************************
*/

#include "44b0.h"
#include "dm.h"

WDTContextT wdt;

static void StartTimer (WDTContextT *ctxP, UINT16 count)
{
	volatile WDTRegsT *wdtP = (WDTRegsT *)ctxP->regsP;
	wdtP->WTCNT = 0xffff;
	wdtP->WTDAT = 0xffff;
	wdtP->WTCON |= (1<<5);      // start
	return;
}

static UINT16 StopTimer (WDTContextT *ctxP)
{
	volatile WDTRegsT *wdtP = (WDTRegsT *)ctxP->regsP;
	wdtP->WTCON &= ~(1<<5);     // stop
	return wdtP->WTCNT;
}

static void WaitTimer (WDTContextT *ctxP, UINT16 ticks)
{
	volatile WDTRegsT *wdtP = (WDTRegsT *)ctxP->regsP;
	wdtP->WTCNT = 0xffff;
	wdtP->WTDAT = 0xffff;
	wdtP->WTCON |= (1<<5);      // start
	while (ticks > (0xffff - wdtP->WTCNT));
	wdtP->WTCON &= ~(1<<5);     // stop
	return;
}

static void SetupTimer (WDTContextT *ctxP, UINT8 prescale, UINT8 divider)
{
	volatile WDTRegsT *wdtP = (WDTRegsT *)ctxP->regsP;
	wdtP->WTCON = 0x0000;
	wdtP->WTCON = (prescale << 8) | (divider << 3);     // disable reset, disable interrupt
	return;
}

/*
*******************************************************************************
*   GLOBAL FUNCTIONS
*******************************************************************************
*/

void WDTSWInit (void)
{
    WDTContextT *ctxP = &wdt;

    ctxP->regsP     = (WDTRegsT *)WDTREG_BASE;
    ctxP->setup_fnp = (WDTSetup_T)SetupTimer;
    ctxP->start_fnp = (WDTStart_T)StartTimer;
    ctxP->stop_fnp  = (WDTStop_T)StopTimer;
    ctxP->wait_fnp  = (WDTWait_T)WaitTimer;

    return;
}

⌨️ 快捷键说明

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