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 (0xfffff)
33 #define ANA_WDG_CLR_INT_TIMEOUT_NUM (10000)
35 #define WDG_LOAD_TIMER_VALUE(value) \
38 while((ANA_REG_GET(WDG_INT_RAW) & WDG_LD_BUSY_BIT) && ( cnt < ANA_WDG_LOAD_TIMEOUT_NUM )) cnt++;\
39 ANA_REG_SET( WDG_LOAD_HIGH, (uint16)(((value) >> 16 ) & 0xffff));\
40 ANA_REG_SET( WDG_LOAD_LOW , (uint16)((value) & 0xffff) );\
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 ///WDG_TRACE("Watch Dog Trace: Watch Dog Value 0x%8.8x", CHIP_REG_GET(WDG_VALUE));
69 ANA_REG_SET (WDG_LOCK, WDG_UNLOCK_KEY);
73 case WDG_TIMEOUT_MODE_RESET:
74 ANA_REG_AND (WDG_CTRL, (~WDG_INT_EN_BIT));
77 case WDG_TIMEOUT_MODE_INT:
78 ANA_REG_OR (WDG_CTRL, WDG_INT_EN_BIT);
82 break; //No need to change
85 if (WDG_TIMER_STATE_STOP != cfg->state)
87 WDG_LOAD_TIMER_VALUE (cfg->val);
92 case WDG_TIMER_STATE_STOP:
93 ANA_REG_AND (WDG_CTRL, (~WDG_CNT_EN_BIT));
96 case WDG_TIMER_STATE_START:
97 ANA_REG_OR (WDG_CTRL, WDG_CNT_EN_BIT);
101 break; //No need to change
104 WDG_TRACE ("Watch Dog Trace: Watch Dog Control 0x%8.8x", ANA_REG_GET (WDG_CTRL));
105 /// WDG_TRACE ("Watch Dog Trace: Watch Dog LOAD 0x%8.8x", CHIP_REG_GET (WDG_LOAD));
107 ANA_REG_SET (WDG_LOCK, (~WDG_UNLOCK_KEY));
112 /*****************************************************************************/
113 // Description: This function clear the watch dog interrupt
117 /*****************************************************************************/
118 PUBLIC int32 WDG_PHY_INT_CLR (void)
120 ANA_REG_SET (WDG_LOCK, WDG_UNLOCK_KEY);
121 CLEAR_WDG_INT (WDG_INT_CLEAR_BIT);
122 ANA_REG_SET (WDG_LOCK, (~WDG_UNLOCK_KEY));
125 PUBLIC void WDG_ClockOn(void)
127 ANA_REG_OR(ANA_APB_CLK_EN, WDG_EB | APB_ARCH_EB | RTC_WDG_EB);
133 /**---------------------------------------------------------------------------*
135 **---------------------------------------------------------------------------*/