fm33lc0xx_fl_iwdt.h 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309
  1. /**
  2. *******************************************************************************************************
  3. * @file fm33lc0xx_fl_iwdt.h
  4. * @author FMSH Application Team
  5. * @brief Head file of IWDT FL Module
  6. *******************************************************************************************************
  7. * @attention
  8. *
  9. * Copyright (c) [2019] [Fudan Microelectronics]
  10. * THIS SOFTWARE is licensed under the Mulan PSL v1.
  11. * can use this software according to the terms and conditions of the Mulan PSL v1.
  12. * You may obtain a copy of Mulan PSL v1 at:
  13. * http://license.coscl.org.cn/MulanPSL
  14. * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
  15. * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
  16. * PURPOSE.
  17. * See the Mulan PSL v1 for more details.
  18. *
  19. *******************************************************************************************************
  20. */
  21. /* Define to prevent recursive inclusion---------------------------------------------------------------*/
  22. #ifndef __FM33LC0XX_FL_IWDT_H
  23. #define __FM33LC0XX_FL_IWDT_H
  24. #ifdef __cplusplus
  25. extern "C" {
  26. #endif
  27. /* Includes -------------------------------------------------------------------------------------------*/
  28. #include "fm33lc0xx_fl.h"
  29. /** @addtogroup FM33LC0XX_FL_Driver
  30. * @{
  31. */
  32. /** @defgroup IWDT IWDT
  33. * @brief IWDT FL driver
  34. * @{
  35. */
  36. /* Exported types -------------------------------------------------------------------------------------*/
  37. /** @defgroup IWDT_FL_ES_INIT IWDT Exported Init structures
  38. * @{
  39. */
  40. /**
  41. * @brief IWDT Init Sturcture definition
  42. */
  43. typedef struct
  44. {
  45. /** 看门狗溢出时间 */
  46. uint32_t overflowPeriod;
  47. /** 清狗窗口 */
  48. uint32_t iwdtWindows;
  49. } FL_IWDT_InitTypeDef;
  50. /**
  51. * @}
  52. */
  53. /* Exported constants ---------------------------------------------------------------------------------*/
  54. /** @defgroup IWDT_FL_Exported_Constants IWDT Exported Constants
  55. * @{
  56. */
  57. #define IWDT_CR_FREEZE_Pos (11U)
  58. #define IWDT_CR_FREEZE_Msk (0x1U << IWDT_CR_FREEZE_Pos)
  59. #define IWDT_CR_FREEZE IWDT_CR_FREEZE_Msk
  60. #define IWDT_CR_CFG_Pos (0U)
  61. #define IWDT_CR_CFG_Msk (0x7U << IWDT_CR_CFG_Pos)
  62. #define IWDT_CR_CFG IWDT_CR_CFG_Msk
  63. #define IWDT_IER_IE_Pos (0U)
  64. #define IWDT_IER_IE_Msk (0x1U << IWDT_IER_IE_Pos)
  65. #define IWDT_IER_IE IWDT_IER_IE_Msk
  66. #define IWDT_ISR_WINF_Pos (0U)
  67. #define IWDT_ISR_WINF_Msk (0x1U << IWDT_ISR_WINF_Pos)
  68. #define IWDT_ISR_WINF IWDT_ISR_WINF_Msk
  69. #define FL_IWDT_RELOAD_KEY 0x12345A5AU
  70. #define FL_IWDT_PERIOD_125MS (0x0U << IWDT_CR_CFG_Pos)
  71. #define FL_IWDT_PERIOD_250MS (0x1U << IWDT_CR_CFG_Pos)
  72. #define FL_IWDT_PERIOD_500MS (0x2U << IWDT_CR_CFG_Pos)
  73. #define FL_IWDT_PERIOD_1000MS (0x3U << IWDT_CR_CFG_Pos)
  74. #define FL_IWDT_PERIOD_2000MS (0x4U << IWDT_CR_CFG_Pos)
  75. #define FL_IWDT_PERIOD_4000MS (0x5U << IWDT_CR_CFG_Pos)
  76. #define FL_IWDT_PERIOD_8000MS (0x6U << IWDT_CR_CFG_Pos)
  77. #define FL_IWDT_PERIOD_16000MS (0x7U << IWDT_CR_CFG_Pos)
  78. /**
  79. * @}
  80. */
  81. /* Exported functions ---------------------------------------------------------------------------------*/
  82. /** @defgroup IWDT_FL_Exported_Functions IWDT Exported Functions
  83. * @{
  84. */
  85. /**
  86. * @brief Set IWDT service register
  87. * @rmtoll SERV FL_IWDT_ReloadCounter
  88. * @param IWDTx IWDT instance
  89. * @retval None
  90. */
  91. __STATIC_INLINE void FL_IWDT_ReloadCounter(IWDT_Type *IWDTx)
  92. {
  93. IWDTx->SERV = FL_IWDT_RELOAD_KEY;
  94. }
  95. /**
  96. * @brief Set freeze in sleep enable
  97. * @rmtoll CR FREEZE FL_IWDT_EnableFreezeWhileSleep
  98. * @param IWDTx IWDT instance
  99. * @retval None
  100. */
  101. __STATIC_INLINE void FL_IWDT_EnableFreezeWhileSleep(IWDT_Type *IWDTx)
  102. {
  103. SET_BIT(IWDTx->CR, IWDT_CR_FREEZE_Msk);
  104. }
  105. /**
  106. * @brief Set freeze in sleep disable
  107. * @rmtoll CR FREEZE FL_IWDT_DisableFreezeWhileSleep
  108. * @param IWDTx IWDT instance
  109. * @retval None
  110. */
  111. __STATIC_INLINE void FL_IWDT_DisableFreezeWhileSleep(IWDT_Type *IWDTx)
  112. {
  113. CLEAR_BIT(IWDTx->CR, IWDT_CR_FREEZE_Msk);
  114. }
  115. /**
  116. * @brief Get freeze in sleep enable status
  117. * @rmtoll CR FREEZE FL_IWDT_IsEnabledFreezeWhileSleep
  118. * @param IWDTx IWDT instance
  119. * @retval State of bit (1 or 0).
  120. */
  121. __STATIC_INLINE uint32_t FL_IWDT_IsEnabledFreezeWhileSleep(IWDT_Type *IWDTx)
  122. {
  123. return (uint32_t)(READ_BIT(IWDTx->CR, IWDT_CR_FREEZE_Msk) == IWDT_CR_FREEZE_Msk);
  124. }
  125. /**
  126. * @brief Set IWDT overflow period
  127. * @rmtoll CR CFG FL_IWDT_SetPeriod
  128. * @param IWDTx IWDT instance
  129. * @param period This parameter can be one of the following values:
  130. * @arg @ref FL_IWDT_PERIOD_125MS
  131. * @arg @ref FL_IWDT_PERIOD_250MS
  132. * @arg @ref FL_IWDT_PERIOD_500MS
  133. * @arg @ref FL_IWDT_PERIOD_1000MS
  134. * @arg @ref FL_IWDT_PERIOD_2000MS
  135. * @arg @ref FL_IWDT_PERIOD_4000MS
  136. * @arg @ref FL_IWDT_PERIOD_8000MS
  137. * @arg @ref FL_IWDT_PERIOD_16000MS
  138. * @retval None
  139. */
  140. __STATIC_INLINE void FL_IWDT_SetPeriod(IWDT_Type *IWDTx, uint32_t period)
  141. {
  142. MODIFY_REG(IWDTx->CR, IWDT_CR_CFG_Msk, period);
  143. }
  144. /**
  145. * @brief Get IWDT overflow period
  146. * @rmtoll CR CFG FL_IWDT_GetPeriod
  147. * @param IWDTx IWDT instance
  148. * @retval Returned value can be one of the following values:
  149. * @arg @ref FL_IWDT_PERIOD_125MS
  150. * @arg @ref FL_IWDT_PERIOD_250MS
  151. * @arg @ref FL_IWDT_PERIOD_500MS
  152. * @arg @ref FL_IWDT_PERIOD_1000MS
  153. * @arg @ref FL_IWDT_PERIOD_2000MS
  154. * @arg @ref FL_IWDT_PERIOD_4000MS
  155. * @arg @ref FL_IWDT_PERIOD_8000MS
  156. * @arg @ref FL_IWDT_PERIOD_16000MS
  157. */
  158. __STATIC_INLINE uint32_t FL_IWDT_GetPeriod(IWDT_Type *IWDTx)
  159. {
  160. return (uint32_t)(READ_BIT(IWDTx->CR, IWDT_CR_CFG_Msk));
  161. }
  162. /**
  163. * @brief Get IWDT current counter value
  164. * @rmtoll CNT FL_IWDT_ReadCounter
  165. * @param IWDTx IWDT instance
  166. * @retval
  167. */
  168. __STATIC_INLINE uint32_t FL_IWDT_ReadCounter(IWDT_Type *IWDTx)
  169. {
  170. return (uint32_t)(READ_BIT(IWDTx->CNT, (0xfffU << 0U)) >> 0U);
  171. }
  172. /**
  173. * @brief Set IWDT window register
  174. * @rmtoll WIN FL_IWDT_WriteWindow
  175. * @param IWDTx IWDT instance
  176. * @param value
  177. * @retval None
  178. */
  179. __STATIC_INLINE void FL_IWDT_WriteWindow(IWDT_Type *IWDTx, uint32_t value)
  180. {
  181. MODIFY_REG(IWDTx->WIN, (0xfffU << 0U), (value << 0U));
  182. }
  183. /**
  184. * @brief Get IWDT window register
  185. * @rmtoll WIN FL_IWDT_ReadWindow
  186. * @param IWDTx IWDT instance
  187. * @retval
  188. */
  189. __STATIC_INLINE uint32_t FL_IWDT_ReadWindow(IWDT_Type *IWDTx)
  190. {
  191. return (uint32_t)(READ_BIT(IWDTx->WIN, (0xfffU << 0U)) >> 0U);
  192. }
  193. /**
  194. * @brief IWDT interrupt enable
  195. * @rmtoll IER IE FL_IWDT_EnableIT_EnterWindow
  196. * @param IWDTx IWDT instance
  197. * @retval None
  198. */
  199. __STATIC_INLINE void FL_IWDT_EnableIT_EnterWindow(IWDT_Type *IWDTx)
  200. {
  201. SET_BIT(IWDTx->IER, IWDT_IER_IE_Msk);
  202. }
  203. /**
  204. * @brief IWDT interrupt disable
  205. * @rmtoll IER IE FL_IWDT_DisableIT_EnterWindow
  206. * @param IWDTx IWDT instance
  207. * @retval None
  208. */
  209. __STATIC_INLINE void FL_IWDT_DisableIT_EnterWindow(IWDT_Type *IWDTx)
  210. {
  211. CLEAR_BIT(IWDTx->IER, IWDT_IER_IE_Msk);
  212. }
  213. /**
  214. * @brief Get IWDT interrupt enable status
  215. * @rmtoll IER IE FL_IWDT_IsEnabledIT_EnterWindow
  216. * @param IWDTx IWDT instance
  217. * @retval State of bit (1 or 0).
  218. */
  219. __STATIC_INLINE uint32_t FL_IWDT_IsEnabledIT_EnterWindow(IWDT_Type *IWDTx)
  220. {
  221. return (uint32_t)(READ_BIT(IWDTx->IER, IWDT_IER_IE_Msk) == IWDT_IER_IE_Msk);
  222. }
  223. /**
  224. * @brief Get IWDT window interrupt flag
  225. * @rmtoll ISR WINF FL_IWDT_IsActiveFlag_EnterWindow
  226. * @param IWDTx IWDT instance
  227. * @retval State of bit (1 or 0).
  228. */
  229. __STATIC_INLINE uint32_t FL_IWDT_IsActiveFlag_EnterWindow(IWDT_Type *IWDTx)
  230. {
  231. return (uint32_t)(READ_BIT(IWDTx->ISR, IWDT_ISR_WINF_Msk) == (IWDT_ISR_WINF_Msk));
  232. }
  233. /**
  234. * @brief Clear IWDT window interrupt flag
  235. * @rmtoll ISR WINF FL_IWDT_ClearFlag_EnterWindow
  236. * @param IWDTx IWDT instance
  237. * @retval None
  238. */
  239. __STATIC_INLINE void FL_IWDT_ClearFlag_EnterWindow(IWDT_Type *IWDTx)
  240. {
  241. WRITE_REG(IWDTx->ISR, IWDT_ISR_WINF_Msk);
  242. }
  243. /**
  244. * @}
  245. */
  246. /** @defgroup IWDT_FL_EF_Init Initialization and de-initialization functions
  247. * @{
  248. */
  249. FL_ErrorStatus FL_IWDT_DeInit(IWDT_Type *IWDTx);
  250. void FL_IWDT_StructInit(FL_IWDT_InitTypeDef *IWDT_InitStruct);
  251. FL_ErrorStatus FL_IWDT_Init(IWDT_Type *IWDTx, FL_IWDT_InitTypeDef *IWDT_InitStruct);
  252. /**
  253. * @}
  254. */
  255. /**
  256. * @}
  257. */
  258. /**
  259. * @}
  260. */
  261. #ifdef __cplusplus
  262. }
  263. #endif
  264. #endif /* __FM33LC0XX_FL_IWDT_H*/
  265. /*************************Py_Code_Generator Version: 0.1-0.11-0.2 @ 2020-09-27*************************/
  266. /*************************(C) COPYRIGHT Fudan Microelectronics **** END OF FILE*************************/