lib_pmu.h 13.3 KB
Newer Older
F
FuChao 已提交
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 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319
/**
  ******************************************************************************
  * @file    lib_pmu.h 
  * @author  Application Team
  * @version V4.4.0
  * @date    2018-09-27
  * @brief   PMU library.
  ******************************************************************************
  * @attention
  *
  ******************************************************************************
  */
#ifndef __LIB_PMU_H
#define __LIB_PMU_H

#ifdef __cplusplus
 extern "C" {
#endif

#include "target.h"

/**
  * Deep-sleep low-power configuration
*/
typedef struct
{
  uint32_t COMP1Power;           /* Comparator 1 power control */
  uint32_t COMP2Power;           /* Comparator 2 power control */
  uint32_t TADCPower;            /* Tiny ADC power control */
  uint32_t BGPPower;             /* BGP power control */
  uint32_t AVCCPower;            /* AVCC power control */
  uint32_t LCDPower;             /* LCD controller power control */
  uint32_t VDCINDetector;        /* VDCIN detector control */
  uint32_t VDDDetector;          /* VDD detector control */
  uint32_t AHBPeriphralDisable;  /* AHB Periphral clock disable selection */
  uint32_t APBPeriphralDisable;  /* APB Periphral clock disable selection */
} PMU_LowPWRTypeDef; 


/* COMP1Power */
#define PMU_COMP1PWR_ON         (ANA_REG3_CMP1PDN)
#define PMU_COMP1PWR_OFF        (0)
#define IS_PMU_COMP1PWR(__COMP1PWR__)  (((__COMP1PWR__) == PMU_COMP1PWR_ON) ||\
                                        ((__COMP1PWR__) == PMU_COMP1PWR_OFF))
/* COMP2Power */
#define PMU_COMP2PWR_ON         (ANA_REG3_CMP2PDN)
#define PMU_COMP2PWR_OFF        (0)
#define IS_PMU_COMP2PWR(__COMP2PWR__)  (((__COMP2PWR__) == PMU_COMP2PWR_ON) ||\
                                        ((__COMP2PWR__) == PMU_COMP2PWR_OFF))
/* TADCPower */
#define PMU_TADCPWR_ON          (ANA_REGF_PDNADT)
#define PMU_TADCPWR_OFF         (0)
#define IS_PMU_TADCPWR(__TADCPWR__)  (((__TADCPWR__) == PMU_TADCPWR_ON) ||\
                                      ((__TADCPWR__) == PMU_TADCPWR_OFF))
/* BGPPower */
#define PMU_BGPPWR_ON           (0)
#define PMU_BGPPWR_OFF          (ANA_REG3_BGPPD)
#define IS_PMU_BGPPWR(__BGPPWR__)  (((__BGPPWR__) == PMU_BGPPWR_ON) ||\
                                    ((__BGPPWR__) == PMU_BGPPWR_OFF))
/* AVCCPower */
#define PMU_AVCCPWR_ON         (0)
#define PMU_AVCCPWR_OFF        (ANA_REG8_PD_AVCCLDO)
#define IS_PMU_AVCCPWR(__AVCCPWR__)  (((__AVCCPWR__) == PMU_AVCCPWR_ON) ||\
                                        ((__AVCCPWR__) == PMU_AVCCPWR_OFF))
/* LCDPower */
#define PMU_LCDPWER_ON          (LCD_CTRL_EN)
#define PMU_LCDPWER_OFF         (0)
#define IS_PMU_LCDPWER(__LCDPWER__)  (((__LCDPWER__) == PMU_LCDPWER_ON) ||\
                                      ((__LCDPWER__) == PMU_LCDPWER_OFF))
/* VDCINDetector */
#define PMU_VDCINDET_ENABLE     (0)
#define PMU_VDCINDET_DISABLE    (ANA_REGA_PD_VDCINDET)
#define IS_PMU_VDCINDET(__VDCINDET__)  (((__VDCINDET__) == PMU_VDCINDET_ENABLE) ||\
                                        ((__VDCINDET__) == PMU_VDCINDET_DISABLE)) 

/* VDDDetector */
#define PMU_VDDDET_ENABLE       (0)
#define PMU_VDDDET_DISABLE      (ANA_REG9_PDDET)
#define IS_PMU_VDDDET(__VDDDET__)  (((__VDDDET__) == PMU_VDDDET_ENABLE) ||\
                                    ((__VDDDET__) == PMU_VDDDET_DISABLE))

/* APBPeriphralDisable */
#define PMU_APB_ALL       (MISC2_PCLKEN_DMA     \
                          |MISC2_PCLKEN_I2C     \
                          |MISC2_PCLKEN_SPI1    \
                          |MISC2_PCLKEN_UART0   \
                          |MISC2_PCLKEN_UART1   \
                          |MISC2_PCLKEN_UART2   \
                          |MISC2_PCLKEN_UART3   \
                          |MISC2_PCLKEN_UART4   \
                          |MISC2_PCLKEN_UART5   \
                          |MISC2_PCLKEN_ISO78160\
                          |MISC2_PCLKEN_ISO78161\
                          |MISC2_PCLKEN_TIMER   \
                          |MISC2_PCLKEN_MISC    \
                          |MISC2_PCLKEN_U32K0   \
                          |MISC2_PCLKEN_U32K1   \
                          |MISC2_PCLKEN_SPI2)   
#define PMU_APB_DMA        MISC2_PCLKEN_DMA       
#define PMU_APB_I2C        MISC2_PCLKEN_I2C       
#define PMU_APB_SPI1       MISC2_PCLKEN_SPI1      
#define PMU_APB_UART0      MISC2_PCLKEN_UART0     
#define PMU_APB_UART1      MISC2_PCLKEN_UART1     
#define PMU_APB_UART2      MISC2_PCLKEN_UART2     
#define PMU_APB_UART3      MISC2_PCLKEN_UART3     
#define PMU_APB_UART4      MISC2_PCLKEN_UART4     
#define PMU_APB_UART5      MISC2_PCLKEN_UART5     
#define PMU_APB_ISO78160   MISC2_PCLKEN_ISO78160     
#define PMU_APB_ISO78161   MISC2_PCLKEN_ISO78161     
#define PMU_APB_TIMER      MISC2_PCLKEN_TIMER     
#define PMU_APB_MISC       MISC2_PCLKEN_MISC                         
#define PMU_APB_U32K0      MISC2_PCLKEN_U32K0     
#define PMU_APB_U32K1      MISC2_PCLKEN_U32K1 
#define PMU_APB_SPI2       MISC2_PCLKEN_SPI2
/* AHBPeriphralDisable */
#define PMU_AHB_ALL       (MISC2_HCLKEN_DMA     \
                          |MISC2_HCLKEN_GPIO    \
                          |MISC2_HCLKEN_LCD     \
                          |MISC2_HCLKEN_CRYPT)
#define PMU_AHB_DMA        MISC2_HCLKEN_DMA
#define PMU_AHB_GPIO       MISC2_HCLKEN_GPIO
#define PMU_AHB_LCD        MISC2_HCLKEN_LCD
#define PMU_AHB_CRYPT      MISC2_HCLKEN_CRYPT   
   
//PMU interrupt
#define PMU_INT_IOAEN   PMU_CONTROL_INT_IOA_EN
#define PMU_INT_32K     PMU_CONTROL_INT_32K_EN
#define PMU_INT_6M      PMU_CONTROL_INT_6M_EN
#define PMU_INT_Msk     (PMU_INT_IOAEN  \
                         |PMU_INT_32K \
                         |PMU_INT_6M)
#define IS_PMU_INT(__INT__)  ((((__INT__)&PMU_INT_Msk) != 0U) &&\
                              (((__INT__)&(~PMU_INT_Msk)) == 0U))
   
//INTStatus
#define PMU_INTSTS_32K      PMU_STS_INT_32K
#define PMU_INTSTS_6M       PMU_STS_INT_6M
#define PMU_INTSTS_EXTRST   PMU_STS_EXTRST
#define PMU_INTSTS_PORST    PMU_STS_PORST
#define PMU_INTSTS_DPORST   PMU_STS_DPORST
#define PMU_INTSTS_Msk      (PMU_INTSTS_32K    \
                            |PMU_INTSTS_6M     \
                            |PMU_INTSTS_EXTRST \
                            |PMU_INTSTS_PORST  \
                            |PMU_INTSTS_DPORST)
#define IS_PMU_INTFLAGR(__INTFLAG__)  (((__INTFLAG__) == PMU_INTSTS_32K)   ||\
                                      ((__INTFLAG__) == PMU_INTSTS_6M)     ||\
                                      ((__INTFLAG__) == PMU_INTSTS_EXTRST) ||\
                                      ((__INTFLAG__) == PMU_INTSTS_PORST)  ||\
                                      ((__INTFLAG__) == PMU_INTSTS_DPORST))                        

#define IS_PMU_INTFLAGC(__INTFLAG__)  ((((__INTFLAG__)&PMU_INTSTS_Msk) != 0U) &&\
                                       (((__INTFLAG__)&(~PMU_INTSTS_Msk)) == 0U))
  


//Status
#define PMU_STS_32K     PMU_STS_EXIST_32K
#define PMU_STS_6M      PMU_STS_EXIST_6M
#define IS_PMU_FLAG(__FLAG__)  (((__FLAG__) == PMU_STS_32K) || ((__FLAG__) == PMU_STS_6M))

//Wakeup_Event
#define IOA_DISABLE     (0)
#define IOA_RISING      (1)
#define IOA_FALLING     (2)
#define IOA_HIGH        (3)
#define IOA_LOW         (4)
#define IOA_EDGEBOTH    (5)
#define IS_PMU_WAKEUP(__WAKEUP__)  (((__WAKEUP__) == IOA_DISABLE)     ||\
                                    ((__WAKEUP__) == IOA_RISING)  ||\
                                    ((__WAKEUP__) == IOA_FALLING) ||\
                                    ((__WAKEUP__) == IOA_HIGH)    ||\
                                    ((__WAKEUP__) == IOA_LOW)     ||\
                                    ((__WAKEUP__) == IOA_EDGEBOTH)) 

/***** Wakeup_Event (PMU_SleepWKUSRC_Config_RTC) *****/
#define PMU_RTCEVT_ACDONE     RTC_INTSTS_INTSTS7
#define PMU_RTCEVT_WKUCNT     RTC_INTSTS_INTSTS6
#define PMU_RTCEVT_MIDNIGHT   RTC_INTSTS_INTSTS5
#define PMU_RTCEVT_WKUHOUR    RTC_INTSTS_INTSTS4
#define PMU_RTCEVT_WKUMIN     RTC_INTSTS_INTSTS3
#define PMU_RTCEVT_WKUSEC     RTC_INTSTS_INTSTS2
#define PMU_RTCEVT_TIMEILLE   RTC_INTSTS_INTSTS1
#define PMU_RTCEVT_Msk         (PMU_RTCEVT_ACDONE   \
                               |PMU_RTCEVT_WKUCNT   \
                               |PMU_RTCEVT_MIDNIGHT \
                               |PMU_RTCEVT_WKUHOUR  \
                               |PMU_RTCEVT_WKUMIN   \
                               |PMU_RTCEVT_WKUSEC   \
                               |PMU_RTCEVT_TIMEILLE)
#define IS_PMU_RTCEVT(__RTCEVT__)  ((((__RTCEVT__)&PMU_RTCEVT_Msk) != 0U) &&\
                                    (((__RTCEVT__)&(~PMU_RTCEVT_Msk)) == 0U))                              


/***** BATDisc (PMU_BATDischargeConfig) *****/
#define PMU_BATRTC_DISC   ANA_REG6_BATRTCDISC
#define IS_PMU_BATRTCDISC(__BATRTCDISC__)  ((__BATRTCDISC__) == PMU_BATRTC_DISC)

/***** PowerThreshold (PMU_PowerAlarmTHConfig) *****/
#define PMU_PWTH_4_5      ANA_REG8_VDDPVDSEL_0
#define PMU_PWTH_4_2      ANA_REG8_VDDPVDSEL_1
#define PMU_PWTH_3_9      ANA_REG8_VDDPVDSEL_2
#define PMU_PWTH_3_6      ANA_REG8_VDDPVDSEL_3
#define PMU_PWTH_3_2      ANA_REG8_VDDPVDSEL_4
#define PMU_PWTH_2_9      ANA_REG8_VDDPVDSEL_5
#define PMU_PWTH_2_6      ANA_REG8_VDDPVDSEL_6
#define PMU_PWTH_2_3      ANA_REG8_VDDPVDSEL_7

#define IS_PMU_PWTH(__PWTH__)  (((__PWTH__) == PMU_PWTH_4_5) ||\
                                ((__PWTH__) == PMU_PWTH_4_2) ||\
                                ((__PWTH__) == PMU_PWTH_3_9) ||\
                                ((__PWTH__) == PMU_PWTH_3_6) ||\
                                ((__PWTH__) == PMU_PWTH_3_2) ||\
                                ((__PWTH__) == PMU_PWTH_2_9) ||\
                                ((__PWTH__) == PMU_PWTH_2_6) ||\
                                ((__PWTH__) == PMU_PWTH_2_3))

/***** RTCLDOSel (PMU_RTCLDOConfig) *****/
#define PMU_RTCLDO_1_5         (0)
#define PMU_RTCLDO_1_2          ANA_REGA_RTCVSEL

/***** StatusMask (PMU_GetPowerStatus) *****/
#define PMU_PWRSTS_AVCCLV         ANA_COMPOUT_AVCCLV
#define PMU_PWRSTS_VDCINDROP       ANA_COMPOUT_VDCINDROP
#define PMU_PWRSTS_VDDALARM       ANA_COMPOUT_VDDALARM

/***** Debounce (PMU_PWRDropDEBConfig) *****/
#define PMU_PWRDROP_DEB_0       ANA_CTRL_PWRDROPDEB_0
#define PMU_PWRDROP_DEB_1       ANA_CTRL_PWRDROPDEB_1
#define PMU_PWRDROP_DEB_2       ANA_CTRL_PWRDROPDEB_2
#define PMU_PWRDROP_DEB_3       ANA_CTRL_PWRDROPDEB_3
#define IS_PMU_PWRDROP_DEB(__DEB__)  (((__DEB__) == PMU_PWRDROP_DEB_0) ||\
                                      ((__DEB__) == PMU_PWRDROP_DEB_1) ||\
                                      ((__DEB__) == PMU_PWRDROP_DEB_2) ||\
                                      ((__DEB__) == PMU_PWRDROP_DEB_3))

/***** RSTSource (PMU_GetRSTSource) *****/
#define PMU_RSTSRC_EXTRST   PMU_STS_EXTRST
#define PMU_RSTSRC_PORST    PMU_STS_PORST
#define PMU_RSTSRC_DPORST   PMU_STS_DPORST
//#define PMU_RSTSRC_WDTRST   PMU_WDTSTS_WDTSTS
#define IS_PMU_RSTSRC(__RSTSRC__)  (((__RSTSRC__) == PMU_RSTSRC_EXTRST) ||\
                                    ((__RSTSRC__) == PMU_RSTSRC_PORST)  ||\
                                    ((__RSTSRC__) == PMU_RSTSRC_DPORST) )

/***** PMU_PDNDSleepConfig *****/
//VDCIN_PDNS
#define PMU_VDCINPDNS_0  (0)
#define PMU_VDCINPDNS_1  (ANA_CTRL_PDNS)
#define IS_PMU_VDCINPDNS(__VDCINPDNS__)  (((__VDCINPDNS__) == PMU_VDCINPDNS_0) ||\
                                          ((__VDCINPDNS__) == PMU_VDCINPDNS_1))
//VDD_PDNS
#define PMU_VDDPDNS_0  (0)
#define PMU_VDDPDNS_1  (ANA_CTRL_PDNS2)
#define IS_PMU_VDDPDNS(__VDDPDNS__)  (((__VDDPDNS__) == PMU_VDDPDNS_0) ||\
                                        ((__VDDPDNS__) == PMU_VDDPDNS_1))

/* Exported Functions ------------------------------------------------------- */

uint32_t PMU_EnterDSleepMode(void);
void PMU_EnterIdleMode(void);
uint32_t PMU_EnterSleepMode(void);

void PMU_INTConfig(uint32_t INTMask, uint32_t NewState);
uint8_t PMU_GetINTStatus(uint32_t INTMask);
void PMU_ClearINTStatus(uint32_t INTMask);

uint8_t PMU_GetStatus(uint32_t Mask);
uint16_t PMU_GetIOAAllINTStatus(void);
uint16_t PMU_GetIOAINTStatus(uint16_t INTMask);
void PMU_ClearIOAINTStatus(uint16_t INTMask);

void PMU_WakeUpPinConfig(uint32_t IOAx, uint32_t Wakeup_Event);

uint8_t PMU_EnterDSleep_LowPower(PMU_LowPWRTypeDef *InitStruct);
uint8_t PMU_EnterSleep_LowPower(PMU_LowPWRTypeDef *InitStruct);
#ifndef __GNUC__
void PMU_EnterIdle_LowPower(void);
#endif
void PMU_SleepWKUSRC_Config_IOA(uint16_t IOAx, uint32_t Wakeup_Event, uint32_t Priority);
void PMU_SleepWKUSRC_Config_RTC(uint32_t Wakeup_Event, uint32_t Priority);
void PMU_DeepSleepWKUSRC_Config_IOA(uint16_t IOAx, uint32_t Wakeup_Event);
void PMU_DeepSleepWKUSRC_Config_RTC(uint32_t Wakeup_Event);
void PMU_PDNDSleepConfig(uint32_t VDCIN_PDNS, uint32_t VDD_PDNS);

/***** BGP functions *****/
void PMU_BGP_Cmd(uint32_t NewState);

/***** VDD functions *****/
void PMU_VDDAlarmTHConfig(uint32_t PowerThreshold);
uint8_t PMU_GetVDDALARMStatus(void);
void PMU_VDDDetectorCmd(uint32_t NewState);

/***** AVCC functions *****/
void PMU_AVCC_Cmd(uint32_t NewState);
void PMU_AVCCOutput_Cmd(uint32_t NewState);
void PMU_AVCCLVDetector_Cmd(uint32_t NewState);
uint8_t PMU_GetAVCCLVStatus(void);

/***** VDCIN functions *****/
void PMU_VDCINDetector_Cmd(uint32_t NewState);
uint8_t PMU_GetVDCINDropStatus(void);

/***** BAT functions *****/
void PMU_BATDischargeConfig(uint32_t BATDisc, uint32_t NewState);

/***** Other functions *****/
uint8_t PMU_GetModeStatus(void);
uint8_t PMU_GetPowerStatus(uint32_t StatusMask);
void PMU_PWRDropDEBConfig(uint32_t Debounce);
uint8_t PMU_GetRSTSource(uint32_t RSTSource);
 
#ifdef __cplusplus
}
#endif
     
#endif /* __LIB_PMU_H */

/*********************************** END OF FILE ******************************/