1 /******************************************************************************
2 ** File Name: watchdog_phy_v3.c *
5 ** Copyright: 2010 Spreatrum, Incoporated. All Rights Reserved. *
6 ** Description: This file define the physical layer of I2C device. *
7 ******************************************************************************
9 ******************************************************************************
11 ** ------------------------------------------------------------------------- *
12 ** DATE NAME DESCRIPTION *
13 ** 08/02/2010 Jie Dai Create. *
14 ******************************************************************************/
16 /**---------------------------------------------------------------------------*
18 **---------------------------------------------------------------------------*/
19 #include <asm/arch/os_api.h>
20 #include <asm/arch/sc_reg.h>
21 #include <asm/arch/adi_hal_internal.h>
22 #include <asm/arch/watchdog_phy.h>
24 /**---------------------------------------------------------------------------*
26 **---------------------------------------------------------------------------*/
32 #define ANA_WDG_LOAD_TIMEOUT_NUM (10000)
33 #define ANA_WDG_CLR_INT_TIMEOUT_NUM (10000)
35 #define WDG_LOAD_TIMER_VALUE(value) \
38 ANA_REG_SET( WDG_LOAD_HIGH, (uint16)(((value) >> 16 ) & 0xffff));\
39 ANA_REG_SET( WDG_LOAD_LOW , (uint16)((value) & 0xffff) );\
40 while((ANA_REG_GET(WDG_INT_RAW) & WDG_LD_BUSY_BIT) && ( cnt < ANA_WDG_LOAD_TIMEOUT_NUM )) cnt++;\
43 #define CLEAR_WDG_INT(msk) \
46 ANA_REG_SET(WDG_INT_CLR, (msk));\
47 while((ANA_REG_GET(WDG_INT_RAW) & (msk))&&(cnt < ANA_WDG_CLR_INT_TIMEOUT_NUM)) cnt++; \
51 /**---------------------------------------------------------------------------*
53 **---------------------------------------------------------------------------*/
56 /*****************************************************************************/
57 // Description: This function config the watch dog module.
61 /*****************************************************************************/
62 PUBLIC int32 WDG_PHY_CONFIG (WDG_CONFIG_T *cfg)
67 ANA_REG_SET (WDG_LOCK, WDG_UNLOCK_KEY);
71 case WDG_TIMEOUT_MODE_RESET:
72 ANA_REG_AND (WDG_CTRL, (~WDG_INT_EN_BIT));
75 case WDG_TIMEOUT_MODE_INT:
76 ANA_REG_OR (WDG_CTRL, WDG_INT_EN_BIT);
80 break; //No need to change
83 if (WDG_TIMER_STATE_STOP != cfg->state)
85 WDG_LOAD_TIMER_VALUE (cfg->val);
90 case WDG_TIMER_STATE_STOP:
91 ANA_REG_AND (WDG_CTRL, (~WDG_CNT_EN_BIT));
94 case WDG_TIMER_STATE_START:
95 ANA_REG_OR (WDG_CTRL, WDG_CNT_EN_BIT);
99 break; //No need to change
102 // WDG_TRACE ("Watch Dog Trace: Watch Dog LOAD 0x%8.8x", CHIP_REG_GET (WDG_LOAD));
104 ANA_REG_SET (WDG_LOCK, (~WDG_UNLOCK_KEY));
109 /*****************************************************************************/
110 // Description: This function clear the watch dog interrupt
114 /*****************************************************************************/
115 PUBLIC int32 WDG_PHY_INT_CLR (void)
117 ANA_REG_SET (WDG_LOCK, WDG_UNLOCK_KEY);
118 CLEAR_WDG_INT (WDG_INT_CLEAR_BIT);
119 ANA_REG_SET (WDG_LOCK, (~WDG_UNLOCK_KEY));
122 PUBLIC void WDG_ClockOn(void)
124 ANA_REG_OR(ANA_AGEN, AGEN_WDG_EN | AGEN_RTC_ARCH_EN | AGEN_RTC_WDG_EN);
130 /**---------------------------------------------------------------------------*
132 **---------------------------------------------------------------------------*/