lib_pmu.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319
  1. /**
  2. ******************************************************************************
  3. * @file lib_pmu.h
  4. * @author Application Team
  5. * @version V4.4.0
  6. * @date 2018-09-27
  7. * @brief PMU library.
  8. ******************************************************************************
  9. * @attention
  10. *
  11. ******************************************************************************
  12. */
  13. #ifndef __LIB_PMU_H
  14. #define __LIB_PMU_H
  15. #ifdef __cplusplus
  16. extern "C" {
  17. #endif
  18. #include "target.h"
  19. /**
  20. * Deep-sleep low-power configuration
  21. */
  22. typedef struct
  23. {
  24. uint32_t COMP1Power; /* Comparator 1 power control */
  25. uint32_t COMP2Power; /* Comparator 2 power control */
  26. uint32_t TADCPower; /* Tiny ADC power control */
  27. uint32_t BGPPower; /* BGP power control */
  28. uint32_t AVCCPower; /* AVCC power control */
  29. uint32_t LCDPower; /* LCD controller power control */
  30. uint32_t VDCINDetector; /* VDCIN detector control */
  31. uint32_t VDDDetector; /* VDD detector control */
  32. uint32_t AHBPeriphralDisable; /* AHB Periphral clock disable selection */
  33. uint32_t APBPeriphralDisable; /* APB Periphral clock disable selection */
  34. } PMU_LowPWRTypeDef;
  35. /* COMP1Power */
  36. #define PMU_COMP1PWR_ON (ANA_REG3_CMP1PDN)
  37. #define PMU_COMP1PWR_OFF (0)
  38. #define IS_PMU_COMP1PWR(__COMP1PWR__) (((__COMP1PWR__) == PMU_COMP1PWR_ON) ||\
  39. ((__COMP1PWR__) == PMU_COMP1PWR_OFF))
  40. /* COMP2Power */
  41. #define PMU_COMP2PWR_ON (ANA_REG3_CMP2PDN)
  42. #define PMU_COMP2PWR_OFF (0)
  43. #define IS_PMU_COMP2PWR(__COMP2PWR__) (((__COMP2PWR__) == PMU_COMP2PWR_ON) ||\
  44. ((__COMP2PWR__) == PMU_COMP2PWR_OFF))
  45. /* TADCPower */
  46. #define PMU_TADCPWR_ON (ANA_REGF_PDNADT)
  47. #define PMU_TADCPWR_OFF (0)
  48. #define IS_PMU_TADCPWR(__TADCPWR__) (((__TADCPWR__) == PMU_TADCPWR_ON) ||\
  49. ((__TADCPWR__) == PMU_TADCPWR_OFF))
  50. /* BGPPower */
  51. #define PMU_BGPPWR_ON (0)
  52. #define PMU_BGPPWR_OFF (ANA_REG3_BGPPD)
  53. #define IS_PMU_BGPPWR(__BGPPWR__) (((__BGPPWR__) == PMU_BGPPWR_ON) ||\
  54. ((__BGPPWR__) == PMU_BGPPWR_OFF))
  55. /* AVCCPower */
  56. #define PMU_AVCCPWR_ON (0)
  57. #define PMU_AVCCPWR_OFF (ANA_REG8_PD_AVCCLDO)
  58. #define IS_PMU_AVCCPWR(__AVCCPWR__) (((__AVCCPWR__) == PMU_AVCCPWR_ON) ||\
  59. ((__AVCCPWR__) == PMU_AVCCPWR_OFF))
  60. /* LCDPower */
  61. #define PMU_LCDPWER_ON (LCD_CTRL_EN)
  62. #define PMU_LCDPWER_OFF (0)
  63. #define IS_PMU_LCDPWER(__LCDPWER__) (((__LCDPWER__) == PMU_LCDPWER_ON) ||\
  64. ((__LCDPWER__) == PMU_LCDPWER_OFF))
  65. /* VDCINDetector */
  66. #define PMU_VDCINDET_ENABLE (0)
  67. #define PMU_VDCINDET_DISABLE (ANA_REGA_PD_VDCINDET)
  68. #define IS_PMU_VDCINDET(__VDCINDET__) (((__VDCINDET__) == PMU_VDCINDET_ENABLE) ||\
  69. ((__VDCINDET__) == PMU_VDCINDET_DISABLE))
  70. /* VDDDetector */
  71. #define PMU_VDDDET_ENABLE (0)
  72. #define PMU_VDDDET_DISABLE (ANA_REG9_PDDET)
  73. #define IS_PMU_VDDDET(__VDDDET__) (((__VDDDET__) == PMU_VDDDET_ENABLE) ||\
  74. ((__VDDDET__) == PMU_VDDDET_DISABLE))
  75. /* APBPeriphralDisable */
  76. #define PMU_APB_ALL (MISC2_PCLKEN_DMA \
  77. |MISC2_PCLKEN_I2C \
  78. |MISC2_PCLKEN_SPI1 \
  79. |MISC2_PCLKEN_UART0 \
  80. |MISC2_PCLKEN_UART1 \
  81. |MISC2_PCLKEN_UART2 \
  82. |MISC2_PCLKEN_UART3 \
  83. |MISC2_PCLKEN_UART4 \
  84. |MISC2_PCLKEN_UART5 \
  85. |MISC2_PCLKEN_ISO78160\
  86. |MISC2_PCLKEN_ISO78161\
  87. |MISC2_PCLKEN_TIMER \
  88. |MISC2_PCLKEN_MISC \
  89. |MISC2_PCLKEN_U32K0 \
  90. |MISC2_PCLKEN_U32K1 \
  91. |MISC2_PCLKEN_SPI2)
  92. #define PMU_APB_DMA MISC2_PCLKEN_DMA
  93. #define PMU_APB_I2C MISC2_PCLKEN_I2C
  94. #define PMU_APB_SPI1 MISC2_PCLKEN_SPI1
  95. #define PMU_APB_UART0 MISC2_PCLKEN_UART0
  96. #define PMU_APB_UART1 MISC2_PCLKEN_UART1
  97. #define PMU_APB_UART2 MISC2_PCLKEN_UART2
  98. #define PMU_APB_UART3 MISC2_PCLKEN_UART3
  99. #define PMU_APB_UART4 MISC2_PCLKEN_UART4
  100. #define PMU_APB_UART5 MISC2_PCLKEN_UART5
  101. #define PMU_APB_ISO78160 MISC2_PCLKEN_ISO78160
  102. #define PMU_APB_ISO78161 MISC2_PCLKEN_ISO78161
  103. #define PMU_APB_TIMER MISC2_PCLKEN_TIMER
  104. #define PMU_APB_MISC MISC2_PCLKEN_MISC
  105. #define PMU_APB_U32K0 MISC2_PCLKEN_U32K0
  106. #define PMU_APB_U32K1 MISC2_PCLKEN_U32K1
  107. #define PMU_APB_SPI2 MISC2_PCLKEN_SPI2
  108. /* AHBPeriphralDisable */
  109. #define PMU_AHB_ALL (MISC2_HCLKEN_DMA \
  110. |MISC2_HCLKEN_GPIO \
  111. |MISC2_HCLKEN_LCD \
  112. |MISC2_HCLKEN_CRYPT)
  113. #define PMU_AHB_DMA MISC2_HCLKEN_DMA
  114. #define PMU_AHB_GPIO MISC2_HCLKEN_GPIO
  115. #define PMU_AHB_LCD MISC2_HCLKEN_LCD
  116. #define PMU_AHB_CRYPT MISC2_HCLKEN_CRYPT
  117. //PMU interrupt
  118. #define PMU_INT_IOAEN PMU_CONTROL_INT_IOA_EN
  119. #define PMU_INT_32K PMU_CONTROL_INT_32K_EN
  120. #define PMU_INT_6M PMU_CONTROL_INT_6M_EN
  121. #define PMU_INT_Msk (PMU_INT_IOAEN \
  122. |PMU_INT_32K \
  123. |PMU_INT_6M)
  124. #define IS_PMU_INT(__INT__) ((((__INT__)&PMU_INT_Msk) != 0U) &&\
  125. (((__INT__)&(~PMU_INT_Msk)) == 0U))
  126. //INTStatus
  127. #define PMU_INTSTS_32K PMU_STS_INT_32K
  128. #define PMU_INTSTS_6M PMU_STS_INT_6M
  129. #define PMU_INTSTS_EXTRST PMU_STS_EXTRST
  130. #define PMU_INTSTS_PORST PMU_STS_PORST
  131. #define PMU_INTSTS_DPORST PMU_STS_DPORST
  132. #define PMU_INTSTS_Msk (PMU_INTSTS_32K \
  133. |PMU_INTSTS_6M \
  134. |PMU_INTSTS_EXTRST \
  135. |PMU_INTSTS_PORST \
  136. |PMU_INTSTS_DPORST)
  137. #define IS_PMU_INTFLAGR(__INTFLAG__) (((__INTFLAG__) == PMU_INTSTS_32K) ||\
  138. ((__INTFLAG__) == PMU_INTSTS_6M) ||\
  139. ((__INTFLAG__) == PMU_INTSTS_EXTRST) ||\
  140. ((__INTFLAG__) == PMU_INTSTS_PORST) ||\
  141. ((__INTFLAG__) == PMU_INTSTS_DPORST))
  142. #define IS_PMU_INTFLAGC(__INTFLAG__) ((((__INTFLAG__)&PMU_INTSTS_Msk) != 0U) &&\
  143. (((__INTFLAG__)&(~PMU_INTSTS_Msk)) == 0U))
  144. //Status
  145. #define PMU_STS_32K PMU_STS_EXIST_32K
  146. #define PMU_STS_6M PMU_STS_EXIST_6M
  147. #define IS_PMU_FLAG(__FLAG__) (((__FLAG__) == PMU_STS_32K) || ((__FLAG__) == PMU_STS_6M))
  148. //Wakeup_Event
  149. #define IOA_DISABLE (0)
  150. #define IOA_RISING (1)
  151. #define IOA_FALLING (2)
  152. #define IOA_HIGH (3)
  153. #define IOA_LOW (4)
  154. #define IOA_EDGEBOTH (5)
  155. #define IS_PMU_WAKEUP(__WAKEUP__) (((__WAKEUP__) == IOA_DISABLE) ||\
  156. ((__WAKEUP__) == IOA_RISING) ||\
  157. ((__WAKEUP__) == IOA_FALLING) ||\
  158. ((__WAKEUP__) == IOA_HIGH) ||\
  159. ((__WAKEUP__) == IOA_LOW) ||\
  160. ((__WAKEUP__) == IOA_EDGEBOTH))
  161. /***** Wakeup_Event (PMU_SleepWKUSRC_Config_RTC) *****/
  162. #define PMU_RTCEVT_ACDONE RTC_INTSTS_INTSTS7
  163. #define PMU_RTCEVT_WKUCNT RTC_INTSTS_INTSTS6
  164. #define PMU_RTCEVT_MIDNIGHT RTC_INTSTS_INTSTS5
  165. #define PMU_RTCEVT_WKUHOUR RTC_INTSTS_INTSTS4
  166. #define PMU_RTCEVT_WKUMIN RTC_INTSTS_INTSTS3
  167. #define PMU_RTCEVT_WKUSEC RTC_INTSTS_INTSTS2
  168. #define PMU_RTCEVT_TIMEILLE RTC_INTSTS_INTSTS1
  169. #define PMU_RTCEVT_Msk (PMU_RTCEVT_ACDONE \
  170. |PMU_RTCEVT_WKUCNT \
  171. |PMU_RTCEVT_MIDNIGHT \
  172. |PMU_RTCEVT_WKUHOUR \
  173. |PMU_RTCEVT_WKUMIN \
  174. |PMU_RTCEVT_WKUSEC \
  175. |PMU_RTCEVT_TIMEILLE)
  176. #define IS_PMU_RTCEVT(__RTCEVT__) ((((__RTCEVT__)&PMU_RTCEVT_Msk) != 0U) &&\
  177. (((__RTCEVT__)&(~PMU_RTCEVT_Msk)) == 0U))
  178. /***** BATDisc (PMU_BATDischargeConfig) *****/
  179. #define PMU_BATRTC_DISC ANA_REG6_BATRTCDISC
  180. #define IS_PMU_BATRTCDISC(__BATRTCDISC__) ((__BATRTCDISC__) == PMU_BATRTC_DISC)
  181. /***** PowerThreshold (PMU_PowerAlarmTHConfig) *****/
  182. #define PMU_PWTH_4_5 ANA_REG8_VDDPVDSEL_0
  183. #define PMU_PWTH_4_2 ANA_REG8_VDDPVDSEL_1
  184. #define PMU_PWTH_3_9 ANA_REG8_VDDPVDSEL_2
  185. #define PMU_PWTH_3_6 ANA_REG8_VDDPVDSEL_3
  186. #define PMU_PWTH_3_2 ANA_REG8_VDDPVDSEL_4
  187. #define PMU_PWTH_2_9 ANA_REG8_VDDPVDSEL_5
  188. #define PMU_PWTH_2_6 ANA_REG8_VDDPVDSEL_6
  189. #define PMU_PWTH_2_3 ANA_REG8_VDDPVDSEL_7
  190. #define IS_PMU_PWTH(__PWTH__) (((__PWTH__) == PMU_PWTH_4_5) ||\
  191. ((__PWTH__) == PMU_PWTH_4_2) ||\
  192. ((__PWTH__) == PMU_PWTH_3_9) ||\
  193. ((__PWTH__) == PMU_PWTH_3_6) ||\
  194. ((__PWTH__) == PMU_PWTH_3_2) ||\
  195. ((__PWTH__) == PMU_PWTH_2_9) ||\
  196. ((__PWTH__) == PMU_PWTH_2_6) ||\
  197. ((__PWTH__) == PMU_PWTH_2_3))
  198. /***** RTCLDOSel (PMU_RTCLDOConfig) *****/
  199. #define PMU_RTCLDO_1_5 (0)
  200. #define PMU_RTCLDO_1_2 ANA_REGA_RTCVSEL
  201. /***** StatusMask (PMU_GetPowerStatus) *****/
  202. #define PMU_PWRSTS_AVCCLV ANA_COMPOUT_AVCCLV
  203. #define PMU_PWRSTS_VDCINDROP ANA_COMPOUT_VDCINDROP
  204. #define PMU_PWRSTS_VDDALARM ANA_COMPOUT_VDDALARM
  205. /***** Debounce (PMU_PWRDropDEBConfig) *****/
  206. #define PMU_PWRDROP_DEB_0 ANA_CTRL_PWRDROPDEB_0
  207. #define PMU_PWRDROP_DEB_1 ANA_CTRL_PWRDROPDEB_1
  208. #define PMU_PWRDROP_DEB_2 ANA_CTRL_PWRDROPDEB_2
  209. #define PMU_PWRDROP_DEB_3 ANA_CTRL_PWRDROPDEB_3
  210. #define IS_PMU_PWRDROP_DEB(__DEB__) (((__DEB__) == PMU_PWRDROP_DEB_0) ||\
  211. ((__DEB__) == PMU_PWRDROP_DEB_1) ||\
  212. ((__DEB__) == PMU_PWRDROP_DEB_2) ||\
  213. ((__DEB__) == PMU_PWRDROP_DEB_3))
  214. /***** RSTSource (PMU_GetRSTSource) *****/
  215. #define PMU_RSTSRC_EXTRST PMU_STS_EXTRST
  216. #define PMU_RSTSRC_PORST PMU_STS_PORST
  217. #define PMU_RSTSRC_DPORST PMU_STS_DPORST
  218. //#define PMU_RSTSRC_WDTRST PMU_WDTSTS_WDTSTS
  219. #define IS_PMU_RSTSRC(__RSTSRC__) (((__RSTSRC__) == PMU_RSTSRC_EXTRST) ||\
  220. ((__RSTSRC__) == PMU_RSTSRC_PORST) ||\
  221. ((__RSTSRC__) == PMU_RSTSRC_DPORST) )
  222. /***** PMU_PDNDSleepConfig *****/
  223. //VDCIN_PDNS
  224. #define PMU_VDCINPDNS_0 (0)
  225. #define PMU_VDCINPDNS_1 (ANA_CTRL_PDNS)
  226. #define IS_PMU_VDCINPDNS(__VDCINPDNS__) (((__VDCINPDNS__) == PMU_VDCINPDNS_0) ||\
  227. ((__VDCINPDNS__) == PMU_VDCINPDNS_1))
  228. //VDD_PDNS
  229. #define PMU_VDDPDNS_0 (0)
  230. #define PMU_VDDPDNS_1 (ANA_CTRL_PDNS2)
  231. #define IS_PMU_VDDPDNS(__VDDPDNS__) (((__VDDPDNS__) == PMU_VDDPDNS_0) ||\
  232. ((__VDDPDNS__) == PMU_VDDPDNS_1))
  233. /* Exported Functions ------------------------------------------------------- */
  234. uint32_t PMU_EnterDSleepMode(void);
  235. void PMU_EnterIdleMode(void);
  236. uint32_t PMU_EnterSleepMode(void);
  237. void PMU_INTConfig(uint32_t INTMask, uint32_t NewState);
  238. uint8_t PMU_GetINTStatus(uint32_t INTMask);
  239. void PMU_ClearINTStatus(uint32_t INTMask);
  240. uint8_t PMU_GetStatus(uint32_t Mask);
  241. uint16_t PMU_GetIOAAllINTStatus(void);
  242. uint16_t PMU_GetIOAINTStatus(uint16_t INTMask);
  243. void PMU_ClearIOAINTStatus(uint16_t INTMask);
  244. void PMU_WakeUpPinConfig(uint32_t IOAx, uint32_t Wakeup_Event);
  245. uint8_t PMU_EnterDSleep_LowPower(PMU_LowPWRTypeDef *InitStruct);
  246. uint8_t PMU_EnterSleep_LowPower(PMU_LowPWRTypeDef *InitStruct);
  247. #ifndef __GNUC__
  248. void PMU_EnterIdle_LowPower(void);
  249. #endif
  250. void PMU_SleepWKUSRC_Config_IOA(uint16_t IOAx, uint32_t Wakeup_Event, uint32_t Priority);
  251. void PMU_SleepWKUSRC_Config_RTC(uint32_t Wakeup_Event, uint32_t Priority);
  252. void PMU_DeepSleepWKUSRC_Config_IOA(uint16_t IOAx, uint32_t Wakeup_Event);
  253. void PMU_DeepSleepWKUSRC_Config_RTC(uint32_t Wakeup_Event);
  254. void PMU_PDNDSleepConfig(uint32_t VDCIN_PDNS, uint32_t VDD_PDNS);
  255. /***** BGP functions *****/
  256. void PMU_BGP_Cmd(uint32_t NewState);
  257. /***** VDD functions *****/
  258. void PMU_VDDAlarmTHConfig(uint32_t PowerThreshold);
  259. uint8_t PMU_GetVDDALARMStatus(void);
  260. void PMU_VDDDetectorCmd(uint32_t NewState);
  261. /***** AVCC functions *****/
  262. void PMU_AVCC_Cmd(uint32_t NewState);
  263. void PMU_AVCCOutput_Cmd(uint32_t NewState);
  264. void PMU_AVCCLVDetector_Cmd(uint32_t NewState);
  265. uint8_t PMU_GetAVCCLVStatus(void);
  266. /***** VDCIN functions *****/
  267. void PMU_VDCINDetector_Cmd(uint32_t NewState);
  268. uint8_t PMU_GetVDCINDropStatus(void);
  269. /***** BAT functions *****/
  270. void PMU_BATDischargeConfig(uint32_t BATDisc, uint32_t NewState);
  271. /***** Other functions *****/
  272. uint8_t PMU_GetModeStatus(void);
  273. uint8_t PMU_GetPowerStatus(uint32_t StatusMask);
  274. void PMU_PWRDropDEBConfig(uint32_t Debounce);
  275. uint8_t PMU_GetRSTSource(uint32_t RSTSource);
  276. #ifdef __cplusplus
  277. }
  278. #endif
  279. #endif /* __LIB_PMU_H */
  280. /*********************************** END OF FILE ******************************/