STM32L486xx HAL User Manual
|
00001 /** 00002 ****************************************************************************** 00003 * @file stm32l4xx_ll_iwdg.h 00004 * @author MCD Application Team 00005 * @brief Header file of IWDG LL module. 00006 ****************************************************************************** 00007 * @attention 00008 * 00009 * <h2><center>© COPYRIGHT(c) 2017 STMicroelectronics</center></h2> 00010 * 00011 * Redistribution and use in source and binary forms, with or without modification, 00012 * are permitted provided that the following conditions are met: 00013 * 1. Redistributions of source code must retain the above copyright notice, 00014 * this list of conditions and the following disclaimer. 00015 * 2. Redistributions in binary form must reproduce the above copyright notice, 00016 * this list of conditions and the following disclaimer in the documentation 00017 * and/or other materials provided with the distribution. 00018 * 3. Neither the name of STMicroelectronics nor the names of its contributors 00019 * may be used to endorse or promote products derived from this software 00020 * without specific prior written permission. 00021 * 00022 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 00023 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00024 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 00025 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 00026 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 00027 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 00028 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 00029 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 00030 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 00031 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00032 * 00033 ****************************************************************************** 00034 */ 00035 00036 /* Define to prevent recursive inclusion -------------------------------------*/ 00037 #ifndef __STM32L4xx_LL_IWDG_H 00038 #define __STM32L4xx_LL_IWDG_H 00039 00040 #ifdef __cplusplus 00041 extern "C" { 00042 #endif 00043 00044 /* Includes ------------------------------------------------------------------*/ 00045 #include "stm32l4xx.h" 00046 00047 /** @addtogroup STM32L4xx_LL_Driver 00048 * @{ 00049 */ 00050 00051 #if defined(IWDG) 00052 00053 /** @defgroup IWDG_LL IWDG 00054 * @{ 00055 */ 00056 00057 /* Private types -------------------------------------------------------------*/ 00058 /* Private variables ---------------------------------------------------------*/ 00059 00060 /* Private constants ---------------------------------------------------------*/ 00061 /** @defgroup IWDG_LL_Private_Constants IWDG Private Constants 00062 * @{ 00063 */ 00064 00065 #define LL_IWDG_KEY_RELOAD 0x0000AAAAU /*!< IWDG Reload Counter Enable */ 00066 #define LL_IWDG_KEY_ENABLE 0x0000CCCCU /*!< IWDG Peripheral Enable */ 00067 #define LL_IWDG_KEY_WR_ACCESS_ENABLE 0x00005555U /*!< IWDG KR Write Access Enable */ 00068 #define LL_IWDG_KEY_WR_ACCESS_DISABLE 0x00000000U /*!< IWDG KR Write Access Disable */ 00069 00070 /** 00071 * @} 00072 */ 00073 00074 /* Private macros ------------------------------------------------------------*/ 00075 00076 /* Exported types ------------------------------------------------------------*/ 00077 /* Exported constants --------------------------------------------------------*/ 00078 /** @defgroup IWDG_LL_Exported_Constants IWDG Exported Constants 00079 * @{ 00080 */ 00081 00082 /** @defgroup IWDG_LL_EC_GET_FLAG Get Flags Defines 00083 * @brief Flags defines which can be used with LL_IWDG_ReadReg function 00084 * @{ 00085 */ 00086 #define LL_IWDG_SR_PVU IWDG_SR_PVU /*!< Watchdog prescaler value update */ 00087 #define LL_IWDG_SR_RVU IWDG_SR_RVU /*!< Watchdog counter reload value update */ 00088 #define LL_IWDG_SR_WVU IWDG_SR_WVU /*!< Watchdog counter window value update */ 00089 00090 /** 00091 * @} 00092 */ 00093 00094 /** @defgroup IWDG_LL_EC_PRESCALER Prescaler Divider 00095 * @{ 00096 */ 00097 #define LL_IWDG_PRESCALER_4 0x00000000U /*!< Divider by 4 */ 00098 #define LL_IWDG_PRESCALER_8 (IWDG_PR_PR_0) /*!< Divider by 8 */ 00099 #define LL_IWDG_PRESCALER_16 (IWDG_PR_PR_1) /*!< Divider by 16 */ 00100 #define LL_IWDG_PRESCALER_32 (IWDG_PR_PR_1 | IWDG_PR_PR_0) /*!< Divider by 32 */ 00101 #define LL_IWDG_PRESCALER_64 (IWDG_PR_PR_2) /*!< Divider by 64 */ 00102 #define LL_IWDG_PRESCALER_128 (IWDG_PR_PR_2 | IWDG_PR_PR_0) /*!< Divider by 128 */ 00103 #define LL_IWDG_PRESCALER_256 (IWDG_PR_PR_2 | IWDG_PR_PR_1) /*!< Divider by 256 */ 00104 /** 00105 * @} 00106 */ 00107 00108 /** 00109 * @} 00110 */ 00111 00112 /* Exported macro ------------------------------------------------------------*/ 00113 /** @defgroup IWDG_LL_Exported_Macros IWDG Exported Macros 00114 * @{ 00115 */ 00116 00117 /** @defgroup IWDG_LL_EM_WRITE_READ Common Write and read registers Macros 00118 * @{ 00119 */ 00120 00121 /** 00122 * @brief Write a value in IWDG register 00123 * @param __INSTANCE__ IWDG Instance 00124 * @param __REG__ Register to be written 00125 * @param __VALUE__ Value to be written in the register 00126 * @retval None 00127 */ 00128 #define LL_IWDG_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__)) 00129 00130 /** 00131 * @brief Read a value in IWDG register 00132 * @param __INSTANCE__ IWDG Instance 00133 * @param __REG__ Register to be read 00134 * @retval Register value 00135 */ 00136 #define LL_IWDG_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__) 00137 /** 00138 * @} 00139 */ 00140 00141 /** 00142 * @} 00143 */ 00144 00145 00146 /* Exported functions --------------------------------------------------------*/ 00147 /** @defgroup IWDG_LL_Exported_Functions IWDG Exported Functions 00148 * @{ 00149 */ 00150 /** @defgroup IWDG_LL_EF_Configuration Configuration 00151 * @{ 00152 */ 00153 00154 /** 00155 * @brief Start the Independent Watchdog 00156 * @note Except if the hardware watchdog option is selected 00157 * @rmtoll KR KEY LL_IWDG_Enable 00158 * @param IWDGx IWDG Instance 00159 * @retval None 00160 */ 00161 __STATIC_INLINE void LL_IWDG_Enable(IWDG_TypeDef *IWDGx) 00162 { 00163 WRITE_REG(IWDG->KR, LL_IWDG_KEY_ENABLE); 00164 } 00165 00166 /** 00167 * @brief Reloads IWDG counter with value defined in the reload register 00168 * @rmtoll KR KEY LL_IWDG_ReloadCounter 00169 * @param IWDGx IWDG Instance 00170 * @retval None 00171 */ 00172 __STATIC_INLINE void LL_IWDG_ReloadCounter(IWDG_TypeDef *IWDGx) 00173 { 00174 WRITE_REG(IWDG->KR, LL_IWDG_KEY_RELOAD); 00175 } 00176 00177 /** 00178 * @brief Enable write access to IWDG_PR, IWDG_RLR and IWDG_WINR registers 00179 * @rmtoll KR KEY LL_IWDG_EnableWriteAccess 00180 * @param IWDGx IWDG Instance 00181 * @retval None 00182 */ 00183 __STATIC_INLINE void LL_IWDG_EnableWriteAccess(IWDG_TypeDef *IWDGx) 00184 { 00185 WRITE_REG(IWDG->KR, LL_IWDG_KEY_WR_ACCESS_ENABLE); 00186 } 00187 00188 /** 00189 * @brief Disable write access to IWDG_PR, IWDG_RLR and IWDG_WINR registers 00190 * @rmtoll KR KEY LL_IWDG_DisableWriteAccess 00191 * @param IWDGx IWDG Instance 00192 * @retval None 00193 */ 00194 __STATIC_INLINE void LL_IWDG_DisableWriteAccess(IWDG_TypeDef *IWDGx) 00195 { 00196 WRITE_REG(IWDG->KR, LL_IWDG_KEY_WR_ACCESS_DISABLE); 00197 } 00198 00199 /** 00200 * @brief Select the prescaler of the IWDG 00201 * @rmtoll PR PR LL_IWDG_SetPrescaler 00202 * @param IWDGx IWDG Instance 00203 * @param Prescaler This parameter can be one of the following values: 00204 * @arg @ref LL_IWDG_PRESCALER_4 00205 * @arg @ref LL_IWDG_PRESCALER_8 00206 * @arg @ref LL_IWDG_PRESCALER_16 00207 * @arg @ref LL_IWDG_PRESCALER_32 00208 * @arg @ref LL_IWDG_PRESCALER_64 00209 * @arg @ref LL_IWDG_PRESCALER_128 00210 * @arg @ref LL_IWDG_PRESCALER_256 00211 * @retval None 00212 */ 00213 __STATIC_INLINE void LL_IWDG_SetPrescaler(IWDG_TypeDef *IWDGx, uint32_t Prescaler) 00214 { 00215 WRITE_REG(IWDGx->PR, IWDG_PR_PR & Prescaler); 00216 } 00217 00218 /** 00219 * @brief Get the selected prescaler of the IWDG 00220 * @rmtoll PR PR LL_IWDG_GetPrescaler 00221 * @param IWDGx IWDG Instance 00222 * @retval Returned value can be one of the following values: 00223 * @arg @ref LL_IWDG_PRESCALER_4 00224 * @arg @ref LL_IWDG_PRESCALER_8 00225 * @arg @ref LL_IWDG_PRESCALER_16 00226 * @arg @ref LL_IWDG_PRESCALER_32 00227 * @arg @ref LL_IWDG_PRESCALER_64 00228 * @arg @ref LL_IWDG_PRESCALER_128 00229 * @arg @ref LL_IWDG_PRESCALER_256 00230 */ 00231 __STATIC_INLINE uint32_t LL_IWDG_GetPrescaler(IWDG_TypeDef *IWDGx) 00232 { 00233 return (uint32_t)(READ_REG(IWDGx->PR)); 00234 } 00235 00236 /** 00237 * @brief Specify the IWDG down-counter reload value 00238 * @rmtoll RLR RL LL_IWDG_SetReloadCounter 00239 * @param IWDGx IWDG Instance 00240 * @param Counter Value between Min_Data=0 and Max_Data=0x0FFF 00241 * @retval None 00242 */ 00243 __STATIC_INLINE void LL_IWDG_SetReloadCounter(IWDG_TypeDef *IWDGx, uint32_t Counter) 00244 { 00245 WRITE_REG(IWDGx->RLR, IWDG_RLR_RL & Counter); 00246 } 00247 00248 /** 00249 * @brief Get the specified IWDG down-counter reload value 00250 * @rmtoll RLR RL LL_IWDG_GetReloadCounter 00251 * @param IWDGx IWDG Instance 00252 * @retval Value between Min_Data=0 and Max_Data=0x0FFF 00253 */ 00254 __STATIC_INLINE uint32_t LL_IWDG_GetReloadCounter(IWDG_TypeDef *IWDGx) 00255 { 00256 return (uint32_t)(READ_REG(IWDGx->RLR)); 00257 } 00258 00259 /** 00260 * @brief Specify high limit of the window value to be compared to the down-counter. 00261 * @rmtoll WINR WIN LL_IWDG_SetWindow 00262 * @param IWDGx IWDG Instance 00263 * @param Window Value between Min_Data=0 and Max_Data=0x0FFF 00264 * @retval None 00265 */ 00266 __STATIC_INLINE void LL_IWDG_SetWindow(IWDG_TypeDef *IWDGx, uint32_t Window) 00267 { 00268 WRITE_REG(IWDGx->WINR, IWDG_WINR_WIN & Window); 00269 } 00270 00271 /** 00272 * @brief Get the high limit of the window value specified. 00273 * @rmtoll WINR WIN LL_IWDG_GetWindow 00274 * @param IWDGx IWDG Instance 00275 * @retval Value between Min_Data=0 and Max_Data=0x0FFF 00276 */ 00277 __STATIC_INLINE uint32_t LL_IWDG_GetWindow(IWDG_TypeDef *IWDGx) 00278 { 00279 return (uint32_t)(READ_REG(IWDGx->WINR)); 00280 } 00281 00282 /** 00283 * @} 00284 */ 00285 00286 /** @defgroup IWDG_LL_EF_FLAG_Management FLAG_Management 00287 * @{ 00288 */ 00289 00290 /** 00291 * @brief Check if flag Prescaler Value Update is set or not 00292 * @rmtoll SR PVU LL_IWDG_IsActiveFlag_PVU 00293 * @param IWDGx IWDG Instance 00294 * @retval State of bit (1 or 0). 00295 */ 00296 __STATIC_INLINE uint32_t LL_IWDG_IsActiveFlag_PVU(IWDG_TypeDef *IWDGx) 00297 { 00298 return (READ_BIT(IWDGx->SR, IWDG_SR_PVU) == (IWDG_SR_PVU)); 00299 } 00300 00301 /** 00302 * @brief Check if flag Reload Value Update is set or not 00303 * @rmtoll SR RVU LL_IWDG_IsActiveFlag_RVU 00304 * @param IWDGx IWDG Instance 00305 * @retval State of bit (1 or 0). 00306 */ 00307 __STATIC_INLINE uint32_t LL_IWDG_IsActiveFlag_RVU(IWDG_TypeDef *IWDGx) 00308 { 00309 return (READ_BIT(IWDGx->SR, IWDG_SR_RVU) == (IWDG_SR_RVU)); 00310 } 00311 00312 /** 00313 * @brief Check if flag Window Value Update is set or not 00314 * @rmtoll SR WVU LL_IWDG_IsActiveFlag_WVU 00315 * @param IWDGx IWDG Instance 00316 * @retval State of bit (1 or 0). 00317 */ 00318 __STATIC_INLINE uint32_t LL_IWDG_IsActiveFlag_WVU(IWDG_TypeDef *IWDGx) 00319 { 00320 return (READ_BIT(IWDGx->SR, IWDG_SR_WVU) == (IWDG_SR_WVU)); 00321 } 00322 00323 /** 00324 * @brief Check if all flags Prescaler, Reload & Window Value Update are reset or not 00325 * @rmtoll SR PVU LL_IWDG_IsReady\n 00326 * SR WVU LL_IWDG_IsReady\n 00327 * SR RVU LL_IWDG_IsReady 00328 * @param IWDGx IWDG Instance 00329 * @retval State of bits (1 or 0). 00330 */ 00331 __STATIC_INLINE uint32_t LL_IWDG_IsReady(IWDG_TypeDef *IWDGx) 00332 { 00333 return (READ_BIT(IWDGx->SR, IWDG_SR_PVU | IWDG_SR_RVU | IWDG_SR_WVU) == 0U); 00334 } 00335 00336 /** 00337 * @} 00338 */ 00339 00340 00341 /** 00342 * @} 00343 */ 00344 00345 /** 00346 * @} 00347 */ 00348 00349 #endif /* IWDG) */ 00350 00351 /** 00352 * @} 00353 */ 00354 00355 #ifdef __cplusplus 00356 } 00357 #endif 00358 00359 #endif /* __STM32L4xx_LL_IWDG_H */ 00360 00361 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/