hal_iwdg.c 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. ////////////////////////////////////////////////////////////////////////////////
  2. /// @file hal_iwdg.c
  3. /// @author AE TEAM
  4. /// @brief THIS FILE PROVIDES ALL THE IWDG FIRMWARE FUNCTIONS.
  5. ////////////////////////////////////////////////////////////////////////////////
  6. /// @attention
  7. ///
  8. /// THE EXISTING FIRMWARE IS ONLY FOR REFERENCE, WHICH IS DESIGNED TO PROVIDE
  9. /// CUSTOMERS WITH CODING INFORMATION ABOUT THEIR PRODUCTS SO THEY CAN SAVE
  10. /// TIME. THEREFORE, MINDMOTION SHALL NOT BE LIABLE FOR ANY DIRECT, INDIRECT OR
  11. /// CONSEQUENTIAL DAMAGES ABOUT ANY CLAIMS ARISING OUT OF THE CONTENT OF SUCH
  12. /// HARDWARE AND/OR THE USE OF THE CODING INFORMATION CONTAINED HEREIN IN
  13. /// CONNECTION WITH PRODUCTS MADE BY CUSTOMERS.
  14. ///
  15. /// <H2><CENTER>&COPY; COPYRIGHT MINDMOTION </CENTER></H2>
  16. ////////////////////////////////////////////////////////////////////////////////
  17. // Define to prevent recursive inclusion
  18. #define _HAL_IWDG_C_
  19. // Files includes
  20. #include "hal_iwdg.h"
  21. ////////////////////////////////////////////////////////////////////////////////
  22. /// @addtogroup MM32_Hardware_Abstract_Layer
  23. /// @{
  24. ////////////////////////////////////////////////////////////////////////////////
  25. /// @addtogroup IWDG_HAL
  26. /// @{
  27. ////////////////////////////////////////////////////////////////////////////////
  28. /// @addtogroup IWDG_Exported_Functions
  29. /// @{
  30. ////////////////////////////////////////////////////////////////////////////////
  31. /// @brief Enables or disables write access to IWDG_PR and IWDG_RLR
  32. /// registers.
  33. /// @param write_access: new state of write access to IWDG_PR and
  34. /// IWDG_RLR registers.
  35. /// This parameter can be one of the following values:
  36. /// @arg IWDG_WriteAccess_Enable: Enable write access to
  37. /// IWDG_PR and IWDG_RLR registers
  38. /// @arg IWDG_WriteAccess_Disable: Disable write access to
  39. /// IWDG_PR and IWDG_RLR registers
  40. /// @retval None.
  41. ////////////////////////////////////////////////////////////////////////////////
  42. void IWDG_WriteAccessCmd(u16 write_access)
  43. {
  44. IWDG->KR = write_access;
  45. }
  46. ////////////////////////////////////////////////////////////////////////////////
  47. /// @brief Sets IWDG Prescaler value.
  48. /// @param prescaler: specifies the IWDG Prescaler value.
  49. /// This parameter can be one of the following values:
  50. /// @arg IWDG_Prescaler_4: IWDG prescaler set to 4
  51. /// @arg IWDG_Prescaler_8: IWDG prescaler set to 8
  52. /// @arg IWDG_Prescaler_16: IWDG prescaler set to 16
  53. /// @arg IWDG_Prescaler_32: IWDG prescaler set to 32
  54. /// @arg IWDG_Prescaler_64: IWDG prescaler set to 64
  55. /// @arg IWDG_Prescaler_128: IWDG prescaler set to 128
  56. /// @arg IWDG_Prescaler_256: IWDG prescaler set to 256
  57. /// @retval None.
  58. ////////////////////////////////////////////////////////////////////////////////
  59. void IWDG_SetPrescaler(u8 prescaler)
  60. {
  61. IWDG->PR = prescaler;
  62. PVU_CheckStatus();
  63. }
  64. ////////////////////////////////////////////////////////////////////////////////
  65. /// @brief Set IWDG reload value.
  66. /// @param reload: specifies the IWDG reload value.
  67. /// This parameter must be a number between 0 and 0x0FFF.
  68. /// @retval None.
  69. ////////////////////////////////////////////////////////////////////////////////
  70. void IWDG_SetReload(u16 reload)
  71. {
  72. IWDG->RLR = reload;
  73. RVU_CheckStatus();
  74. }
  75. ////////////////////////////////////////////////////////////////////////////////
  76. /// @brief Get IWDG reload value.
  77. /// @param None.
  78. /// @retval reload: specifies the IWDG reload value.
  79. ////////////////////////////////////////////////////////////////////////////////
  80. u32 IWDG_GetReload(void)
  81. {
  82. return IWDG->RLR;
  83. }
  84. ////////////////////////////////////////////////////////////////////////////////
  85. /// @brief Reloads IWDG counter with value defined in the reload register
  86. /// (write access to IWDG_PR and IWDG_RLR registers disabled).
  87. /// @param None.
  88. /// @retval None.
  89. ////////////////////////////////////////////////////////////////////////////////
  90. void IWDG_ReloadCounter(void)
  91. {
  92. IWDG->KR = KR_KEY_Reload;
  93. }
  94. ////////////////////////////////////////////////////////////////////////////////
  95. /// @brief Enables IWDG (write access to IWDG_PR and IWDG_RLR registers
  96. /// disabled).
  97. /// @param None.
  98. /// @retval None.
  99. ////////////////////////////////////////////////////////////////////////////////
  100. void IWDG_Enable(void)
  101. {
  102. IWDG->KR = KR_KEY_Enable;
  103. }
  104. ////////////////////////////////////////////////////////////////////////////////
  105. /// @brief Checks whether the specified IWDG flag is set or not.
  106. /// @param flag: specifies the flag to check.
  107. /// This parameter can be one of the following values:
  108. /// @arg IWDG_FLAG_PVU: Prescaler Value Update on going
  109. /// @arg IWDG_FLAG_RVU: reload Value Update on going
  110. /// @retval The new state of flag (SET or RESET).
  111. ////////////////////////////////////////////////////////////////////////////////
  112. FlagStatus IWDG_GetFlagStatus(u16 flag)
  113. {
  114. return ((IWDG->SR & flag) != (u32)RESET) ? SET : RESET;
  115. }
  116. ////////////////////////////////////////////////////////////////////////////////
  117. /// @brief Checks prescaler value has been updated.
  118. /// @param None.
  119. /// @retval None.
  120. ////////////////////////////////////////////////////////////////////////////////
  121. void PVU_CheckStatus(void)
  122. {
  123. while (IWDG_GetFlagStatus(IWDG_FLAG_PVU) == SET);
  124. }
  125. ////////////////////////////////////////////////////////////////////////////////
  126. /// @brief Checks count relead value has been updated.
  127. /// @param None.
  128. /// @retval None.
  129. ////////////////////////////////////////////////////////////////////////////////
  130. void RVU_CheckStatus(void)
  131. {
  132. while (IWDG_GetFlagStatus(IWDG_FLAG_RVU) == SET);
  133. }
  134. ////////////////////////////////////////////////////////////////////////////////
  135. /// @brief IWDG overflow configuration.
  136. /// @param overflow_config
  137. /// @arg IWDG_Overflow_Interrupt: Interrupt after overflow.
  138. /// @arg IWDG_Overflow_Reset: Reset after overflow.
  139. /// @retval None.
  140. ////////////////////////////////////////////////////////////////////////////////
  141. void IWDG_OverflowConfig(IWDGOverflowConfig_TypeDef overflow_config)
  142. {
  143. IWDG->CR &= ~IWDG_CR_IRQSEL;
  144. IWDG->CR |= overflow_config;
  145. }
  146. ////////////////////////////////////////////////////////////////////////////////
  147. /// @brief Clear interrupt flag
  148. /// @param None.
  149. /// @retval None.
  150. ////////////////////////////////////////////////////////////////////////////////
  151. void IWDG_ClearITPendingBit(void)
  152. {
  153. IWDG->CR |= IWDG_CR_IRQCLR;//write 1 clear interrupt Flag
  154. }
  155. ////////////////////////////////////////////////////////////////////////////////
  156. /// @brief Clear interrupt flag
  157. /// @param None.
  158. /// @retval None.
  159. ////////////////////////////////////////////////////////////////////////////////
  160. void IWDG_ClearIT(void)
  161. {
  162. IWDG->CR |= IWDG_CR_IRQCLR;//write 1 clear interrupt Flag
  163. }
  164. ////////////////////////////////////////////////////////////////////////////////
  165. /// @brief Enable IWDG interrupt function
  166. /// @param None.
  167. /// @retval None.
  168. ////////////////////////////////////////////////////////////////////////////////
  169. void IWDG_EnableIT(void)
  170. {
  171. IWDG->CR |= IWDG_CR_IRQSEL;
  172. }
  173. ////////////////////////////////////////////////////////////////////////////////
  174. /// @brief Disable IWDG interrupt function
  175. /// @param None.
  176. /// @retval None.
  177. ////////////////////////////////////////////////////////////////////////////////
  178. void IWDG_Reset(void)
  179. {
  180. IWDG->CR &= ~IWDG_CR_IRQSEL;
  181. }
  182. /// @}
  183. /// @}
  184. /// @}