1
6
7
8
9
10
11
12
13
14
15
16
17
18
21
22
26
29
30
31
32
33
34
35
36
37
38
39
40
41
44
45
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
125
126
127
128
136
137
145
146
156
157
165
166
176
177
185
186
194
195
/* ... */
#include <string.h>
#include <stdbool.h>
#include "hal/wdt_types.h"
#include "hal/wdt_hal.h"
void wdt_hal_init(wdt_hal_context_t *hal, wdt_inst_t wdt_inst, uint32_t prescaler, bool enable_intr)
{
memset(hal, 0, sizeof(wdt_hal_context_t));
if (wdt_inst == WDT_MWDT0) {
hal->mwdt_dev = &TIMERG0;
}{...}
#if SOC_TIMER_GROUPS >= 2
else if (wdt_inst == WDT_MWDT1) {
hal->mwdt_dev = &TIMERG1;
}{...}
#endif/* ... */
else {
hal->rwdt_dev = RWDT_DEV_GET();
}{...}
hal->inst = wdt_inst;
if (hal->inst == WDT_RWDT) {
rwdt_ll_write_protect_disable(hal->rwdt_dev);
rwdt_ll_disable(hal->rwdt_dev);
rwdt_ll_disable_stage(hal->rwdt_dev, WDT_STAGE0);
rwdt_ll_disable_stage(hal->rwdt_dev, WDT_STAGE1);
rwdt_ll_disable_stage(hal->rwdt_dev, WDT_STAGE2);
rwdt_ll_disable_stage(hal->rwdt_dev, WDT_STAGE3);
#ifdef CONFIG_IDF_TARGET_ESP32
rwdt_ll_set_edge_intr(hal->rwdt_dev, false);
rwdt_ll_set_level_intr(hal->rwdt_dev, enable_intr);/* ... */
#else
rwdt_ll_set_chip_reset_width(hal->rwdt_dev, 0);
rwdt_ll_set_chip_reset_en(hal->rwdt_dev, false);/* ... */
#endif
rwdt_ll_clear_intr_status(hal->rwdt_dev);
rwdt_ll_set_intr_enable(hal->rwdt_dev, enable_intr);
#if SOC_CPU_CORES_NUM > 1
rwdt_ll_set_appcpu_reset_en(hal->rwdt_dev, true);
#endif
rwdt_ll_set_procpu_reset_en(hal->rwdt_dev, true);
rwdt_ll_set_pause_in_sleep_en(hal->rwdt_dev, true);
rwdt_ll_set_cpu_reset_length(hal->rwdt_dev, WDT_RESET_SIG_LENGTH_3_2us);
rwdt_ll_set_sys_reset_length(hal->rwdt_dev, WDT_RESET_SIG_LENGTH_3_2us);
rwdt_ll_write_protect_enable(hal->rwdt_dev);
}{...} else {
mwdt_ll_write_protect_disable(hal->mwdt_dev);
mwdt_ll_disable(hal->mwdt_dev);
mwdt_ll_disable_stage(hal->mwdt_dev, 0);
mwdt_ll_disable_stage(hal->mwdt_dev, 1);
mwdt_ll_disable_stage(hal->mwdt_dev, 2);
mwdt_ll_disable_stage(hal->mwdt_dev, 3);
#if CONFIG_IDF_TARGET_ESP32 || CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3
mwdt_ll_set_edge_intr(hal->mwdt_dev, false);
mwdt_ll_set_level_intr(hal->mwdt_dev, enable_intr);/* ... */
#endif
mwdt_ll_clear_intr_status(hal->mwdt_dev);
mwdt_ll_set_intr_enable(hal->mwdt_dev, enable_intr);
mwdt_ll_set_cpu_reset_length(hal->mwdt_dev, WDT_RESET_SIG_LENGTH_3_2us);
mwdt_ll_set_sys_reset_length(hal->mwdt_dev, WDT_RESET_SIG_LENGTH_3_2us);
mwdt_ll_set_clock_source(hal->mwdt_dev, MWDT_CLK_SRC_DEFAULT);
mwdt_ll_enable_clock(hal->mwdt_dev, true);
mwdt_ll_set_prescaler(hal->mwdt_dev, prescaler);
mwdt_ll_write_protect_enable(hal->mwdt_dev);
}{...}
}{ ... }
void wdt_hal_deinit(wdt_hal_context_t *hal)
{
if (hal->inst == WDT_RWDT) {
rwdt_ll_write_protect_disable(hal->rwdt_dev);
rwdt_ll_feed(hal->rwdt_dev);
rwdt_ll_disable(hal->rwdt_dev);
rwdt_ll_clear_intr_status(hal->rwdt_dev);
rwdt_ll_set_intr_enable(hal->rwdt_dev, false);
rwdt_ll_write_protect_enable(hal->rwdt_dev);
}{...} else {
mwdt_ll_write_protect_disable(hal->mwdt_dev);
mwdt_ll_feed(hal->mwdt_dev);
mwdt_ll_disable(hal->mwdt_dev);
mwdt_ll_clear_intr_status(hal->mwdt_dev);
mwdt_ll_set_intr_enable(hal->mwdt_dev, false);
mwdt_ll_enable_clock(hal->mwdt_dev, false);
mwdt_ll_write_protect_enable(hal->mwdt_dev);
}{...}
hal->mwdt_dev = NULL;
}{ ... }
void wdt_hal_config_stage(wdt_hal_context_t *hal, wdt_stage_t stage, uint32_t timeout_ticks, wdt_stage_action_t behavior)
{
if (hal->inst == WDT_RWDT) {
rwdt_ll_config_stage(hal->rwdt_dev, stage, timeout_ticks, behavior);
}{...} else {
mwdt_ll_config_stage(hal->mwdt_dev, stage, timeout_ticks, behavior);
}{...}
}{ ... }
---------------------------- Init and Config
void wdt_hal_write_protect_disable(wdt_hal_context_t *hal)
{
if (hal->inst == WDT_RWDT) {
rwdt_ll_write_protect_disable(hal->rwdt_dev);
}{...} else {
mwdt_ll_write_protect_disable(hal->mwdt_dev);
}{...}
}{ ... }
void wdt_hal_write_protect_enable(wdt_hal_context_t *hal)
{
if (hal->inst == WDT_RWDT) {
rwdt_ll_write_protect_enable(hal->rwdt_dev);
}{...} else {
mwdt_ll_write_protect_enable(hal->mwdt_dev);
}{...}
}{ ... }
void wdt_hal_enable(wdt_hal_context_t *hal)
{
if (hal->inst == WDT_RWDT) {
rwdt_ll_feed(hal->rwdt_dev);
rwdt_ll_enable(hal->rwdt_dev);
}{...} else {
mwdt_ll_feed(hal->mwdt_dev);
mwdt_ll_enable(hal->mwdt_dev);
}{...}
}{ ... }
void wdt_hal_disable(wdt_hal_context_t *hal)
{
if (hal->inst == WDT_RWDT) {
rwdt_ll_disable(hal->rwdt_dev);
}{...} else {
mwdt_ll_disable(hal->mwdt_dev);
}{...}
}{ ... }
void wdt_hal_handle_intr(wdt_hal_context_t *hal)
{
if (hal->inst == WDT_RWDT) {
rwdt_ll_feed(hal->rwdt_dev);
rwdt_ll_clear_intr_status(hal->rwdt_dev);
}{...} else {
mwdt_ll_feed(hal->mwdt_dev);
mwdt_ll_clear_intr_status(hal->mwdt_dev);
}{...}
}{ ... }
void wdt_hal_feed(wdt_hal_context_t *hal)
{
if (hal->inst == WDT_RWDT) {
rwdt_ll_feed(hal->rwdt_dev);
}{...} else {
mwdt_ll_feed(hal->mwdt_dev);
}{...}
}{ ... }
void wdt_hal_set_flashboot_en(wdt_hal_context_t *hal, bool enable)
{
if (hal->inst == WDT_RWDT) {
rwdt_ll_set_flashboot_en(hal->rwdt_dev, enable);
}{...} else {
mwdt_ll_set_flashboot_en(hal->mwdt_dev, enable);
}{...}
}{ ... }
bool wdt_hal_is_enabled(wdt_hal_context_t *hal)
{
if (hal->inst == WDT_RWDT) {
return rwdt_ll_check_if_enabled(hal->rwdt_dev);
}{...} else {
return mwdt_ll_check_if_enabled(hal->mwdt_dev);
}{...}
}{ ... }