HPM SDK
HPMicro Software Development Kit
hpm_wdg_drv.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2021-2023 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 #ifndef HPM_WDG_DRV_H
9 #define HPM_WDG_DRV_H
10 
19 #include "hpm_common.h"
20 #include "hpm_wdg_regs.h"
21 
25 typedef enum reset_interval_enum {
37 
61 
65 typedef enum wdg_clksrc_enum {
70 
75 typedef struct wdg_control_struct {
78  bool reset_enable;
81  bool wdg_enable;
83 
84 #define WDG_WRITE_ENABLE_MAGIC_NUM (0x5AA5UL)
85 #define WDG_RESTART_MAGIC_NUM (0xCAFEUL)
87 #define WDG_EXT_CLK_FREQ (32768UL)
89 #ifdef __cplusplus
90 extern "C" {
91 #endif
92 
98 static inline void wdg_write_enable(WDG_Type *base)
99 {
101 }
102 
108 static inline void wdg_enable(WDG_Type *base)
109 {
110  wdg_write_enable(base);
111  base->CTRL |= WDG_CTRL_EN_MASK;
112 }
113 
119 static inline void wdg_disable(WDG_Type *base)
120 {
121  wdg_write_enable(base);
122  base->CTRL &= ~WDG_CTRL_EN_MASK;
123 }
124 
130 static inline void wdg_reset_enable(WDG_Type *base)
131 {
132  wdg_write_enable(base);
133  base->CTRL |= WDG_CTRL_RSTEN_MASK;
134 }
135 
141 static inline void wdg_reset_disable(WDG_Type *base)
142 {
143  wdg_write_enable(base);
144  base->CTRL &= ~WDG_CTRL_RSTEN_MASK;
145 }
146 
147 
153 static inline void wdg_interrupt_enable(WDG_Type *base)
154 {
155  wdg_write_enable(base);
156  base->CTRL |= WDG_CTRL_INTEN_MASK;
157 }
158 
164 static inline void wdg_interrupt_disable(WDG_Type *base)
165 {
166  wdg_write_enable(base);
167  base->CTRL &= ~WDG_CTRL_INTEN_MASK;
168 }
169 
178 static inline void wdg_clksrc_select(WDG_Type *base, wdg_clksrc_t clksrc)
179 {
180  if (clksrc == wdg_clksrc_extclk) {
181  base->CTRL &= ~WDG_CTRL_CLKSEL_MASK;
182  } else {
183  base->CTRL |= WDG_CTRL_CLKSEL_MASK;
184  }
185 }
186 
192 static inline void wdg_restart(WDG_Type *base)
193 {
194  wdg_write_enable(base);
196 }
197 
204 static inline uint32_t wdg_get_status(WDG_Type *base)
205 {
206  return base->ST;
207 }
208 
215 static inline void wdg_clear_status(WDG_Type *base, uint32_t status_mask)
216 {
217  base->ST = status_mask;
218 }
219 
227 hpm_stat_t wdg_init(WDG_Type *base, wdg_control_t *wdg_ctrl);
228 
237 reset_interval_t wdg_convert_reset_interval_from_us(const uint32_t src_freq, const uint32_t reset_us);
238 
247  uint64_t wdg_convert_interrupt_interval_to_us(const uint32_t src_freq, interrupt_interval_t interval);
248 
257 uint32_t wdg_convert_reset_interval_to_us(const uint32_t src_freq, reset_interval_t interval);
258 
267 interrupt_interval_t wdg_convert_interrupt_interval_from_us(const uint32_t src_freq, uint32_t interval_us);
268 
276 uint64_t wdg_get_interrupt_interval_in_us(WDG_Type *base, const uint32_t src_freq);
277 
285 uint64_t wdg_get_total_reset_interval_in_us(WDG_Type *base, const uint32_t src_freq);
286 
287 #ifdef __cplusplus
288 }
289 #endif
290 
295 #endif /* HPM_WDG_DRV_H */
#define WDG_CTRL_RSTEN_MASK
Definition: hpm_wdg_regs.h:73
#define WDG_CTRL_CLKSEL_MASK
Definition: hpm_wdg_regs.h:97
#define WDG_CTRL_EN_MASK
Definition: hpm_wdg_regs.h:109
#define WDG_CTRL_INTEN_MASK
Definition: hpm_wdg_regs.h:85
uint32_t hpm_stat_t
Definition: hpm_common.h:126
reset_interval_enum
WDG Reset Interval definitions.
Definition: hpm_wdg_drv.h:25
static void wdg_reset_disable(WDG_Type *base)
WDG reset disable function.
Definition: hpm_wdg_drv.h:141
static void wdg_interrupt_enable(WDG_Type *base)
WDG interrupt enable function.
Definition: hpm_wdg_drv.h:153
static void wdg_enable(WDG_Type *base)
WDG Enable function.
Definition: hpm_wdg_drv.h:108
#define WDG_WRITE_ENABLE_MAGIC_NUM
Definition: hpm_wdg_drv.h:84
enum wdg_clksrc_enum wdg_clksrc_t
WDG clock source definitions.
wdg_clksrc_enum
WDG clock source definitions.
Definition: hpm_wdg_drv.h:65
static void wdg_write_enable(WDG_Type *base)
WDG write enable function.
Definition: hpm_wdg_drv.h:98
uint64_t wdg_get_interrupt_interval_in_us(WDG_Type *base, const uint32_t src_freq)
Get Actual WDG Interrupt Interval in terms of microseconds.
Definition: hpm_wdg_drv.c:166
interrupt_interval_enum
WDG Interrupt interval definitions.
Definition: hpm_wdg_drv.h:41
static void wdg_clksrc_select(WDG_Type *base, wdg_clksrc_t clksrc)
WDG Clock Source selection function.
Definition: hpm_wdg_drv.h:178
reset_interval_t wdg_convert_reset_interval_from_us(const uint32_t src_freq, const uint32_t reset_us)
Convert the Reset interval value based on the WDG source clock frequency and the expected reset inter...
Definition: hpm_wdg_drv.c:94
hpm_stat_t wdg_init(WDG_Type *base, wdg_control_t *wdg_ctrl)
WDG initialization function.
Definition: hpm_wdg_drv.c:58
#define WDG_RESTART_MAGIC_NUM
Definition: hpm_wdg_drv.h:85
uint64_t wdg_get_total_reset_interval_in_us(WDG_Type *base, const uint32_t src_freq)
Get Actual WDG Reset Interval in terms of microseconds.
Definition: hpm_wdg_drv.c:178
enum interrupt_interval_enum interrupt_interval_t
WDG Interrupt interval definitions.
static void wdg_interrupt_disable(WDG_Type *base)
WDG interrupt disable function.
Definition: hpm_wdg_drv.h:164
static void wdg_disable(WDG_Type *base)
WDG Disable function.
Definition: hpm_wdg_drv.h:119
static void wdg_restart(WDG_Type *base)
WDG restart function.
Definition: hpm_wdg_drv.h:192
static void wdg_clear_status(WDG_Type *base, uint32_t status_mask)
WDG clear status function.
Definition: hpm_wdg_drv.h:215
interrupt_interval_t wdg_convert_interrupt_interval_from_us(const uint32_t src_freq, uint32_t interval_us)
Convert the interrupt interval value based on the WDG source clock frequency and the expected interru...
Definition: hpm_wdg_drv.c:116
uint32_t wdg_convert_reset_interval_to_us(const uint32_t src_freq, reset_interval_t interval)
Convert the Reset interval value based on the WDG source clock frequency and the expected reset inter...
Definition: hpm_wdg_drv.c:152
struct wdg_control_struct wdg_control_t
WDG Control configuration structure.
static uint32_t wdg_get_status(WDG_Type *base)
WDG Get Status function.
Definition: hpm_wdg_drv.h:204
enum reset_interval_enum reset_interval_t
WDG Reset Interval definitions.
static void wdg_reset_enable(WDG_Type *base)
WDG reset enable function.
Definition: hpm_wdg_drv.h:130
uint64_t wdg_convert_interrupt_interval_to_us(const uint32_t src_freq, interrupt_interval_t interval)
Convert the interrupt interval value based on the WDG source clock frequency and the expected interru...
Definition: hpm_wdg_drv.c:136
@ reset_interval_max
Definition: hpm_wdg_drv.h:34
@ reset_interval_clock_period_mult_256
Definition: hpm_wdg_drv.h:27
@ reset_interval_clock_period_mult_8k
Definition: hpm_wdg_drv.h:32
@ reset_interval_clock_period_mult_1k
Definition: hpm_wdg_drv.h:29
@ reset_interval_clock_period_mult_16k
Definition: hpm_wdg_drv.h:33
@ reset_interval_clock_period_mult_512
Definition: hpm_wdg_drv.h:28
@ reset_interval_out_of_range
Definition: hpm_wdg_drv.h:35
@ reset_interval_clock_period_mult_128
Definition: hpm_wdg_drv.h:26
@ reset_interval_clock_period_mult_2k
Definition: hpm_wdg_drv.h:30
@ reset_interval_clock_period_mult_4k
Definition: hpm_wdg_drv.h:31
@ wdg_clksrc_pclk
Definition: hpm_wdg_drv.h:67
@ wdg_clksrc_extclk
Definition: hpm_wdg_drv.h:66
@ wdg_clksrc_max
Definition: hpm_wdg_drv.h:68
@ interrupt_interval_out_of_range
Definition: hpm_wdg_drv.h:59
@ interrupt_interval_clock_period_multi_512m
Definition: hpm_wdg_drv.h:56
@ interrupt_interval_clock_period_multi_2m
Definition: hpm_wdg_drv.h:52
@ interrupt_interval_clock_period_multi_256
Definition: hpm_wdg_drv.h:43
@ interrupt_interval_clock_period_multi_2k
Definition: hpm_wdg_drv.h:45
@ interrupt_interval_clock_period_multi_512k
Definition: hpm_wdg_drv.h:51
@ interrupt_interval_clock_period_multi_1k
Definition: hpm_wdg_drv.h:44
@ interrupt_interval_clock_period_multi_16k
Definition: hpm_wdg_drv.h:48
@ interrupt_interval_clock_period_multi_8k
Definition: hpm_wdg_drv.h:47
@ interrupt_interval_clock_period_multi_2g
Definition: hpm_wdg_drv.h:57
@ interrupt_interval_clock_period_multi_128k
Definition: hpm_wdg_drv.h:50
@ interrupt_interval_clock_period_multi_128m
Definition: hpm_wdg_drv.h:55
@ interrupt_interval_clock_period_multi_32k
Definition: hpm_wdg_drv.h:49
@ interrupt_interval_clock_period_multi_4k
Definition: hpm_wdg_drv.h:46
@ interrupt_interval_max
Definition: hpm_wdg_drv.h:58
@ interrupt_interval_clock_period_multi_8m
Definition: hpm_wdg_drv.h:53
@ interrupt_interval_clock_period_multi_64
Definition: hpm_wdg_drv.h:42
@ interrupt_interval_clock_period_multi_32m
Definition: hpm_wdg_drv.h:54
Definition: hpm_wdg_regs.h:12
__RW uint32_t CTRL
Definition: hpm_wdg_regs.h:14
__W uint32_t WREN
Definition: hpm_wdg_regs.h:16
__W uint32_t RESTART
Definition: hpm_wdg_regs.h:15
__W uint32_t ST
Definition: hpm_wdg_regs.h:17
WDG Control configuration structure.
Definition: hpm_wdg_drv.h:75
reset_interval_t reset_interval
Definition: hpm_wdg_drv.h:76
interrupt_interval_t interrupt_interval
Definition: hpm_wdg_drv.h:77
bool reset_enable
Definition: hpm_wdg_drv.h:78
bool interrupt_enable
Definition: hpm_wdg_drv.h:79
bool wdg_enable
Definition: hpm_wdg_drv.h:81
wdg_clksrc_t clksrc
Definition: hpm_wdg_drv.h:80