gr55xx_ll_wdt.h
Go to the documentation of this file.
1 /**
2 ****************************************************************************************
3 *
4 * @file gr55xx_ll_wdt.h
5 * @author BLE Driver Team
6 * @brief Header file containing functions prototypes of WDT LL library.
7 *
8 ****************************************************************************************
9 * @attention
10 #####Copyright (c) 2019 GOODIX
11 All rights reserved.
12
13 Redistribution and use in source and binary forms, with or without
14 modification, are permitted provided that the following conditions are met:
15 * Redistributions of source code must retain the above copyright
16 notice, this list of conditions and the following disclaimer.
17 * Redistributions in binary form must reproduce the above copyright
18 notice, this list of conditions and the following disclaimer in the
19 documentation and/or other materials provided with the distribution.
20 * Neither the name of GOODIX nor the names of its contributors may be used
21 to endorse or promote products derived from this software without
22 specific prior written permission.
23
24 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
25 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27 ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
28 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
29 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
30 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
31 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
32 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
33 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34 POSSIBILITY OF SUCH DAMAGE.
35 ****************************************************************************************
36 */
37
38 /** @addtogroup PERIPHERAL Peripheral Driver
39 * @{
40 */
41
42 /** @addtogroup LL_DRIVER LL Driver
43 * @{
44 */
45
46 /** @defgroup LL_WDT WDT
47 * @brief WDT LL module driver.
48 * @{
49 */
50
51 /* Define to prevent recursive inclusion -------------------------------------*/
52 #ifndef __GR55XX_LL_WDT_H__
53 #define __GR55XX_LL_WDT_H__
54
55 #ifdef __cplusplus
56 extern "C" {
57 #endif
58
59 /* Includes ------------------------------------------------------------------*/
60 #include "gr55xx.h"
61
62 #if defined (WDT)
63
64 /**
65 * @defgroup WDT_LL_MACRO Defines
66 * @{
67 */
68
69 /* Private constants ---------------------------------------------------------*/
70 /** @defgroup WDT_LL_Private_Constants WDT Private Constants
71 * @{
72 */
73
74 /** @defgroup WDT_LL_PC_WR_ACCESS Write Access Defines
75 * @{
76 */
77 #define LL_WDT_LOCK_WR_ACCESS_ENABLE 0x1ACCE551 /**< WDT LOCK Write Access Enable */
78 #define LL_WDT_LOCK_WR_ACCESS_DISABLE (~0x1ACCE551) /**< WDT LOCK Write Access Disable */
79 /** @} */
80
81 /** @} */
82
83 /* Exported macro ------------------------------------------------------------*/
84 /** @defgroup WDT_LL_Exported_Macros WDT Exported Macros
85 * @{
86 */
87
88 /** @defgroup WDT_LL_EM_WRITE_READ Common Write and read registers Macros
89 * @{
90 */
91
92 /**
93 * @brief Write a value in WDT register
94 * @param __instance__ WDT instance
95 * @param __REG__ Register to be written
96 * @param __VALUE__ Value to be written in the register
97 * @retval None
98 */
99 #define LL_WDT_WriteReg(__instance__, __REG__, __VALUE__) WRITE_REG(__instance__->__REG__, (__VALUE__))
100
101 /**
102 * @brief Read a value in WDT register
103 * @param __instance__ WDT instance
104 * @param __REG__ Register to be read
105 * @retval Register value
106 */
107 #define LL_WDT_ReadReg(__instance__, __REG__) READ_REG(__instance__->__REG__)
108 /** @} */
109
110 /** @} */
111
112 /** @} */
113
114 /* Exported functions --------------------------------------------------------*/
115 /** @defgroup WDT_LL_DRIVER_FUNCTIONS Functions
116 * @{
117 */
118
119 /** @defgroup WDT_LL_EF_Configuration Configuration functions
120 * @{
121 */
122
123 /**
124 * @brief Enable write access to WDT_LOAD, WDT_CTRL and WDT_INTCLR registers.
125 *
126 * \rst
127 * +----------------------+-----------------------------------+
128 * | Register | BitsName |
129 * +======================+===================================+
130 * | LOCK | ENRW |
131 * +----------------------+-----------------------------------+
132 * \endrst
133 *
134 * @param WDTx WDT instance
135 * @retval None
136 */
137 __STATIC_INLINE void ll_wdt_enable_write_access(wdt_regs_t *WDTx)
138 {
139 WRITE_REG(WDTx->LOCK, LL_WDT_LOCK_WR_ACCESS_ENABLE);
140 }
141
142 /**
143 * @brief Disable write access to WDT_LOAD, WDT_CTRL and WDT_INTCLR registers.
144 *
145 * \rst
146 * +----------------------+-----------------------------------+
147 * | Register | BitsName |
148 * +======================+===================================+
149 * | LOCK | ENRW |
150 * +----------------------+-----------------------------------+
151 * \endrst
152 *
153 * @param WDTx WDT instance
154 * @retval None
155 */
156 __STATIC_INLINE void ll_wdt_disable_write_access(wdt_regs_t *WDTx)
157 {
158 WRITE_REG(WDTx->LOCK, LL_WDT_LOCK_WR_ACCESS_DISABLE);
159 }
160
161 /**
162 * @brief Enable watchdog counter and interrupt event.
163 *
164 * \rst
165 * +----------------------+-----------------------------------+
166 * | Register | BitsName |
167 * +======================+===================================+
168 * | CTRL | INTEN |
169 * +----------------------+-----------------------------------+
170 * \endrst
171 *
172 * @param WDTx WDT instance.
173 * @retval None
174 */
175 __STATIC_INLINE void ll_wdt_enable(wdt_regs_t *WDTx)
176 {
177 SET_BITS(WDTx->CTRL, WDT_CTRL_INTEN);
178 }
179
180 /**
181 * @brief Disable watchdog counter and interrupt event.
182 *
183 * \rst
184 * +----------------------+-----------------------------------+
185 * | Register | BitsName |
186 * +======================+===================================+
187 * | CTRL | INTEN |
188 * +----------------------+-----------------------------------+
189 * \endrst
190 *
191 * @param WDTx WDT instance.
192 * @retval None
193 */
194 __STATIC_INLINE void ll_wdt_disable(wdt_regs_t *WDTx)
195 {
196 CLEAR_BITS(WDTx->CTRL, WDT_CTRL_INTEN);
197 }
198
199 /**
200 * @brief Check if the WDT peripheral is enabled or disabled.
201 *
202 * \rst
203 * +----------------------+-----------------------------------+
204 * | Register | BitsName |
205 * +======================+===================================+
206 * | CTRL | INTEN |
207 * +----------------------+-----------------------------------+
208 * \endrst
209 *
210 * @param WDTx WDT instance.
211 * @retval State of bit (1 or 0).
212 */
213 __STATIC_INLINE uint32_t ll_wdt_is_enabled(wdt_regs_t *WDTx)
214 {
215 return (READ_BITS(WDTx->CTRL, WDT_CTRL_INTEN) == (WDT_CTRL_INTEN));
216 }
217
218 /**
219 * @brief Enable reset output.
220 * @note RSTEN acts as a mask for the reset output.
221 *
222 * \rst
223 * +----------------------+-----------------------------------+
224 * | Register | BitsName |
225 * +======================+===================================+
226 * | CTRL | RSTEN |
227 * +----------------------+-----------------------------------+
228 * \endrst
229 *
230 * @param WDTx WDT instance.
231 * @retval None
232 */
233 __STATIC_INLINE void ll_wdt_enable_reset(wdt_regs_t *WDTx)
234 {
235 SET_BITS(WDTx->CTRL, WDT_CTRL_RSTEN);
236 }
237
238 /**
239 * @brief Disable reset output.
240 *
241 * \rst
242 * +----------------------+-----------------------------------+
243 * | Register | BitsName |
244 * +======================+===================================+
245 * | CTRL | RSTEN |
246 * +----------------------+-----------------------------------+
247 * \endrst
248 *
249 * @param WDTx WDT instance.
250 * @retval None
251 */
252 __STATIC_INLINE void ll_wdt_disable_reset(wdt_regs_t *WDTx)
253 {
254 CLEAR_BITS(WDTx->CTRL, WDT_CTRL_RSTEN);
255 }
256
257 /**
258 * @brief Check if the WDT reset is enabled or disabled.
259 *
260 * \rst
261 * +----------------------+-----------------------------------+
262 * | Register | BitsName |
263 * +======================+===================================+
264 * | CTRL | RSTEN |
265 * +----------------------+-----------------------------------+
266 * \endrst
267 *
268 * @param WDTx WDT instance.
269 * @retval State of bit (1 or 0).
270 */
271 __STATIC_INLINE uint32_t ll_wdt_is_enabled_reset(wdt_regs_t *WDTx)
272 {
273 return (READ_BITS(WDTx->CTRL, WDT_CTRL_RSTEN) == (WDT_CTRL_RSTEN));
274 }
275
276 /**
277 * @brief Specify the WDT down-counter reload value.
278 *
279 * \rst
280 * +----------------------+-----------------------------------+
281 * | Register | BitsName |
282 * +======================+===================================+
283 * | LOAD | LOAD |
284 * +----------------------+-----------------------------------+
285 * \endrst
286 *
287 * @param WDTx WDT instance
288 * @param counter Value range between Min_Data=0 and Max_Data=0xFFFFFFFF
289 * @retval None
290 */
291 __STATIC_INLINE void ll_wdt_set_counter_load(wdt_regs_t *WDTx, uint32_t counter)
292 {
293 WRITE_REG(WDTx->LOAD, counter);
294 }
295
296 /**
297 * @brief Get the specified WDT down-counter reload value.
298 *
299 * \rst
300 * +----------------------+-----------------------------------+
301 * | Register | BitsName |
302 * +======================+===================================+
303 * | LOAD | LOAD |
304 * +----------------------+-----------------------------------+
305 * \endrst
306 *
307 * @param WDTx WDT instance
308 * @retval Value range between Min_Data=0 and Max_Data=0x0FFF
309 */
310 __STATIC_INLINE uint32_t ll_wdt_get_counter_load(wdt_regs_t *WDTx)
311 {
312 return (uint32_t)(READ_REG(WDTx->LOAD));
313 }
314
315 /**
316 * @brief Get current value of the specified WDT decrementing down-counter.
317 *
318 * \rst
319 * +----------------------+-----------------------------------+
320 * | Register | BitsName |
321 * +======================+===================================+
322 * | VALUE | VALUE |
323 * +----------------------+-----------------------------------+
324 * \endrst
325 *
326 * @param WDTx WDT instance
327 * @retval Value range between Min_Data=0 and Max_Data=0x0FFF
328 */
329 __STATIC_INLINE uint32_t ll_wdt_get_counter_value(wdt_regs_t *WDTx)
330 {
331 return (uint32_t)(READ_REG(WDTx->VALUE));
332 }
333
334 /**
335 * @brief Reloads WDT counter with value defined in the reload register
336 *
337 * \rst
338 * +----------------------+-----------------------------------+
339 * | Register | BitsName |
340 * +======================+===================================+
341 * | INTCLR | INTCLR |
342 * +----------------------+-----------------------------------+
343 * \endrst
344 *
345 * @param WDTx WDT instance
346 * @retval None
347 */
348 __STATIC_INLINE void ll_wdt_reload_counter(wdt_regs_t *WDTx)
349 {
350 WRITE_REG(WDTx->INTCLR, WDT_INTCLR);
351 }
352
353 /** @} */
354
355 /** @defgroup WDT_LL_EF_FLAG_Management FLAG_Management
356 * @{
357 */
358
359 /**
360 * @brief Indicate if the WDT Interrupt Flag is set or not.
361 * @note This bit is set by hardware when the counter has reached 0. It can
362 * be cleared by software by writing any value to the INTCLR Register.
363 *
364 * \rst
365 * +----------------------+-----------------------------------+
366 * | Register | BitsName |
367 * +======================+===================================+
368 * | MIS | INTSTAT |
369 * +----------------------+-----------------------------------+
370 * \endrst
371 *
372 * @param WDTx WDT instance.
373 * @retval State of bit (1 or 0).
374 */
375 __STATIC_INLINE uint32_t ll_wdt_is_active_flag_it(wdt_regs_t *WDTx)
376 {
377 return (READ_BITS(WDTx->MIS, WDT_MIS_INTSTAT) == (WDT_MIS_INTSTAT));
378 }
379
380 /**
381 * @brief Clear Interrupt Status flag.
382 *
383 * \rst
384 * +----------------------+-----------------------------------+
385 * | Register | BitsName |
386 * +======================+===================================+
387 * | INTCLR | INTCLR |
388 * +----------------------+-----------------------------------+
389 * \endrst
390 *
391 * @param WDTx WDT instance.
392 * @retval None
393 */
394 __STATIC_INLINE void ll_wdt_clear_flag_it(wdt_regs_t *WDTx)
395 {
396 WRITE_REG(WDTx->INTCLR, WDT_INTCLR);
397 }
398
399 /** @} */
400
401 /** @} */
402
403 #endif /* WDT */
404
405 #ifdef __cplusplus
406 }
407 #endif
408
409 #endif /* __GR55XX_LL_WDT_H__ */
410
411 /** @} */
412
413 /** @} */
414
415 /** @} */
ll_wdt_set_counter_load
__STATIC_INLINE void ll_wdt_set_counter_load(wdt_regs_t *WDTx, uint32_t counter)
Specify the WDT down-counter reload value.
Definition: gr55xx_ll_wdt.h:291
ll_wdt_enable_reset
__STATIC_INLINE void ll_wdt_enable_reset(wdt_regs_t *WDTx)
Enable reset output.
Definition: gr55xx_ll_wdt.h:233
ll_wdt_enable
__STATIC_INLINE void ll_wdt_enable(wdt_regs_t *WDTx)
Enable watchdog counter and interrupt event.
Definition: gr55xx_ll_wdt.h:175
ll_wdt_is_enabled
__STATIC_INLINE uint32_t ll_wdt_is_enabled(wdt_regs_t *WDTx)
Check if the WDT peripheral is enabled or disabled.
Definition: gr55xx_ll_wdt.h:213
ll_wdt_disable_reset
__STATIC_INLINE void ll_wdt_disable_reset(wdt_regs_t *WDTx)
Disable reset output.
Definition: gr55xx_ll_wdt.h:252
ll_wdt_get_counter_value
__STATIC_INLINE uint32_t ll_wdt_get_counter_value(wdt_regs_t *WDTx)
Get current value of the specified WDT decrementing down-counter.
Definition: gr55xx_ll_wdt.h:329
ll_wdt_disable_write_access
__STATIC_INLINE void ll_wdt_disable_write_access(wdt_regs_t *WDTx)
Disable write access to WDT_LOAD, WDT_CTRL and WDT_INTCLR registers.
Definition: gr55xx_ll_wdt.h:156
ll_wdt_is_active_flag_it
__STATIC_INLINE uint32_t ll_wdt_is_active_flag_it(wdt_regs_t *WDTx)
Indicate if the WDT Interrupt Flag is set or not.
Definition: gr55xx_ll_wdt.h:375
ll_wdt_clear_flag_it
__STATIC_INLINE void ll_wdt_clear_flag_it(wdt_regs_t *WDTx)
Clear Interrupt Status flag.
Definition: gr55xx_ll_wdt.h:394
ll_wdt_get_counter_load
__STATIC_INLINE uint32_t ll_wdt_get_counter_load(wdt_regs_t *WDTx)
Get the specified WDT down-counter reload value.
Definition: gr55xx_ll_wdt.h:310
ll_wdt_is_enabled_reset
__STATIC_INLINE uint32_t ll_wdt_is_enabled_reset(wdt_regs_t *WDTx)
Check if the WDT reset is enabled or disabled.
Definition: gr55xx_ll_wdt.h:271
ll_wdt_disable
__STATIC_INLINE void ll_wdt_disable(wdt_regs_t *WDTx)
Disable watchdog counter and interrupt event.
Definition: gr55xx_ll_wdt.h:194
LL_WDT_LOCK_WR_ACCESS_ENABLE
#define LL_WDT_LOCK_WR_ACCESS_ENABLE
Definition: gr55xx_ll_wdt.h:77
ll_wdt_enable_write_access
__STATIC_INLINE void ll_wdt_enable_write_access(wdt_regs_t *WDTx)
Enable write access to WDT_LOAD, WDT_CTRL and WDT_INTCLR registers.
Definition: gr55xx_ll_wdt.h:137
ll_wdt_reload_counter
__STATIC_INLINE void ll_wdt_reload_counter(wdt_regs_t *WDTx)
Reloads WDT counter with value defined in the reload register.
Definition: gr55xx_ll_wdt.h:348
LL_WDT_LOCK_WR_ACCESS_DISABLE
#define LL_WDT_LOCK_WR_ACCESS_DISABLE
Definition: gr55xx_ll_wdt.h:78