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 **---------------------------------------------------------------------------*/
20 #include <asm/arch/os_api.h>
21 #include <asm/arch/sc_reg.h>
22 #include <asm/arch/adi_hal_internal.h>
23 #include <asm/arch/watchdog_phy.h>
24 #include <asm/arch/watchdog_reg_v3.h>
25 /**---------------------------------------------------------------------------*
27 **---------------------------------------------------------------------------*/
33 #define ANA_WDG_LOAD_TIMEOUT_NUM (0xfffff)
34 #define ANA_WDG_CLR_INT_TIMEOUT_NUM (10000)
36 #define WDG_LOAD_TIMER_VALUE(value) \
39 while((ANA_REG_GET(WDG_INT_RAW) & WDG_LD_BUSY_BIT) && ( cnt < ANA_WDG_LOAD_TIMEOUT_NUM )) cnt++;\
40 ANA_REG_SET( WDG_LOAD_HIGH, (uint16)(((value) >> 16 ) & 0xffff));\
41 ANA_REG_SET( WDG_LOAD_LOW , (uint16)((value) & 0xffff) );\
44 #define CLEAR_WDG_INT(msk) \
47 ANA_REG_SET(WDG_INT_CLR, (msk));\
48 while((ANA_REG_GET(WDG_INT_RAW) & (msk))&&(cnt < ANA_WDG_CLR_INT_TIMEOUT_NUM)) cnt++; \
52 /**---------------------------------------------------------------------------*
54 **---------------------------------------------------------------------------*/
55 #define WDG_TRACE printf
57 /*****************************************************************************/
58 // Description: This function config the watch dog module.
62 /*****************************************************************************/
63 PUBLIC int32 WDG_PHY_CONFIG (WDG_CONFIG_T *cfg)
65 ///WDG_TRACE("Watch Dog Trace: Watch Dog Value 0x%8.8x", CHIP_REG_GET(WDG_VALUE));
66 ANA_REG_SET (WDG_LOCK, WDG_UNLOCK_KEY);
70 case WDG_TIMEOUT_MODE_RESET:
71 ANA_REG_AND (WDG_CTRL, (~WDG_INT_EN_BIT));
74 case WDG_TIMEOUT_MODE_INT:
75 ANA_REG_OR (WDG_CTRL, WDG_INT_EN_BIT);
79 break; //No need to change
82 if (WDG_TIMER_STATE_STOP != cfg->state)
84 WDG_LOAD_TIMER_VALUE (cfg->val);
89 case WDG_TIMER_STATE_STOP:
90 ANA_REG_AND (WDG_CTRL, (~WDG_CNT_EN_BIT));
93 case WDG_TIMER_STATE_START:
94 ANA_REG_OR (WDG_CTRL, WDG_CNT_EN_BIT | WDG_RST_EN_BIT);
98 break; //No need to change
101 WDG_TRACE ("Watch Dog Trace: Watch Dog Control 0x%8.8x", ANA_REG_GET (WDG_CTRL));
103 ANA_REG_SET (WDG_LOCK, (~WDG_UNLOCK_KEY));
107 /*****************************************************************************/
108 // Description: This function clear the watch dog interrupt
112 /*****************************************************************************/
113 PUBLIC int32 WDG_PHY_INT_CLR (void)
115 ANA_REG_SET (WDG_LOCK, WDG_UNLOCK_KEY);
116 CLEAR_WDG_INT (WDG_INT_CLEAR_BIT | WDG_INT_RST_BIT);
117 ANA_REG_SET (WDG_LOCK, (~WDG_UNLOCK_KEY));
120 PUBLIC void WDG_ClockOn(void)
122 ANA_REG_OR (ANA_REG_GLB_ARM_MODULE_EN, BIT_ANA_WDG_EN); //WDG enable
123 ANA_REG_OR (ANA_REG_GLB_RTC_CLK_EN, BIT_RTC_WDG_EN); //WDG Rtc enable
126 PUBLIC uint32 WDG_PHY_RST_RAW_INT(void)
128 return ANA_REG_GET(WDG_INT_RAW);
131 /**---------------------------------------------------------------------------*
133 **---------------------------------------------------------------------------*/