WXK
2025-01-16 13e0fafc140c16539691d26afafaca417e7e2fbc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
/**************************************************************************
 * @file     pan_lp.h
 * @version  V1.00
 * $Revision: 3 $
 * $Date:    2023/11/08 $  
 * @brief    Panchip series lowpower driver header file
 *
 * @note
 * Copyright (C) 2023 Panchip Technology Corp. All rights reserved.
 *****************************************************************************/
#ifndef        __PAN_LP_H__
#define        __PAN_LP_H__
 
/**
 * @brief Lowpower Interface
 * @defgroup lowpower_interface Lowpower Interface
 * @{
 */
#ifdef __cplusplus
extern "C"
{
#endif
 
 
#define    LP_EXT_P56_WK_EN                                (1)        /*!< Gpio p56 wake up enable */
#define    LP_EXT_P56_WK_DISABLE                            (0)        /*!< Gpio p56 wake up disable */
 
/**@defgroup LP_GPIO_WK_EDGE_FLAG Lowpower gpio wake up edge 
 * @brief       Lowpower gpio wake up edge select definitions
 * @{ */
#define    LP_EXT_P56_WK_EDGE_LOW                            (0)        /*!< Gpio p56 wake up by falling edge */
#define    LP_EXT_P56_WK_EDGE_HIGH                            (1)        /*!< Gpio p56 wake up by rising edge */
/**@} */
 
#define LP_SLPTMR_CH0                   (0)
#define LP_SLPTMR_CH1                   (1)
#define LP_SLPTMR_CH2                   (2)
 
#define LP_MODE_SEL_SLEEP_MODE            (0)
#define LP_MODE_SEL_DEEPSLEEP_MODE        (1)
#define LP_MODE_SEL_STANDBY_M1_MODE        (2)
#define LP_MODE_SEL_STANDBY_M0_MODE        (3)
 
#define LP_DEEPSLEEP_MODE1        (1)
#define LP_DEEPSLEEP_MODE2        (2)
#define LP_DEEPSLEEP_MODE3        (3)
 
#define LP_STANDBY_M1_MODE_SEL    LP_STANDBY_M1_MODE1
#define LP_STANDBY_M1_MODE1        (1)
#define LP_STANDBY_M1_MODE2        (2)
#define LP_STANDBY_M1_MODE3        (3)
 
#define LP_STBM1_WAKEUP_SRC_GPIO        BIT0
#define LP_STBM1_WAKEUP_SRC_SLPTMR      BIT1
 
#define LP_RETENTION_SRAM_NONE          (0)
#define LP_RETENTION_SRAM_BLOCK0        BIT0 /* 32 KB */
#define LP_RETENTION_SRAM_BLOCK1        BIT1 /* 16 KB */
#define LP_RETENTION_SRAM_DECRYPT       BIT2 /* 256 B */
#define LP_RETENTION_SRAM_PHY_REGS      BIT3 /* 256 B PHY SEQ RAM + PHY Registers */
#define LP_RETENTION_SRAM_LL            BIT4 /* 8 KB */
#define LP_RETENTION_SRAM_ALL           (BIT0 | BIT1 | BIT2 | BIT3 | BIT4)
 
/**
* @brief  This function enable lowpower intterrupt
* @param[in]  ana: where ana is analog module
* @param[in] NewState: new state of interrupt mask
*                    ANAC_INT_LP_INT_EN_Msk
* @return   none
*/
__STATIC_INLINE void LP_EnableInt(ANA_T *ana,FunctionalState NewState)
{
    (NewState == ENABLE)?(ana->LP_INT_CTRL |= ANAC_INT_LP_INT_EN_Msk):(ana->LP_INT_CTRL &= ~ANAC_INT_LP_INT_EN_Msk);
}
 
/**
* @brief  This function wait to clear wake up flag
* @param[in]  ana: where ana is analog module
* @param[in]  u32Mask: bit need to be cleared
* @return   none
*/
__STATIC_INLINE void LP_ClearWakeFlag(ANA_T *ana,uint32_t u32Mask)
{
    ana->LP_INT_CTRL |= u32Mask;
}
 
/**
* @brief  This function enable hpldo ready or not(0: need wait ready, 1: do not care ready)
* @param[in]  ana: where ana is analog module
* @param[in] NewState: new state of hpldo ready bypass signal
* @return   none
*/
__STATIC_INLINE void LP_HpldoRdyBypassEn(ANA_T *ana,FunctionalState NewState)
{
    (NewState == ENABLE)?(ana->LP_DLY_CTRL_3V |= ANAC_HPLDO_RDY_BYPASS_Msk):(ana->LP_DLY_CTRL_3V &= ~ANAC_HPLDO_RDY_BYPASS_Msk);
}
 
/**
* @brief  This function enable fast clk delay or not
* @param[in]  ana: where ana is analog module
* @param[in] NewState: new state of hpldo ready bypass signal
* @return   none
*/
__STATIC_INLINE void LP_FastClkDelayEn(ANA_T *ana,FunctionalState NewState)
{
    (NewState == ENABLE)?(ana->LP_DLY_CTRL_3V |= ANAC_32KCLK_DLY_EN_Msk):(ana->LP_DLY_CTRL_3V &= ~ANAC_32KCLK_DLY_EN_Msk);
}
 
/**
  * @brief  This function enable gpio p56 wake up 
  * @param[in]  ana: where ana is analog module base address
  * @param[in]  NewState: enable or disable
  * @param[in]  WkEdge: p56 wake up edge select,0-->low,1-->high 
  * @return   none
  */
void LP_SetExternalWake(ANA_T *ana,uint8_t WkEdge);
/**
* @brief  This function set sleep time
* @param[in]  ana: where ana is analog module
* @param[in]  u32ClkCnt: where u32ClkCnt is 32k clock cnt num
* @param[in]  idx: channel index of sleeptimer, can be 0, 1, 2
* @return   none
*/
void LP_SetSleepTime(ANA_T *ana,uint32_t u32ClkCnt,uint8_t idx);
 
/**
  * @brief  This function get current 32K timer counter
  * @param[in]  ana: where ana is analog module
  * @return  Current 32K timer counter
  */
uint32_t LP_GetSlptmrCurrCount(ANA_T *ana);
 
/**
 * @brief  This function sets the LPLDOH (Low-Power Low-Dropout Regulator) delay count using 32kHz clock cycles.
 * @param[in]  ana: Analog module base address
 * @param[in]  u16Clk32Cnt: Number of 32kHz clock cycles for delay
 * @return   None
 */
void LP_SetLpldohDelay(ANA_T *ana,uint16_t u16Clk32Cnt);
/**
  * @brief  This function used to set digital reset time
  * @param[in]  ana: where ana is analog module base address
  * @param[in]  u8Clk32Cnt: where u8Clk32Cnt is 32k clock period cnt
  * @return   none
  */
void LP_SetWakeDelay(ANA_T *ana,uint16_t u16Clk32Cnt);
/**
 * @brief  This function sets the sleep mode for the specified analog module.
 * @param[in]  ana: Analog module base address
 * @param[in]  mode: Sleep mode configuration
 * @return   None
 */
void LP_SetSleepMode(ANA_T *ana,uint8_t mode);
 
/**
* @brief  This function set sleep mode config
* @param[in]  ana: Select analog module
* @param[in]  enterCyclically: Enable ARM Sleep-On-Exit Feature or not
* @return   none
*/
void LP_EnterSleepMode(ANA_T *ana, bool enterCyclically);
 
/**
 * @brief  This function sets the deep sleep mode configuration.
 * @param[in]  ana: Analog module base address
 * @param[in]  enterCyclically: Determines whether to cycle into low power
 * @param[in]  powerCtrl: Power control configuration
 * @param[in]  dpMode: Deep sleep mode configuration
 * @return   None
 */
void LP_EnterDeepSleepMode(ANA_T *ana, bool enterCyclically, uint8_t powerCtrl, uint8_t dpMode);
 
/**
 * @brief  This function sets the Standby Mode 1 configuration.
 * @param[in]  ana: Analog module base address
 * @param[in]  powerCtrl: Power control of SRAMS in lp mode
 * @param[in]  wakeupWithoutReset: Do not reset (continue run) after waking up
 */
void LP_EnterStandbyMode1(ANA_T *ana, uint8_t powerCtrl, bool wakeupWithoutReset);
 
/**
 * @brief  This function sets the Standby Mode 0 configuration.
 * @param[in]  ana: Analog module base address
 * @param[in]  enableClk32k: Enable 32K low speed clock in lp mode for special purpose, such as BOD/LVD wakeup
 */
void LP_EnterStandbyMode0(ANA_T *ana, bool enableClk32k);
 
/**@} */
#ifdef __cplusplus
}
#endif
#endif /* __PAN_LP_H__ */