at32f423_pwc.h 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. /**
  2. **************************************************************************
  3. * @file at32f423_pwc.h
  4. * @brief at32f423 pwr header file
  5. **************************************************************************
  6. * Copyright notice & Disclaimer
  7. *
  8. * The software Board Support Package (BSP) that is made available to
  9. * download from Artery official website is the copyrighted work of Artery.
  10. * Artery authorizes customers to use, copy, and distribute the BSP
  11. * software and its related documentation for the purpose of design and
  12. * development in conjunction with Artery microcontrollers. Use of the
  13. * software is governed by this copyright notice and the following disclaimer.
  14. *
  15. * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES,
  16. * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS,
  17. * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR
  18. * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS,
  19. * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
  20. * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT.
  21. *
  22. **************************************************************************
  23. */
  24. /* Define to prevent recursive inclusion -------------------------------------*/
  25. #ifndef __AT32F423_PWC_H
  26. #define __AT32F423_PWC_H
  27. #ifdef __cplusplus
  28. extern "C" {
  29. #endif
  30. /* Includes ------------------------------------------------------------------*/
  31. #include "at32f423.h"
  32. /** @addtogroup AT32F423_periph_driver
  33. * @{
  34. */
  35. /** @addtogroup PWC
  36. * @{
  37. */
  38. /** @defgroup PWC_flags_definition
  39. * @brief pwc flag
  40. * @{
  41. */
  42. #define PWC_WAKEUP_FLAG ((uint32_t)0x00000001) /*!< wakeup flag */
  43. #define PWC_STANDBY_FLAG ((uint32_t)0x00000002) /*!< standby flag */
  44. #define PWC_PVM_OUTPUT_FLAG ((uint32_t)0x00000004) /*!< pvm output flag */
  45. /**
  46. * @}
  47. */
  48. /**
  49. * @brief pwc wakeup pin num definition
  50. */
  51. #define PWC_WAKEUP_PIN_1 ((uint32_t)0x00000100) /*!< standby wake-up pin1 */
  52. #define PWC_WAKEUP_PIN_2 ((uint32_t)0x00000200) /*!< standby wake-up pin2 */
  53. #define PWC_WAKEUP_PIN_6 ((uint32_t)0x00002000) /*!< standby wake-up pin6 */
  54. #define PWC_WAKEUP_PIN_7 ((uint32_t)0x00004000) /*!< standby wake-up pin7 */
  55. /**
  56. * @brief select ldo output voltage.
  57. * @param val: set the ldo output voltage.
  58. * this parameter can be one of the following values:
  59. * - PWC_LDO_OUTPUT_1V3: system clock up to 150MHz.
  60. * - PWC_LDO_OUTPUT_1V2: system clock up to 120MHz.
  61. * - PWC_LDO_OUTPUT_1V0: system clock up to 64MHz.
  62. * @note useage limited.
  63. * PWC_LDO_OUTPUT_1V3: operation temperature range -40~85 degree, VDD must over 3.0V.
  64. */
  65. #define pwc_ldo_output_voltage_set(val) (PWC->ldoov_bit.ldoovsel = val)
  66. /** @defgroup PWC_exported_types
  67. * @{
  68. */
  69. /**
  70. * @brief pwc pvm voltage type
  71. */
  72. typedef enum
  73. {
  74. PWC_PVM_VOLTAGE_2V3 = 0x01, /*!< power voltage monitoring boundary 2.3v */
  75. PWC_PVM_VOLTAGE_2V4 = 0x02, /*!< power voltage monitoring boundary 2.4v */
  76. PWC_PVM_VOLTAGE_2V5 = 0x03, /*!< power voltage monitoring boundary 2.5v */
  77. PWC_PVM_VOLTAGE_2V6 = 0x04, /*!< power voltage monitoring boundary 2.6v */
  78. PWC_PVM_VOLTAGE_2V7 = 0x05, /*!< power voltage monitoring boundary 2.7v */
  79. PWC_PVM_VOLTAGE_2V8 = 0x06, /*!< power voltage monitoring boundary 2.8v */
  80. PWC_PVM_VOLTAGE_2V9 = 0x07 /*!< power voltage monitoring boundary 2.9v */
  81. } pwc_pvm_voltage_type;
  82. /**
  83. * @brief pwc ldo output voltage type
  84. */
  85. typedef enum
  86. {
  87. PWC_LDO_OUTPUT_1V0 = 0x00, /*!< ldo output voltage is 1.0v */
  88. PWC_LDO_OUTPUT_1V2 = 0x02, /*!< ldo output voltage is 1.2v */
  89. PWC_LDO_OUTPUT_1V3 = 0x03 /*!< ldo output voltage is 1.3v */
  90. } pwc_ldo_output_voltage_type;
  91. /**
  92. * @brief pwc sleep enter type
  93. */
  94. typedef enum
  95. {
  96. PWC_SLEEP_ENTER_WFI = 0x00, /*!< use wfi enter sleep mode */
  97. PWC_SLEEP_ENTER_WFE = 0x01 /*!< use wfe enter sleep mode */
  98. } pwc_sleep_enter_type ;
  99. /**
  100. * @brief pwc deep sleep enter type
  101. */
  102. typedef enum
  103. {
  104. PWC_DEEP_SLEEP_ENTER_WFI = 0x00, /*!< use wfi enter deepsleep mode */
  105. PWC_DEEP_SLEEP_ENTER_WFE = 0x01 /*!< use wfe enter deepsleep mode */
  106. } pwc_deep_sleep_enter_type ;
  107. /**
  108. * @brief pwc regulator type
  109. */
  110. typedef enum
  111. {
  112. PWC_REGULATOR_ON = 0x00, /*!< voltage regulator state on when deepsleep mode */
  113. PWC_REGULATOR_LOW_POWER = 0x01, /*!< voltage regulator state low power when deepsleep mode */
  114. PWC_REGULATOR_EXTRA_LOW_POWER = 0x02 /*!< voltage regulator state extra low power when deepsleep mode */
  115. } pwc_regulator_type ;
  116. /**
  117. * @brief type define pwc register all
  118. */
  119. typedef struct
  120. {
  121. /**
  122. * @brief pwc ctrl register, offset:0x00
  123. */
  124. union
  125. {
  126. __IO uint32_t ctrl;
  127. struct
  128. {
  129. __IO uint32_t vrsel : 1; /* [0] */
  130. __IO uint32_t lpsel : 1; /* [1] */
  131. __IO uint32_t clswef : 1; /* [2] */
  132. __IO uint32_t clsef : 1; /* [3] */
  133. __IO uint32_t pvmen : 1; /* [4] */
  134. __IO uint32_t pvmsel : 3; /* [7:5] */
  135. __IO uint32_t bpwen : 1; /* [8] */
  136. __IO uint32_t reserved1 : 23;/* [31:9] */
  137. } ctrl_bit;
  138. };
  139. /**
  140. * @brief pwc ctrlsts register, offset:0x04
  141. */
  142. union
  143. {
  144. __IO uint32_t ctrlsts;
  145. struct
  146. {
  147. __IO uint32_t swef : 1; /* [0] */
  148. __IO uint32_t sef : 1; /* [1] */
  149. __IO uint32_t pvmof : 1; /* [2] */
  150. __IO uint32_t reserved1 : 5; /* [7:3] */
  151. __IO uint32_t swpen1 : 1; /* [8] */
  152. __IO uint32_t swpen2 : 1; /* [9] */
  153. __IO uint32_t reserved2 : 3;/* [12:10] */
  154. __IO uint32_t swpen6 : 1; /* [13] */
  155. __IO uint32_t swpen7 : 1; /* [14] */
  156. __IO uint32_t reserved3 : 17;/* [31:15] */
  157. } ctrlsts_bit;
  158. };
  159. __IO uint32_t reserved1[2];
  160. /**
  161. * @brief pwc ldoov register, offset:0x10
  162. */
  163. union
  164. {
  165. __IO uint32_t ldoov;
  166. struct
  167. {
  168. __IO uint32_t ldoovsel : 2; /* [1:0] */
  169. __IO uint32_t reserved1 : 2; /* [3:2] */
  170. __IO uint32_t vrexlpen : 1; /* [4] */
  171. __IO uint32_t reserved2 : 27;/* [31:5] */
  172. } ldoov_bit;
  173. };
  174. } pwc_type;
  175. /**
  176. * @}
  177. */
  178. #define PWC ((pwc_type *) PWC_BASE)
  179. /** @defgroup PWC_exported_functions
  180. * @{
  181. */
  182. void pwc_reset(void);
  183. void pwc_battery_powered_domain_access(confirm_state new_state);
  184. void pwc_pvm_level_select(pwc_pvm_voltage_type pvm_voltage);
  185. void pwc_power_voltage_monitor_enable(confirm_state new_state);
  186. void pwc_wakeup_pin_enable(uint32_t pin_num, confirm_state new_state);
  187. void pwc_flag_clear(uint32_t pwc_flag);
  188. flag_status pwc_flag_get(uint32_t pwc_flag);
  189. void pwc_sleep_mode_enter(pwc_sleep_enter_type pwc_sleep_enter);
  190. void pwc_deep_sleep_mode_enter(pwc_deep_sleep_enter_type pwc_deep_sleep_enter);
  191. void pwc_voltage_regulate_set(pwc_regulator_type pwc_regulator);
  192. void pwc_standby_mode_enter(void);
  193. /**
  194. * @}
  195. */
  196. /**
  197. * @}
  198. */
  199. /**
  200. * @}
  201. */
  202. #ifdef __cplusplus
  203. }
  204. #endif
  205. #endif