📄 hw_watchdog.c
字号:
/******************************************************************/
/* Copyright (C) 2007 ROCK-CHIPS FUZHOU . All Rights Reserved. */
/*******************************************************************
File : watchdog.c
Desc : watchdog接口函数的实现
Author : huangxinyu
Date : 2007-05-31
Notes :
$Log: hw_watchdog.c,v $
Revision 1.2 2008/06/19 04:43:37 Administrator
代码整理!
Revision 1.1.1.1 2008/05/07 04:15:08 Administrator
no message
Revision 1.1.1.1 2008/03/06 13:29:08 Lingzhaojun
no message
Revision 1.7 2008/01/07 12:52:21 Huangshilin
no message
Revision 1.6 2007/12/06 05:16:23 Huangshilin
增加 视频静态buffer和GUI 复用.修改窗口系统.
Revision 1.5 2007/11/10 04:32:05 Huangxinyu
调试修改
Revision 1.4 2007/10/08 02:38:51 Lingzhaojun
添加版本自动注释脚本
* huangxinyu 2007-06-01 修改watchdog接口名称
*********************************************************************/
#include "hw_include.h"
#include "hw_watchdog.h"
#include "hw_timer.h"
#define pWDTOReg ((pWDTReg_t)APB0_WDT_BASE)
//static pWDTReg_t pWDTOReg = (pWDTReg_t)APB0_WDT_BASE;
UINT32 WDCounter;
UINT32 WDSecond;
/**************************************************************************
* 函数描述: 初始化watch dog
* 入口参数: second -- 触发watchdog的时间(单位为秒)
* 出口参数: 无
* 返回值: TRUE -- 初始化成功
* FALSE -- 初始化失败
***************************************************************************/
BOOL WDT_PowerOnInit(UINT32 second)
{
UINT32 wdt_clk_count;
//wdt_clk_count = Pll_get_apb_freq()/1000
#ifdef __arm
wdt_clk_count = Pll_get_apb_freq(); // 33MHz
#endif
WDSecond = second;
WDCounter = WDSecond * wdt_clk_count * 1000;
// load the counting value to wdt */
WriteReg32(&(pWDTOReg->WDTLR), WDCounter);
// set prescale
ClrRegBits32(&(pWDTOReg->WDTCON), 0x7);
SetRegBits32(&(pWDTOReg->WDTCON), PRESCALE_1);
// enable WDT reset signal
SetRegBits32(&(pWDTOReg->WDTCON), WDT_RST_EN);
// enable WDT
SetRegBits32(&(pWDTOReg->WDTCON), WDT_EN);
return TRUE;
}
/**************************************************************************
* 函数描述: 使能watch dog
* 入口参数: 无
* 出口参数: 无
* 返回值: 无
***************************************************************************/
void WDT_Enable(void)
{
SetRegBits32(&(pWDTOReg->WDTCON), WDT_EN);
}
/**************************************************************************
* 函数描述: 禁止watch dog
* 入口参数: 无
* 出口参数: 无
* 返回值: 无
***************************************************************************/
void WDT_Disable(void)
{
ClrRegBits32(&(pWDTOReg->WDTCON), WDT_EN);
}
/**************************************************************************
* 函数描述: 喂狗
* 入口参数: 无
* 出口参数: 无
* 返回值: 无
***************************************************************************/
void WDT_Feed(void)
{
WDT_Disable();
WriteReg32(&(pWDTOReg->WDTLR), WDCounter);
WDT_Enable();
}
/**************************************************************************
* 函数描述: 设置watchdog频率
* 入口参数: APBnKHz --- APB时钟频率
* 出口参数: 无
* 返回值: 无
* 说 明: 当系统总线频率改变时重新设置watchdog频率
***************************************************************************/
void WDT_SetFreq(UINT32 APBnKHz)
{
INT32U wdEnableReg = ReadReg32(&(pWDTOReg->WDTCON)) & (WDT_EN | WDT_RST_EN);
if ((wdEnableReg&WDT_EN) && WDSecond > 0)
{
WDCounter = WDSecond * APBnKHz * 1000;
WDT_Disable();
// load the counting value to wdt */
WriteReg32(&(pWDTOReg->WDTLR), WDCounter);
// set prescale
ClrRegBits32(&(pWDTOReg->WDTCON), 0x7);
SetRegBits32(&(pWDTOReg->WDTCON), PRESCALE_1);
SetRegBits32(&(pWDTOReg->WDTCON), wdEnableReg);
// printf("!!!!WDT SetFreq!!!!!" );
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -