9 static void (*callback[QM_WDT_NUM])(
void *data);
10 static void *callback_data[QM_WDT_NUM];
14 #if (NUM_WDT_CONTROLLERS > 1)
22 if (callback[QM_WDT_0]) {
23 callback[QM_WDT_0](callback_data[QM_WDT_0]);
27 QM_WDT[QM_WDT_0]->wdt_eoi;
28 QM_ISR_EOI(QM_IRQ_WDT_0_INT_VECTOR);
31 #if (NUM_WDT_CONTROLLERS > 1)
34 if (NULL != callback[QM_WDT_1]) {
35 (callback[QM_WDT_1])(callback_data[QM_WDT_1]);
39 QM_WDT[QM_WDT_1]->wdt_eoi;
40 QM_ISR_EOI(QM_IRQ_WDT_1_INT_VECTOR);
46 QM_CHECK(wdt < QM_WDT_NUM, -EINVAL);
48 QM_WDT[wdt]->wdt_cr |= QM_WDT_CR_WDT_ENABLE;
50 #if (HAS_WDT_CLOCK_ENABLE)
52 QM_SCSS_PERIPHERAL->periph_cfg0 |= BIT(1);
62 QM_CHECK(wdt < QM_WDT_NUM, -EINVAL);
63 QM_CHECK(cfg != NULL, -EINVAL);
64 QM_CHECK(cfg->
timeout <= QM_WDT_TORR_TOP_MASK, -EINVAL);
73 QM_WDT[wdt]->wdt_cr &= ~QM_WDT_CR_RMOD;
74 QM_WDT[wdt]->wdt_cr |= cfg->
mode << QM_WDT_CR_RMOD_OFFSET;
79 QM_CHECK(QM_WDT_0 == wdt, -EINVAL);
80 (QM_SCU_AON_CRU_BLOCK)->wdt0_tclk_en &= ~C2_WDT_PAUSE_EN_MASK;
81 (QM_SCU_AON_CRU_BLOCK)->wdt0_tclk_en |= cfg->
pause_en
82 << C2_WDT_PAUSE_EN_SHIFT;
90 QM_WDT[wdt]->wdt_torr = cfg->
timeout;
100 QM_CHECK(wdt < QM_WDT_NUM, -EINVAL);
107 QM_WDT[wdt]->wdt_crr = QM_WDT_RELOAD_VALUE;
112 #if (ENABLE_RESTORE_CONTEXT)
115 QM_CHECK(wdt < QM_WDT_NUM, -EINVAL);
116 QM_CHECK(ctx != NULL, -EINVAL);
118 ctx->wdt_torr = QM_WDT[wdt]->wdt_torr;
119 ctx->wdt_cr = QM_WDT[wdt]->wdt_cr;
125 const qm_wdt_context_t *
const ctx)
127 QM_CHECK(wdt < QM_WDT_NUM, -EINVAL);
128 QM_CHECK(ctx != NULL, -EINVAL);
133 QM_WDT[wdt]->wdt_torr = ctx->wdt_torr;
134 QM_WDT[wdt]->wdt_cr = ctx->wdt_cr;
139 QM_WDT[wdt]->wdt_crr = QM_WDT_RELOAD_VALUE;
153 const qm_wdt_context_t *
const ctx)
Watchdog Interrupt Reset Response Mode.
qm_wdt_mode_t mode
Watchdog response mode.
bool pause_en
Pause enable in LMT power state C2 and C2 Plus.
QM WDT configuration type.
int clk_periph_enable(const clk_periph_t clocks)
Enable clocks for peripherals / registers.
uint32_t timeout
Index for the WDT timeout table.
void(* callback)(void *data)
User callback.
int qm_wdt_restore_context(const qm_wdt_t wdt, const qm_wdt_context_t *const ctx)
Restore watchdog context.
int qm_wdt_reload(const qm_wdt_t wdt)
Reload the WDT counter.
int qm_wdt_save_context(const qm_wdt_t wdt, qm_wdt_context_t *const ctx)
Save watchdog context.
QM_ISR_DECLARE(qm_wdt_0_isr)
ISR for WDT 0 interrupt.
int qm_wdt_set_config(const qm_wdt_t wdt, const qm_wdt_config_t *const cfg)
Set configuration of WDT module.
qm_wdt_t
Number of WDT controllers.
int qm_wdt_start(const qm_wdt_t wdt)
Start WDT.
Watchdog timer register map.
void * callback_data
Callback user data.