STM32H735xx HAL User Manual
stm32h7xx_ll_iwdg.h
Go to the documentation of this file.
00001 /**
00002   ******************************************************************************
00003   * @file    stm32h7xx_ll_iwdg.h
00004   * @author  MCD Application Team
00005   * @brief   Header file of IWDG LL module.
00006   ******************************************************************************
00007   * @attention
00008   *
00009   * Copyright (c) 2017 STMicroelectronics.
00010   * All rights reserved.
00011   *
00012   * This software is licensed under terms that can be found in the LICENSE file
00013   * in the root directory of this software component.
00014   * If no LICENSE file comes with this software, it is provided AS-IS.
00015   *
00016   ******************************************************************************
00017   */
00018 
00019 /* Define to prevent recursive inclusion -------------------------------------*/
00020 #ifndef STM32H7xx_LL_IWDG_H
00021 #define STM32H7xx_LL_IWDG_H
00022 
00023 #ifdef __cplusplus
00024 extern "C" {
00025 #endif
00026 
00027 /* Includes ------------------------------------------------------------------*/
00028 #include "stm32h7xx.h"
00029 
00030 /** @addtogroup STM32H7xx_LL_Driver
00031   * @{
00032   */
00033 
00034 #if defined(IWDG1) || defined(IWDG2)
00035 
00036 /** @defgroup IWDG_LL IWDG
00037   * @{
00038   */
00039 
00040 /* Private types -------------------------------------------------------------*/
00041 /* Private variables ---------------------------------------------------------*/
00042 
00043 /* Private constants ---------------------------------------------------------*/
00044 /** @defgroup IWDG_LL_Private_Constants IWDG Private Constants
00045   * @{
00046   */
00047 #define LL_IWDG_KEY_RELOAD                 0x0000AAAAU               /*!< IWDG Reload Counter Enable   */
00048 #define LL_IWDG_KEY_ENABLE                 0x0000CCCCU               /*!< IWDG Peripheral Enable       */
00049 #define LL_IWDG_KEY_WR_ACCESS_ENABLE       0x00005555U               /*!< IWDG KR Write Access Enable  */
00050 #define LL_IWDG_KEY_WR_ACCESS_DISABLE      0x00000000U               /*!< IWDG KR Write Access Disable */
00051 /**
00052   * @}
00053   */
00054 
00055 /* Private macros ------------------------------------------------------------*/
00056 
00057 /* Exported types ------------------------------------------------------------*/
00058 /* Exported constants --------------------------------------------------------*/
00059 /** @defgroup IWDG_LL_Exported_Constants IWDG Exported Constants
00060   * @{
00061   */
00062 
00063 /** @defgroup IWDG_LL_EC_GET_FLAG Get Flags Defines
00064   * @brief    Flags defines which can be used with LL_IWDG_ReadReg function
00065   * @{
00066   */
00067 #define LL_IWDG_SR_PVU                     IWDG_SR_PVU                           /*!< Watchdog prescaler value update */
00068 #define LL_IWDG_SR_RVU                     IWDG_SR_RVU                           /*!< Watchdog counter reload value update */
00069 #define LL_IWDG_SR_WVU                     IWDG_SR_WVU                           /*!< Watchdog counter window value update */
00070 /**
00071   * @}
00072   */
00073 
00074 /** @defgroup IWDG_LL_EC_PRESCALER  Prescaler Divider
00075   * @{
00076   */
00077 #define LL_IWDG_PRESCALER_4                0x00000000U                           /*!< Divider by 4   */
00078 #define LL_IWDG_PRESCALER_8                (IWDG_PR_PR_0)                        /*!< Divider by 8   */
00079 #define LL_IWDG_PRESCALER_16               (IWDG_PR_PR_1)                        /*!< Divider by 16  */
00080 #define LL_IWDG_PRESCALER_32               (IWDG_PR_PR_1 | IWDG_PR_PR_0)         /*!< Divider by 32  */
00081 #define LL_IWDG_PRESCALER_64               (IWDG_PR_PR_2)                        /*!< Divider by 64  */
00082 #define LL_IWDG_PRESCALER_128              (IWDG_PR_PR_2 | IWDG_PR_PR_0)         /*!< Divider by 128 */
00083 #define LL_IWDG_PRESCALER_256              (IWDG_PR_PR_2 | IWDG_PR_PR_1)         /*!< Divider by 256 */
00084 /**
00085   * @}
00086   */
00087 
00088 /**
00089   * @}
00090   */
00091 
00092 /* Exported macro ------------------------------------------------------------*/
00093 /** @defgroup IWDG_LL_Exported_Macros IWDG Exported Macros
00094   * @{
00095   */
00096 
00097 /** @defgroup IWDG_LL_EM_WRITE_READ Common Write and read registers Macros
00098   * @{
00099   */
00100 
00101 /**
00102   * @brief  Write a value in IWDG register
00103   * @param  __INSTANCE__ IWDG Instance
00104   * @param  __REG__ Register to be written
00105   * @param  __VALUE__ Value to be written in the register
00106   * @retval None
00107   */
00108 #define LL_IWDG_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
00109 
00110 /**
00111   * @brief  Read a value in IWDG register
00112   * @param  __INSTANCE__ IWDG Instance
00113   * @param  __REG__ Register to be read
00114   * @retval Register value
00115   */
00116 #define LL_IWDG_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
00117 /**
00118   * @}
00119   */
00120 
00121 /**
00122   * @}
00123   */
00124 
00125 
00126 /* Exported functions --------------------------------------------------------*/
00127 /** @defgroup IWDG_LL_Exported_Functions IWDG Exported Functions
00128   * @{
00129   */
00130 /** @defgroup IWDG_LL_EF_Configuration Configuration
00131   * @{
00132   */
00133 
00134 /**
00135   * @brief  Start the Independent Watchdog
00136   * @note   Except if the hardware watchdog option is selected
00137   * @rmtoll KR           KEY           LL_IWDG_Enable
00138   * @param  IWDGx IWDG Instance
00139   * @retval None
00140   */
00141 __STATIC_INLINE void LL_IWDG_Enable(IWDG_TypeDef *IWDGx)
00142 {
00143   WRITE_REG(IWDGx->KR, LL_IWDG_KEY_ENABLE);
00144 }
00145 
00146 /**
00147   * @brief  Reloads IWDG counter with value defined in the reload register
00148   * @rmtoll KR           KEY           LL_IWDG_ReloadCounter
00149   * @param  IWDGx IWDG Instance
00150   * @retval None
00151   */
00152 __STATIC_INLINE void LL_IWDG_ReloadCounter(IWDG_TypeDef *IWDGx)
00153 {
00154   WRITE_REG(IWDGx->KR, LL_IWDG_KEY_RELOAD);
00155 }
00156 
00157 /**
00158   * @brief  Enable write access to IWDG_PR, IWDG_RLR and IWDG_WINR registers
00159   * @rmtoll KR           KEY           LL_IWDG_EnableWriteAccess
00160   * @param  IWDGx IWDG Instance
00161   * @retval None
00162   */
00163 __STATIC_INLINE void LL_IWDG_EnableWriteAccess(IWDG_TypeDef *IWDGx)
00164 {
00165   WRITE_REG(IWDGx->KR, LL_IWDG_KEY_WR_ACCESS_ENABLE);
00166 }
00167 
00168 /**
00169   * @brief  Disable write access to IWDG_PR, IWDG_RLR and IWDG_WINR registers
00170   * @rmtoll KR           KEY           LL_IWDG_DisableWriteAccess
00171   * @param  IWDGx IWDG Instance
00172   * @retval None
00173   */
00174 __STATIC_INLINE void LL_IWDG_DisableWriteAccess(IWDG_TypeDef *IWDGx)
00175 {
00176   WRITE_REG(IWDGx->KR, LL_IWDG_KEY_WR_ACCESS_DISABLE);
00177 }
00178 
00179 /**
00180   * @brief  Select the prescaler of the IWDG
00181   * @rmtoll PR           PR            LL_IWDG_SetPrescaler
00182   * @param  IWDGx IWDG Instance
00183   * @param  Prescaler This parameter can be one of the following values:
00184   *         @arg @ref LL_IWDG_PRESCALER_4
00185   *         @arg @ref LL_IWDG_PRESCALER_8
00186   *         @arg @ref LL_IWDG_PRESCALER_16
00187   *         @arg @ref LL_IWDG_PRESCALER_32
00188   *         @arg @ref LL_IWDG_PRESCALER_64
00189   *         @arg @ref LL_IWDG_PRESCALER_128
00190   *         @arg @ref LL_IWDG_PRESCALER_256
00191   * @retval None
00192   */
00193 __STATIC_INLINE void LL_IWDG_SetPrescaler(IWDG_TypeDef *IWDGx, uint32_t Prescaler)
00194 {
00195   WRITE_REG(IWDGx->PR, IWDG_PR_PR & Prescaler);
00196 }
00197 
00198 /**
00199   * @brief  Get the selected prescaler of the IWDG
00200   * @rmtoll PR           PR            LL_IWDG_GetPrescaler
00201   * @param  IWDGx IWDG Instance
00202   * @retval Returned value can be one of the following values:
00203   *         @arg @ref LL_IWDG_PRESCALER_4
00204   *         @arg @ref LL_IWDG_PRESCALER_8
00205   *         @arg @ref LL_IWDG_PRESCALER_16
00206   *         @arg @ref LL_IWDG_PRESCALER_32
00207   *         @arg @ref LL_IWDG_PRESCALER_64
00208   *         @arg @ref LL_IWDG_PRESCALER_128
00209   *         @arg @ref LL_IWDG_PRESCALER_256
00210   */
00211 __STATIC_INLINE uint32_t LL_IWDG_GetPrescaler(IWDG_TypeDef *IWDGx)
00212 {
00213   return (READ_REG(IWDGx->PR));
00214 }
00215 
00216 /**
00217   * @brief  Specify the IWDG down-counter reload value
00218   * @rmtoll RLR          RL            LL_IWDG_SetReloadCounter
00219   * @param  IWDGx IWDG Instance
00220   * @param  Counter Value between Min_Data=0 and Max_Data=0x0FFF
00221   * @retval None
00222   */
00223 __STATIC_INLINE void LL_IWDG_SetReloadCounter(IWDG_TypeDef *IWDGx, uint32_t Counter)
00224 {
00225   WRITE_REG(IWDGx->RLR, IWDG_RLR_RL & Counter);
00226 }
00227 
00228 /**
00229   * @brief  Get the specified IWDG down-counter reload value
00230   * @rmtoll RLR          RL            LL_IWDG_GetReloadCounter
00231   * @param  IWDGx IWDG Instance
00232   * @retval Value between Min_Data=0 and Max_Data=0x0FFF
00233   */
00234 __STATIC_INLINE uint32_t LL_IWDG_GetReloadCounter(IWDG_TypeDef *IWDGx)
00235 {
00236   return (READ_REG(IWDGx->RLR));
00237 }
00238 
00239 /**
00240   * @brief  Specify high limit of the window value to be compared to the down-counter.
00241   * @rmtoll WINR         WIN           LL_IWDG_SetWindow
00242   * @param  IWDGx IWDG Instance
00243   * @param  Window Value between Min_Data=0 and Max_Data=0x0FFF
00244   * @retval None
00245   */
00246 __STATIC_INLINE void LL_IWDG_SetWindow(IWDG_TypeDef *IWDGx, uint32_t Window)
00247 {
00248   WRITE_REG(IWDGx->WINR, IWDG_WINR_WIN & Window);
00249 }
00250 
00251 /**
00252   * @brief  Get the high limit of the window value specified.
00253   * @rmtoll WINR         WIN           LL_IWDG_GetWindow
00254   * @param  IWDGx IWDG Instance
00255   * @retval Value between Min_Data=0 and Max_Data=0x0FFF
00256   */
00257 __STATIC_INLINE uint32_t LL_IWDG_GetWindow(IWDG_TypeDef *IWDGx)
00258 {
00259   return (READ_REG(IWDGx->WINR));
00260 }
00261 
00262 /**
00263   * @}
00264   */
00265 
00266 /** @defgroup IWDG_LL_EF_FLAG_Management FLAG_Management
00267   * @{
00268   */
00269 
00270 /**
00271   * @brief  Check if flag Prescaler Value Update is set or not
00272   * @rmtoll SR           PVU           LL_IWDG_IsActiveFlag_PVU
00273   * @param  IWDGx IWDG Instance
00274   * @retval State of bit (1 or 0).
00275   */
00276 __STATIC_INLINE uint32_t LL_IWDG_IsActiveFlag_PVU(IWDG_TypeDef *IWDGx)
00277 {
00278   return ((READ_BIT(IWDGx->SR, IWDG_SR_PVU) == (IWDG_SR_PVU)) ? 1UL : 0UL);
00279 }
00280 
00281 /**
00282   * @brief  Check if flag Reload Value Update is set or not
00283   * @rmtoll SR           RVU           LL_IWDG_IsActiveFlag_RVU
00284   * @param  IWDGx IWDG Instance
00285   * @retval State of bit (1 or 0).
00286   */
00287 __STATIC_INLINE uint32_t LL_IWDG_IsActiveFlag_RVU(IWDG_TypeDef *IWDGx)
00288 {
00289   return ((READ_BIT(IWDGx->SR, IWDG_SR_RVU) == (IWDG_SR_RVU)) ? 1UL : 0UL);
00290 }
00291 
00292 /**
00293   * @brief  Check if flag Window Value Update is set or not
00294   * @rmtoll SR           WVU           LL_IWDG_IsActiveFlag_WVU
00295   * @param  IWDGx IWDG Instance
00296   * @retval State of bit (1 or 0).
00297   */
00298 __STATIC_INLINE uint32_t LL_IWDG_IsActiveFlag_WVU(IWDG_TypeDef *IWDGx)
00299 {
00300   return ((READ_BIT(IWDGx->SR, IWDG_SR_WVU) == (IWDG_SR_WVU)) ? 1UL : 0UL);
00301 }
00302 
00303 /**
00304   * @brief  Check if all flags Prescaler, Reload & Window Value Update are reset or not
00305   * @rmtoll SR           PVU           LL_IWDG_IsReady\n
00306   *         SR           RVU           LL_IWDG_IsReady\n
00307   *         SR           WVU           LL_IWDG_IsReady
00308   * @param  IWDGx IWDG Instance
00309   * @retval State of bits (1 or 0).
00310   */
00311 __STATIC_INLINE uint32_t LL_IWDG_IsReady(IWDG_TypeDef *IWDGx)
00312 {
00313   return ((READ_BIT(IWDGx->SR, IWDG_SR_PVU | IWDG_SR_RVU | IWDG_SR_WVU) == 0U) ? 1UL : 0UL);
00314 }
00315 
00316 /**
00317   * @}
00318   */
00319 
00320 /**
00321   * @}
00322   */
00323 
00324 /**
00325   * @}
00326   */
00327 
00328 #endif /* IWDG1 || IWDG2 */
00329 
00330 /**
00331   * @}
00332   */
00333 
00334 #ifdef __cplusplus
00335 }
00336 #endif
00337 
00338 #endif /* STM32H7xx_LL_IWDG_H */