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>
23 #include <asm/arch/watchdog_reg_v3.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 **---------------------------------------------------------------------------*/
54 #define WDG_TRACE printf
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));
68 ANA_REG_SET (WDG_LOCK, WDG_UNLOCK_KEY);
72 case WDG_TIMEOUT_MODE_RESET:
73 ANA_REG_AND (WDG_CTRL, (~WDG_INT_EN_BIT));
76 case WDG_TIMEOUT_MODE_INT:
77 ANA_REG_OR (WDG_CTRL, WDG_INT_EN_BIT);
81 break; //No need to change
84 if (WDG_TIMER_STATE_STOP != cfg->state)
86 WDG_LOAD_TIMER_VALUE (cfg->val);
91 case WDG_TIMER_STATE_STOP:
92 ANA_REG_AND (WDG_CTRL, (~WDG_CNT_EN_BIT));
95 case WDG_TIMER_STATE_START:
96 ANA_REG_OR (WDG_CTRL, WDG_CNT_EN_BIT | WDG_RST_EN_BIT);
100 break; //No need to change
103 WDG_TRACE ("Watch Dog Trace: Watch Dog Control 0x%8.8x", ANA_REG_GET (WDG_CTRL));
105 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 | WDG_INT_RST_BIT);
119 ANA_REG_SET (WDG_LOCK, (~WDG_UNLOCK_KEY));
122 PUBLIC void WDG_ClockOn(void)
124 ANA_REG_OR (ANA_REG_GLB_ARM_MODULE_EN, BIT_ANA_WDG_EN); //WDG enable
125 ANA_REG_OR (ANA_REG_GLB_RTC_CLK_EN, BIT_RTC_WDG_EN); //WDG Rtc enable
128 PUBLIC uint32 WDG_PHY_RST_RAW_INT(void)
130 return ANA_REG_GET(WDG_INT_RAW);
133 /**---------------------------------------------------------------------------*
135 **---------------------------------------------------------------------------*/