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

📄 hw_watchdog.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 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 + -