1 /**
2   ******************************************************************************
3   * @file    stm32u5xx_hal_iwdg.h
4   * @author  MCD Application Team
5   * @brief   Header file of IWDG HAL module.
6   ******************************************************************************
7   * @attention
8   *
9   * Copyright (c) 2021 STMicroelectronics.
10   * All rights reserved.
11   *
12   * This software is licensed under terms that can be found in the LICENSE file
13   * in the root directory of this software component.
14   * If no LICENSE file comes with this software, it is provided AS-IS.
15   *
16   ******************************************************************************
17   */
18 
19 /* Define to prevent recursive inclusion -------------------------------------*/
20 #ifndef STM32U5xx_HAL_IWDG_H
21 #define STM32U5xx_HAL_IWDG_H
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 /* Includes ------------------------------------------------------------------*/
28 #include "stm32u5xx_hal_def.h"
29 
30 /** @addtogroup STM32U5xx_HAL_Driver
31   * @{
32   */
33 
34 /** @defgroup IWDG IWDG
35   * @{
36   */
37 
38 /* Exported types ------------------------------------------------------------*/
39 /** @defgroup IWDG_Exported_Types IWDG Exported Types
40   * @{
41   */
42 
43 /**
44   * @brief  IWDG Init structure definition
45   */
46 typedef struct
47 {
48   uint32_t Prescaler;  /*!< Select the prescaler of the IWDG.
49                             This parameter can be a value of @ref IWDG_Prescaler */
50 
51   uint32_t Reload;     /*!< Specifies the IWDG down-counter reload value.
52                             This parameter must be a number between Min_Data = 0 and Max_Data = 0x0FFF */
53 
54   uint32_t Window;     /*!< Specifies the window value to be compared to the down-counter.
55                             This parameter must be a number between Min_Data = 0 and Max_Data = 0x0FFF */
56 
57   uint32_t EWI;        /*!< Specifies if IWDG Early Wakeup Interrupt is enable or not and the comparator value.
58                             This parameter must be a number between Min_Data = 0 and Max_Data = 0x0FFF
59                             value 0 means that EWI is disabled */
60 } IWDG_InitTypeDef;
61 
62 /**
63   * @brief  IWDG Handle Structure definition
64   */
65 #if (USE_HAL_IWDG_REGISTER_CALLBACKS == 1)
66 typedef struct __IWDG_HandleTypeDef
67 #else
68 typedef struct
69 #endif /* USE_HAL_IWDG_REGISTER_CALLBACKS */
70 {
71   IWDG_TypeDef                 *Instance;  /*!< Register base address    */
72 
73   IWDG_InitTypeDef             Init;       /*!< IWDG required parameters */
74 
75 #if (USE_HAL_IWDG_REGISTER_CALLBACKS == 1)
76   void (* EwiCallback)(struct __IWDG_HandleTypeDef *hiwdg);                  /*!< IWDG Early WakeUp Interrupt callback */
77   void (* MspInitCallback)(struct __IWDG_HandleTypeDef *hiwdg);              /*!< IWDG Msp Init callback */
78 #endif /* USE_HAL_IWDG_REGISTER_CALLBACKS */
79 } IWDG_HandleTypeDef;
80 
81 #if (USE_HAL_IWDG_REGISTER_CALLBACKS == 1)
82 /**
83   * @brief  HAL IWDG common Callback ID enumeration definition
84   */
85 typedef enum
86 {
87   HAL_IWDG_EWI_CB_ID          = 0x00U,    /*!< IWDG EWI callback ID */
88   HAL_IWDG_MSPINIT_CB_ID      = 0x01U,    /*!< IWDG MspInit callback ID */
89 } HAL_IWDG_CallbackIDTypeDef;
90 
91 /**
92   * @brief  HAL IWDG Callback pointer definition
93   */
94 typedef void (*pIWDG_CallbackTypeDef)(IWDG_HandleTypeDef *hppp);  /*!< pointer to a IWDG common callback functions */
95 #endif /* USE_HAL_IWDG_REGISTER_CALLBACKS */
96 
97 
98 /**
99   * @}
100   */
101 
102 /* Exported constants --------------------------------------------------------*/
103 /** @defgroup IWDG_Exported_Constants IWDG Exported Constants
104   * @{
105   */
106 
107 /** @defgroup IWDG_Prescaler IWDG Prescaler
108   * @{
109   */
110 #define IWDG_PRESCALER_4                0x00000000u                                     /*!< IWDG prescaler set to 4   */
111 #define IWDG_PRESCALER_8                IWDG_PR_PR_0                                    /*!< IWDG prescaler set to 8   */
112 #define IWDG_PRESCALER_16               IWDG_PR_PR_1                                    /*!< IWDG prescaler set to 16  */
113 #define IWDG_PRESCALER_32               (IWDG_PR_PR_1 | IWDG_PR_PR_0)                   /*!< IWDG prescaler set to 32  */
114 #define IWDG_PRESCALER_64               IWDG_PR_PR_2                                    /*!< IWDG prescaler set to 64  */
115 #define IWDG_PRESCALER_128              (IWDG_PR_PR_2 | IWDG_PR_PR_0)                   /*!< IWDG prescaler set to 128 */
116 #define IWDG_PRESCALER_256              (IWDG_PR_PR_2 | IWDG_PR_PR_1)                   /*!< IWDG prescaler set to 256 */
117 #define IWDG_PRESCALER_512              (IWDG_PR_PR_2 | IWDG_PR_PR_1 | IWDG_PR_PR_0)    /*!< IWDG prescaler set to 512 */
118 #define IWDG_PRESCALER_1024             IWDG_PR_PR_3                                    /*!< IWDG prescaler set to 1024 */
119 /**
120   * @}
121   */
122 
123 /** @defgroup IWDG_Window_option IWDG Window option
124   * @{
125   */
126 #define IWDG_WINDOW_DISABLE             IWDG_WINR_WIN
127 /**
128   * @}
129   */
130 
131 /** @defgroup IWDG_EWI_Mode IWDG Early Wakeup Interrupt Mode
132   * @{
133   */
134 #define IWDG_EWI_DISABLE                0x00000000u       /*!< EWI Disable */
135 /**
136   * @}
137   */
138 
139 /**
140   * @}
141   */
142 
143 /* Exported macros -----------------------------------------------------------*/
144 /** @defgroup IWDG_Exported_Macros IWDG Exported Macros
145   * @{
146   */
147 
148 /**
149   * @brief  Enable the IWDG peripheral.
150   * @param  __HANDLE__  IWDG handle
151   * @retval None
152   */
153 #define __HAL_IWDG_START(__HANDLE__)                WRITE_REG((__HANDLE__)->Instance->KR, IWDG_KEY_ENABLE)
154 
155 /**
156   * @brief  Reload IWDG counter with value defined in the reload register
157   *         (write access to IWDG_PR, IWDG_RLR, IWDG_WINR, IWDG_EWCR registers disabled).
158   * @param  __HANDLE__  IWDG handle
159   * @retval None
160   */
161 #define __HAL_IWDG_RELOAD_COUNTER(__HANDLE__)       WRITE_REG((__HANDLE__)->Instance->KR, IWDG_KEY_RELOAD)
162 
163 /**
164   * @}
165   */
166 
167 /* Exported functions --------------------------------------------------------*/
168 /** @defgroup IWDG_Exported_Functions  IWDG Exported Functions
169   * @{
170   */
171 
172 /** @defgroup IWDG_Exported_Functions_Group1 Initialization and Start functions
173   * @{
174   */
175 /* Initialization/Start functions  ********************************************/
176 HAL_StatusTypeDef     HAL_IWDG_Init(IWDG_HandleTypeDef *hiwdg);
177 void                  HAL_IWDG_MspInit(IWDG_HandleTypeDef *hiwdg);
178 /* Callbacks Register/UnRegister functions  ***********************************/
179 #if (USE_HAL_IWDG_REGISTER_CALLBACKS == 1)
180 HAL_StatusTypeDef     HAL_IWDG_RegisterCallback(IWDG_HandleTypeDef *hiwdg, HAL_IWDG_CallbackIDTypeDef CallbackID,
181                                                 pIWDG_CallbackTypeDef pCallback);
182 HAL_StatusTypeDef     HAL_IWDG_UnRegisterCallback(IWDG_HandleTypeDef *hiwdg, HAL_IWDG_CallbackIDTypeDef CallbackID);
183 #endif /* USE_HAL_IWDG_REGISTER_CALLBACKS */
184 /**
185   * @}
186   */
187 
188 /** @defgroup IWDG_Exported_Functions_Group2 IO operation functions
189   * @{
190   */
191 /* I/O operation functions ****************************************************/
192 HAL_StatusTypeDef     HAL_IWDG_Refresh(IWDG_HandleTypeDef *hiwdg);
193 void                  HAL_IWDG_IRQHandler(IWDG_HandleTypeDef *hiwdg);
194 void                  HAL_IWDG_EarlyWakeupCallback(IWDG_HandleTypeDef *hiwdg);
195 /**
196   * @}
197   */
198 
199 /**
200   * @}
201   */
202 
203 /* Private constants ---------------------------------------------------------*/
204 /** @defgroup IWDG_Private_Constants IWDG Private Constants
205   * @{
206   */
207 
208 /**
209   * @brief  IWDG Key Register BitMask
210   */
211 #define IWDG_KEY_RELOAD                 0x0000AAAAu  /*!< IWDG Reload Counter Enable   */
212 #define IWDG_KEY_ENABLE                 0x0000CCCCu  /*!< IWDG Peripheral Enable       */
213 #define IWDG_KEY_WRITE_ACCESS_ENABLE    0x00005555u  /*!< IWDG KR Write Access Enable  */
214 #define IWDG_KEY_WRITE_ACCESS_DISABLE   0x00000000u  /*!< IWDG KR Write Access Disable */
215 
216 /**
217   * @}
218   */
219 
220 /* Private macros ------------------------------------------------------------*/
221 /** @defgroup IWDG_Private_Macros IWDG Private Macros
222   * @{
223   */
224 
225 /**
226   * @brief  Enable write access to IWDG_PR, IWDG_RLR, IWDG_WINR, IWDG_EWCR registers.
227   * @param  __HANDLE__  IWDG handle
228   * @retval None
229   */
230 #define IWDG_ENABLE_WRITE_ACCESS(__HANDLE__)  WRITE_REG((__HANDLE__)->Instance->KR, IWDG_KEY_WRITE_ACCESS_ENABLE)
231 
232 /**
233   * @brief  Disable write access to IWDG_PR, IWDG_RLR, IWDG_WINR, IWDG_EWCR registers.
234   * @param  __HANDLE__  IWDG handle
235   * @retval None
236   */
237 #define IWDG_DISABLE_WRITE_ACCESS(__HANDLE__) WRITE_REG((__HANDLE__)->Instance->KR, IWDG_KEY_WRITE_ACCESS_DISABLE)
238 
239 /**
240   * @brief  Check IWDG prescaler value.
241   * @param  __PRESCALER__  IWDG prescaler value
242   * @retval None
243   */
244 #define IS_IWDG_PRESCALER(__PRESCALER__)      (((__PRESCALER__) == IWDG_PRESCALER_4)  || \
245                                                ((__PRESCALER__) == IWDG_PRESCALER_8)  || \
246                                                ((__PRESCALER__) == IWDG_PRESCALER_16) || \
247                                                ((__PRESCALER__) == IWDG_PRESCALER_32) || \
248                                                ((__PRESCALER__) == IWDG_PRESCALER_64) || \
249                                                ((__PRESCALER__) == IWDG_PRESCALER_128)|| \
250                                                ((__PRESCALER__) == IWDG_PRESCALER_256)|| \
251                                                ((__PRESCALER__) == IWDG_PRESCALER_512)|| \
252                                                ((__PRESCALER__) == IWDG_PRESCALER_1024))
253 
254 /**
255   * @brief  Check IWDG reload value.
256   * @param  __RELOAD__  IWDG reload value
257   * @retval None
258   */
259 #define IS_IWDG_RELOAD(__RELOAD__)            ((__RELOAD__) <= IWDG_RLR_RL)
260 
261 /**
262   * @brief  Check IWDG window value.
263   * @param  __WINDOW__  IWDG window value
264   * @retval None
265   */
266 #define IS_IWDG_WINDOW(__WINDOW__)            ((__WINDOW__) <= IWDG_WINR_WIN)
267 
268 /**
269   * @brief  Check IWDG ewi value.
270   * @param  __EWI__  IWDG ewi value
271   * @retval None
272   */
273 #define IS_IWDG_EWI(__EWI__)            ((__EWI__) <= IWDG_EWCR_EWIT)
274 
275 /**
276   * @}
277   */
278 
279 /**
280   * @}
281   */
282 
283 /**
284   * @}
285   */
286 
287 
288 #ifdef __cplusplus
289 }
290 #endif
291 
292 #endif /* STM32U5xx_HAL_IWDG_H */
293