ald_rmu.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. /**
  2. *********************************************************************************
  3. *
  4. * @file ald_rmu.h
  5. * @brief Header file of RMU module driver.
  6. *
  7. * @version V1.0
  8. * @date 04 Dec 2017
  9. * @author AE Team
  10. * @note
  11. *
  12. * Copyright (C) Shanghai Eastsoft Microelectronics Co. Ltd. All rights reserved.
  13. *
  14. ********************************************************************************
  15. */
  16. #ifndef __ALD_RMU_H__
  17. #define __ALD_RMU_H__
  18. #ifdef __cplusplus
  19. extern "C" {
  20. #endif
  21. #include "utils.h"
  22. /** @addtogroup ES32FXXX_ALD
  23. * @{
  24. */
  25. /** @addtogroup RMU
  26. * @{
  27. */
  28. /** @defgroup RMU_Public_Types RMU Public Types
  29. * @{
  30. */
  31. /**
  32. * @brief RMU BOR fliter
  33. */
  34. typedef enum {
  35. RMU_BORFLT_1 = 0x1, /**< 1 cycle */
  36. RMU_BORFLT_2 = 0x2, /**< 2 cycles */
  37. RMU_BORFLT_3 = 0x3, /**< 3 cycles */
  38. RMU_BORFLT_4 = 0x4, /**< 4 cycles */
  39. RMU_BORFLT_5 = 0x5, /**< 5 cycles */
  40. RMU_BORFLT_6 = 0x6, /**< 6 cycles */
  41. RMU_BORFLT_7 = 0x7, /**< 7 cycles */
  42. } rmu_bor_filter_t;
  43. /**
  44. * @brief RMU BOR voltage
  45. */
  46. typedef enum {
  47. RMU_VOL_1_7 = 0x0, /**< 1.7V */
  48. RMU_VOL_2_0 = 0x1, /**< 2.0V */
  49. RMU_VOL_2_1 = 0x2, /**< 2.1V */
  50. RMU_VOL_2_2 = 0x3, /**< 2.2V */
  51. RMU_VOL_2_3 = 0x4, /**< 2.3V */
  52. RMU_VOL_2_4 = 0x5, /**< 2.4V */
  53. RMU_VOL_2_5 = 0x6, /**< 2.5V */
  54. RMU_VOL_2_6 = 0x7, /**< 2.6V */
  55. RMU_VOL_2_8 = 0x8, /**< 2.8V */
  56. RMU_VOL_3_0 = 0x9, /**< 3.0V */
  57. RMU_VOL_3_1 = 0xA, /**< 3.1V */
  58. RMU_VOL_3_3 = 0xB, /**< 3.3V */
  59. RMU_VOL_3_6 = 0xC, /**< 3.6V */
  60. RMU_VOL_3_7 = 0xD, /**< 3.7V */
  61. RMU_VOL_4_0 = 0xE, /**< 4.0V */
  62. RMU_VOL_4_3 = 0xF, /**< 4.3V */
  63. } rmu_bor_vol_t;
  64. /**
  65. * @brief RMU reset status
  66. */
  67. typedef enum {
  68. RMU_RST_POR = (1U << 0), /**< POR */
  69. RMU_RST_WAKEUP = (1U << 1), /**< WAKEUP */
  70. RMU_RST_BOR = (1U << 2), /**< BOR */
  71. RMU_RST_NMRST = (1U << 3), /**< NMRST */
  72. RMU_RST_IWDT = (1U << 4), /**< IWDT */
  73. RMU_RST_WWDT = (1U << 5), /**< WWDT */
  74. RMU_RST_LOCKUP = (1U << 6), /**< LOCKUP */
  75. RMU_RST_CHIP = (1U << 7), /**< CHIP */
  76. RMU_RST_MCU = (1U << 8), /**< MCU */
  77. RMU_RST_CPU = (1U << 9), /**< CPU */
  78. RMU_RST_CFG = (1U << 10), /**< CFG */
  79. RMU_RST_CFGERR = (1U << 16), /**< CFG Error */
  80. } rmu_state_t;
  81. /**
  82. * @brief RMU periperal select bit
  83. */
  84. typedef enum {
  85. RMU_PERH_GPIO = (1U << 0), /**< AHB1: GPIO */
  86. RMU_PERH_CRC = (1U << 1), /**< AHB1: CRC */
  87. RMU_PERH_CALC = (1U << 2), /**< AHB1: CALC */
  88. RMU_PERH_CRYPT = (1U << 3), /**< AHB1: CRYPT */
  89. RMU_PERH_TRNG = (1U << 4), /**< AHB1: TRNG */
  90. RMU_PERH_PIS = (1U << 5), /**< AHB1: PIS */
  91. RMU_PERH_CHIP = (1U << 0) | (1U << 27), /**< AHB2: CHIP */
  92. RMU_PERH_CPU = (1U << 1) | (1U << 27), /**< AHB2: CPU */
  93. RMU_PERH_TIM0 = (1U << 0) | (1U << 28), /**< APB1: TIM0 */
  94. RMU_PERH_TIM1 = (1U << 1) | (1U << 28), /**< APB1: TIM1 */
  95. RMU_PERH_TIM2 = (1U << 2) | (1U << 28), /**< APB1: TIM2 */
  96. RMU_PERH_TIM3 = (1U << 3) | (1U << 28), /**< APB1: TIM3 */
  97. RMU_PERH_TIM4 = (1U << 4) | (1U << 28), /**< APB1: TIM4 */
  98. RMU_PERH_TIM5 = (1U << 5) | (1U << 28), /**< APB1: TIM5 */
  99. RMU_PERH_TIM6 = (1U << 6) | (1U << 28), /**< APB1: TIM6 */
  100. RMU_PERH_TIM7 = (1U << 7) | (1U << 28), /**< APB1: TIM7 */
  101. RMU_PERH_UART0 = (1U << 8) | (1U << 28), /**< APB1: UART0 */
  102. RMU_PERH_UART1 = (1U << 9) | (1U << 28), /**< APB1: UART1 */
  103. RMU_PERH_UART2 = (1U << 10) | (1U << 28), /**< APB1: UART2 */
  104. RMU_PERH_UART3 = (1U << 11) | (1U << 28), /**< APB1: UART3 */
  105. RMU_PERH_USART0 = (1U << 12) | (1U << 28), /**< APB1: EUART0 */
  106. RMU_PERH_USART1 = (1U << 13) | (1U << 28), /**< APB1: EUART1 */
  107. RMU_PERH_SPI0 = (1U << 16) | (1U << 28), /**< APB1: SPI0 */
  108. RMU_PERH_SPI1 = (1U << 17) | (1U << 28), /**< APB1: SPI1 */
  109. RMU_PERH_SPI2 = (1U << 18) | (1U << 28), /**< APB1: SPI2 */
  110. RMU_PERH_I2C0 = (1U << 20) | (1U << 28), /**< APB1: I2C0 */
  111. RMU_PERH_I2C1 = (1U << 21) | (1U << 28), /**< APB1: I2C1 */
  112. RMU_PERH_CAN0 = (1U << 24) | (1U << 28), /**< APB1: CAN0 */
  113. RMU_PERH_LPTIM0 = (1U << 0) | (1U << 29), /**< APB2: LPTIM0 */
  114. RMU_PERH_LPUART0 = (1U << 2) | (1U << 29), /**< APB2: LPUART */
  115. RMU_PERH_ADC0 = (1U << 4) | (1U << 29), /**< APB2: ADC0 */
  116. RMU_PERH_ADC1 = (1U << 5) | (1U << 29), /**< APB2: ADC1 */
  117. RMU_PERH_ACMP0 = (1U << 6) | (1U << 29), /**< APB2: ACMP0 */
  118. RMU_PERH_ACMP1 = (1U << 7) | (1U << 29), /**< APB2: ACMP1 */
  119. RMU_PERH_OPAMP = (1U << 8) | (1U << 29), /**< APB2: OPAMP */
  120. RMU_PERH_DAC0 = (1U << 9) | (1U << 29), /**< APB2: DAC0 */
  121. RMU_PERH_WWDT = (1U << 12) | (1U << 29), /**< APB2: WWDT */
  122. RMU_PERH_LCD = (1U << 13) | (1U << 29), /**< APB2: LCD */
  123. RMU_PERH_IWDT = (1U << 14) | (1U << 29), /**< APB2: IWDT */
  124. RMU_PERH_RTC = (1U << 15) | (1U << 29), /**< APB2: RTC */
  125. RMU_PERH_TEMP = (1U << 16) | (1U << 29), /**< APB2: TEMP */
  126. RMU_PERH_BKPC = (1U << 17) | (1U << 29), /**< APB2: BKPC */
  127. RMU_PERH_BKPRAM = (1U << 18) | (1U << 29), /**< APB2: BKPRAM */
  128. } rmu_peripheral_t;
  129. /**
  130. * @}
  131. */
  132. /**
  133. * @defgroup RMU_Private_Macros RMU Private Macros
  134. * @{
  135. */
  136. #define IS_RMU_BORFLT(x) (((x) == RMU_BORFLT_1) || \
  137. ((x) == RMU_BORFLT_2) || \
  138. ((x) == RMU_BORFLT_3) || \
  139. ((x) == RMU_BORFLT_4) || \
  140. ((x) == RMU_BORFLT_5) || \
  141. ((x) == RMU_BORFLT_6) || \
  142. ((x) == RMU_BORFLT_7))
  143. #define IS_RMU_BORVOL(x) (((x) == RMU_VOL_1_7) || \
  144. ((x) == RMU_VOL_2_0) || \
  145. ((x) == RMU_VOL_2_1) || \
  146. ((x) == RMU_VOL_2_2) || \
  147. ((x) == RMU_VOL_2_3) || \
  148. ((x) == RMU_VOL_2_4) || \
  149. ((x) == RMU_VOL_2_5) || \
  150. ((x) == RMU_VOL_2_6) || \
  151. ((x) == RMU_VOL_2_8) || \
  152. ((x) == RMU_VOL_3_0) || \
  153. ((x) == RMU_VOL_3_1) || \
  154. ((x) == RMU_VOL_3_3) || \
  155. ((x) == RMU_VOL_3_6) || \
  156. ((x) == RMU_VOL_3_7) || \
  157. ((x) == RMU_VOL_4_0) || \
  158. ((x) == RMU_VOL_4_3))
  159. #define IS_RMU_STATE(x) (((x) == RMU_RST_POR) || \
  160. ((x) == RMU_RST_WAKEUP) || \
  161. ((x) == RMU_RST_BOR) || \
  162. ((x) == RMU_RST_NMRST) || \
  163. ((x) == RMU_RST_IWDT) || \
  164. ((x) == RMU_RST_WWDT) || \
  165. ((x) == RMU_RST_LOCKUP) || \
  166. ((x) == RMU_RST_CHIP) || \
  167. ((x) == RMU_RST_MCU) || \
  168. ((x) == RMU_RST_CPU) || \
  169. ((x) == RMU_RST_CFG) || \
  170. ((x) == RMU_RST_CFGERR))
  171. #define IS_RMU_STATE_CLEAR(x) (((x) == RMU_RST_POR) || \
  172. ((x) == RMU_RST_WAKEUP) || \
  173. ((x) == RMU_RST_BOR) || \
  174. ((x) == RMU_RST_NMRST) || \
  175. ((x) == RMU_RST_IWDT) || \
  176. ((x) == RMU_RST_WWDT) || \
  177. ((x) == RMU_RST_LOCKUP) || \
  178. ((x) == RMU_RST_CHIP) || \
  179. ((x) == RMU_RST_MCU) || \
  180. ((x) == RMU_RST_CPU) || \
  181. ((x) == RMU_RST_CFG))
  182. #define IS_RMU_PERH(x) (((x) == RMU_PERH_GPIO) || \
  183. ((x) == RMU_PERH_CRC) || \
  184. ((x) == RMU_PERH_CALC) || \
  185. ((x) == RMU_PERH_CRYPT) || \
  186. ((x) == RMU_PERH_TRNG) || \
  187. ((x) == RMU_PERH_PIS) || \
  188. ((x) == RMU_PERH_CHIP) || \
  189. ((x) == RMU_PERH_CPU) || \
  190. ((x) == RMU_PERH_TIM0) || \
  191. ((x) == RMU_PERH_TIM1) || \
  192. ((x) == RMU_PERH_TIM2) || \
  193. ((x) == RMU_PERH_TIM3) || \
  194. ((x) == RMU_PERH_TIM4) || \
  195. ((x) == RMU_PERH_TIM5) || \
  196. ((x) == RMU_PERH_TIM6) || \
  197. ((x) == RMU_PERH_TIM7) || \
  198. ((x) == RMU_PERH_UART0) || \
  199. ((x) == RMU_PERH_UART1) || \
  200. ((x) == RMU_PERH_UART2) || \
  201. ((x) == RMU_PERH_UART3) || \
  202. ((x) == RMU_PERH_USART0) || \
  203. ((x) == RMU_PERH_USART1) || \
  204. ((x) == RMU_PERH_SPI0) || \
  205. ((x) == RMU_PERH_SPI1) || \
  206. ((x) == RMU_PERH_SPI2) || \
  207. ((x) == RMU_PERH_I2C0) || \
  208. ((x) == RMU_PERH_I2C1) || \
  209. ((x) == RMU_PERH_CAN0) || \
  210. ((x) == RMU_PERH_LPTIM0) || \
  211. ((x) == RMU_PERH_LPUART0) || \
  212. ((x) == RMU_PERH_ADC0) || \
  213. ((x) == RMU_PERH_ADC1) || \
  214. ((x) == RMU_PERH_ACMP0) || \
  215. ((x) == RMU_PERH_ACMP1) || \
  216. ((x) == RMU_PERH_OPAMP) || \
  217. ((x) == RMU_PERH_DAC0) || \
  218. ((x) == RMU_PERH_WWDT) || \
  219. ((x) == RMU_PERH_LCD) || \
  220. ((x) == RMU_PERH_IWDT) || \
  221. ((x) == RMU_PERH_RTC) || \
  222. ((x) == RMU_PERH_TEMP) || \
  223. ((x) == RMU_PERH_BKPC) || \
  224. ((x) == RMU_PERH_BKPRAM))
  225. /**
  226. * @}
  227. */
  228. /** @addtogroup RMU_Public_Functions
  229. * @{
  230. */
  231. void rmu_bor_config(rmu_bor_filter_t flt, rmu_bor_vol_t vol, type_func_t state);
  232. flag_status_t rmu_get_reset_status(rmu_state_t state);
  233. void rmu_clear_reset_status(rmu_state_t state);
  234. void rmu_reset_periperal(rmu_peripheral_t perh);
  235. /**
  236. * @}
  237. */
  238. /**
  239. * @}
  240. */
  241. /**
  242. * @}
  243. */
  244. #ifdef __cplusplus
  245. }
  246. #endif
  247. #endif /* __ALD_RMU_H__ */