xref: /btstack/port/stm32-l451-miromico-sx1280/Drivers/STM32L4xx_HAL_Driver/Inc/stm32l4xx_ll_iwdg.h (revision 2fd737d36a1de5d778cacc671d4b4d8c4f3fed82)
1 /**
2   ******************************************************************************
3   * @file    stm32l4xx_ll_iwdg.h
4   * @author  MCD Application Team
5   * @brief   Header file of IWDG LL module.
6   ******************************************************************************
7   * @attention
8   *
9   * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.
10   * All rights reserved.</center></h2>
11   *
12   * This software component is licensed by ST under BSD 3-Clause license,
13   * the "License"; You may not use this file except in compliance with the
14   * License. You may obtain a copy of the License at:
15   *                        opensource.org/licenses/BSD-3-Clause
16   *
17   ******************************************************************************
18   */
19 
20 /* Define to prevent recursive inclusion -------------------------------------*/
21 #ifndef STM32L4xx_LL_IWDG_H
22 #define STM32L4xx_LL_IWDG_H
23 
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27 
28 /* Includes ------------------------------------------------------------------*/
29 #include "stm32l4xx.h"
30 
31 /** @addtogroup STM32L4xx_LL_Driver
32   * @{
33   */
34 
35 #if defined(IWDG)
36 
37 /** @defgroup IWDG_LL IWDG
38   * @{
39   */
40 
41 /* Private types -------------------------------------------------------------*/
42 /* Private variables ---------------------------------------------------------*/
43 
44 /* Private constants ---------------------------------------------------------*/
45 /** @defgroup IWDG_LL_Private_Constants IWDG Private Constants
46   * @{
47   */
48 #define LL_IWDG_KEY_RELOAD                 0x0000AAAAU               /*!< IWDG Reload Counter Enable   */
49 #define LL_IWDG_KEY_ENABLE                 0x0000CCCCU               /*!< IWDG Peripheral Enable       */
50 #define LL_IWDG_KEY_WR_ACCESS_ENABLE       0x00005555U               /*!< IWDG KR Write Access Enable  */
51 #define LL_IWDG_KEY_WR_ACCESS_DISABLE      0x00000000U               /*!< IWDG KR Write Access Disable */
52 /**
53   * @}
54   */
55 
56 /* Private macros ------------------------------------------------------------*/
57 
58 /* Exported types ------------------------------------------------------------*/
59 /* Exported constants --------------------------------------------------------*/
60 /** @defgroup IWDG_LL_Exported_Constants IWDG Exported Constants
61   * @{
62   */
63 
64 /** @defgroup IWDG_LL_EC_GET_FLAG Get Flags Defines
65   * @brief    Flags defines which can be used with LL_IWDG_ReadReg function
66   * @{
67   */
68 #define LL_IWDG_SR_PVU                     IWDG_SR_PVU                           /*!< Watchdog prescaler value update */
69 #define LL_IWDG_SR_RVU                     IWDG_SR_RVU                           /*!< Watchdog counter reload value update */
70 #define LL_IWDG_SR_WVU                     IWDG_SR_WVU                           /*!< Watchdog counter window value update */
71 /**
72   * @}
73   */
74 
75 /** @defgroup IWDG_LL_EC_PRESCALER  Prescaler Divider
76   * @{
77   */
78 #define LL_IWDG_PRESCALER_4                0x00000000U                           /*!< Divider by 4   */
79 #define LL_IWDG_PRESCALER_8                (IWDG_PR_PR_0)                        /*!< Divider by 8   */
80 #define LL_IWDG_PRESCALER_16               (IWDG_PR_PR_1)                        /*!< Divider by 16  */
81 #define LL_IWDG_PRESCALER_32               (IWDG_PR_PR_1 | IWDG_PR_PR_0)         /*!< Divider by 32  */
82 #define LL_IWDG_PRESCALER_64               (IWDG_PR_PR_2)                        /*!< Divider by 64  */
83 #define LL_IWDG_PRESCALER_128              (IWDG_PR_PR_2 | IWDG_PR_PR_0)         /*!< Divider by 128 */
84 #define LL_IWDG_PRESCALER_256              (IWDG_PR_PR_2 | IWDG_PR_PR_1)         /*!< Divider by 256 */
85 /**
86   * @}
87   */
88 
89 /**
90   * @}
91   */
92 
93 /* Exported macro ------------------------------------------------------------*/
94 /** @defgroup IWDG_LL_Exported_Macros IWDG Exported Macros
95   * @{
96   */
97 
98 /** @defgroup IWDG_LL_EM_WRITE_READ Common Write and read registers Macros
99   * @{
100   */
101 
102 /**
103   * @brief  Write a value in IWDG register
104   * @param  __INSTANCE__ IWDG Instance
105   * @param  __REG__ Register to be written
106   * @param  __VALUE__ Value to be written in the register
107   * @retval None
108   */
109 #define LL_IWDG_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
110 
111 /**
112   * @brief  Read a value in IWDG register
113   * @param  __INSTANCE__ IWDG Instance
114   * @param  __REG__ Register to be read
115   * @retval Register value
116   */
117 #define LL_IWDG_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
118 /**
119   * @}
120   */
121 
122 /**
123   * @}
124   */
125 
126 
127 /* Exported functions --------------------------------------------------------*/
128 /** @defgroup IWDG_LL_Exported_Functions IWDG Exported Functions
129   * @{
130   */
131 /** @defgroup IWDG_LL_EF_Configuration Configuration
132   * @{
133   */
134 
135 /**
136   * @brief  Start the Independent Watchdog
137   * @note   Except if the hardware watchdog option is selected
138   * @rmtoll KR           KEY           LL_IWDG_Enable
139   * @param  IWDGx IWDG Instance
140   * @retval None
141   */
LL_IWDG_Enable(IWDG_TypeDef * IWDGx)142 __STATIC_INLINE void LL_IWDG_Enable(IWDG_TypeDef *IWDGx)
143 {
144   WRITE_REG(IWDGx->KR, LL_IWDG_KEY_ENABLE);
145 }
146 
147 /**
148   * @brief  Reloads IWDG counter with value defined in the reload register
149   * @rmtoll KR           KEY           LL_IWDG_ReloadCounter
150   * @param  IWDGx IWDG Instance
151   * @retval None
152   */
LL_IWDG_ReloadCounter(IWDG_TypeDef * IWDGx)153 __STATIC_INLINE void LL_IWDG_ReloadCounter(IWDG_TypeDef *IWDGx)
154 {
155   WRITE_REG(IWDGx->KR, LL_IWDG_KEY_RELOAD);
156 }
157 
158 /**
159   * @brief  Enable write access to IWDG_PR, IWDG_RLR and IWDG_WINR registers
160   * @rmtoll KR           KEY           LL_IWDG_EnableWriteAccess
161   * @param  IWDGx IWDG Instance
162   * @retval None
163   */
LL_IWDG_EnableWriteAccess(IWDG_TypeDef * IWDGx)164 __STATIC_INLINE void LL_IWDG_EnableWriteAccess(IWDG_TypeDef *IWDGx)
165 {
166   WRITE_REG(IWDGx->KR, LL_IWDG_KEY_WR_ACCESS_ENABLE);
167 }
168 
169 /**
170   * @brief  Disable write access to IWDG_PR, IWDG_RLR and IWDG_WINR registers
171   * @rmtoll KR           KEY           LL_IWDG_DisableWriteAccess
172   * @param  IWDGx IWDG Instance
173   * @retval None
174   */
LL_IWDG_DisableWriteAccess(IWDG_TypeDef * IWDGx)175 __STATIC_INLINE void LL_IWDG_DisableWriteAccess(IWDG_TypeDef *IWDGx)
176 {
177   WRITE_REG(IWDGx->KR, LL_IWDG_KEY_WR_ACCESS_DISABLE);
178 }
179 
180 /**
181   * @brief  Select the prescaler of the IWDG
182   * @rmtoll PR           PR            LL_IWDG_SetPrescaler
183   * @param  IWDGx IWDG Instance
184   * @param  Prescaler This parameter can be one of the following values:
185   *         @arg @ref LL_IWDG_PRESCALER_4
186   *         @arg @ref LL_IWDG_PRESCALER_8
187   *         @arg @ref LL_IWDG_PRESCALER_16
188   *         @arg @ref LL_IWDG_PRESCALER_32
189   *         @arg @ref LL_IWDG_PRESCALER_64
190   *         @arg @ref LL_IWDG_PRESCALER_128
191   *         @arg @ref LL_IWDG_PRESCALER_256
192   * @retval None
193   */
LL_IWDG_SetPrescaler(IWDG_TypeDef * IWDGx,uint32_t Prescaler)194 __STATIC_INLINE void LL_IWDG_SetPrescaler(IWDG_TypeDef *IWDGx, uint32_t Prescaler)
195 {
196   WRITE_REG(IWDGx->PR, IWDG_PR_PR & Prescaler);
197 }
198 
199 /**
200   * @brief  Get the selected prescaler of the IWDG
201   * @rmtoll PR           PR            LL_IWDG_GetPrescaler
202   * @param  IWDGx IWDG Instance
203   * @retval Returned value can be one of the following values:
204   *         @arg @ref LL_IWDG_PRESCALER_4
205   *         @arg @ref LL_IWDG_PRESCALER_8
206   *         @arg @ref LL_IWDG_PRESCALER_16
207   *         @arg @ref LL_IWDG_PRESCALER_32
208   *         @arg @ref LL_IWDG_PRESCALER_64
209   *         @arg @ref LL_IWDG_PRESCALER_128
210   *         @arg @ref LL_IWDG_PRESCALER_256
211   */
LL_IWDG_GetPrescaler(IWDG_TypeDef * IWDGx)212 __STATIC_INLINE uint32_t LL_IWDG_GetPrescaler(IWDG_TypeDef *IWDGx)
213 {
214   return (READ_REG(IWDGx->PR));
215 }
216 
217 /**
218   * @brief  Specify the IWDG down-counter reload value
219   * @rmtoll RLR          RL            LL_IWDG_SetReloadCounter
220   * @param  IWDGx IWDG Instance
221   * @param  Counter Value between Min_Data=0 and Max_Data=0x0FFF
222   * @retval None
223   */
LL_IWDG_SetReloadCounter(IWDG_TypeDef * IWDGx,uint32_t Counter)224 __STATIC_INLINE void LL_IWDG_SetReloadCounter(IWDG_TypeDef *IWDGx, uint32_t Counter)
225 {
226   WRITE_REG(IWDGx->RLR, IWDG_RLR_RL & Counter);
227 }
228 
229 /**
230   * @brief  Get the specified IWDG down-counter reload value
231   * @rmtoll RLR          RL            LL_IWDG_GetReloadCounter
232   * @param  IWDGx IWDG Instance
233   * @retval Value between Min_Data=0 and Max_Data=0x0FFF
234   */
LL_IWDG_GetReloadCounter(IWDG_TypeDef * IWDGx)235 __STATIC_INLINE uint32_t LL_IWDG_GetReloadCounter(IWDG_TypeDef *IWDGx)
236 {
237   return (READ_REG(IWDGx->RLR));
238 }
239 
240 /**
241   * @brief  Specify high limit of the window value to be compared to the down-counter.
242   * @rmtoll WINR         WIN           LL_IWDG_SetWindow
243   * @param  IWDGx IWDG Instance
244   * @param  Window Value between Min_Data=0 and Max_Data=0x0FFF
245   * @retval None
246   */
LL_IWDG_SetWindow(IWDG_TypeDef * IWDGx,uint32_t Window)247 __STATIC_INLINE void LL_IWDG_SetWindow(IWDG_TypeDef *IWDGx, uint32_t Window)
248 {
249   WRITE_REG(IWDGx->WINR, IWDG_WINR_WIN & Window);
250 }
251 
252 /**
253   * @brief  Get the high limit of the window value specified.
254   * @rmtoll WINR         WIN           LL_IWDG_GetWindow
255   * @param  IWDGx IWDG Instance
256   * @retval Value between Min_Data=0 and Max_Data=0x0FFF
257   */
LL_IWDG_GetWindow(IWDG_TypeDef * IWDGx)258 __STATIC_INLINE uint32_t LL_IWDG_GetWindow(IWDG_TypeDef *IWDGx)
259 {
260   return (READ_REG(IWDGx->WINR));
261 }
262 
263 /**
264   * @}
265   */
266 
267 /** @defgroup IWDG_LL_EF_FLAG_Management FLAG_Management
268   * @{
269   */
270 
271 /**
272   * @brief  Check if flag Prescaler Value Update is set or not
273   * @rmtoll SR           PVU           LL_IWDG_IsActiveFlag_PVU
274   * @param  IWDGx IWDG Instance
275   * @retval State of bit (1 or 0).
276   */
LL_IWDG_IsActiveFlag_PVU(IWDG_TypeDef * IWDGx)277 __STATIC_INLINE uint32_t LL_IWDG_IsActiveFlag_PVU(IWDG_TypeDef *IWDGx)
278 {
279   return ((READ_BIT(IWDGx->SR, IWDG_SR_PVU) == (IWDG_SR_PVU)) ? 1UL : 0UL);
280 }
281 
282 /**
283   * @brief  Check if flag Reload Value Update is set or not
284   * @rmtoll SR           RVU           LL_IWDG_IsActiveFlag_RVU
285   * @param  IWDGx IWDG Instance
286   * @retval State of bit (1 or 0).
287   */
LL_IWDG_IsActiveFlag_RVU(IWDG_TypeDef * IWDGx)288 __STATIC_INLINE uint32_t LL_IWDG_IsActiveFlag_RVU(IWDG_TypeDef *IWDGx)
289 {
290   return ((READ_BIT(IWDGx->SR, IWDG_SR_RVU) == (IWDG_SR_RVU)) ? 1UL : 0UL);
291 }
292 
293 /**
294   * @brief  Check if flag Window Value Update is set or not
295   * @rmtoll SR           WVU           LL_IWDG_IsActiveFlag_WVU
296   * @param  IWDGx IWDG Instance
297   * @retval State of bit (1 or 0).
298   */
LL_IWDG_IsActiveFlag_WVU(IWDG_TypeDef * IWDGx)299 __STATIC_INLINE uint32_t LL_IWDG_IsActiveFlag_WVU(IWDG_TypeDef *IWDGx)
300 {
301   return ((READ_BIT(IWDGx->SR, IWDG_SR_WVU) == (IWDG_SR_WVU)) ? 1UL : 0UL);
302 }
303 
304 /**
305   * @brief  Check if all flags Prescaler, Reload & Window Value Update are reset or not
306   * @rmtoll SR           PVU           LL_IWDG_IsReady\n
307   *         SR           WVU           LL_IWDG_IsReady\n
308   *         SR           RVU           LL_IWDG_IsReady
309   * @param  IWDGx IWDG Instance
310   * @retval State of bits (1 or 0).
311   */
LL_IWDG_IsReady(IWDG_TypeDef * IWDGx)312 __STATIC_INLINE uint32_t LL_IWDG_IsReady(IWDG_TypeDef *IWDGx)
313 {
314   return ((READ_BIT(IWDGx->SR, IWDG_SR_PVU | IWDG_SR_RVU | IWDG_SR_WVU) == 0U) ? 1UL : 0UL);
315 }
316 
317 /**
318   * @}
319   */
320 
321 
322 /**
323   * @}
324   */
325 
326 /**
327   * @}
328   */
329 
330 #endif /* IWDG */
331 
332 /**
333   * @}
334   */
335 
336 #ifdef __cplusplus
337 }
338 #endif
339 
340 #endif /* STM32L4xx_LL_IWDG_H */
341 
342 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
343