Files
2026-06-06 16:49:48 +08:00

103 lines
3.1 KiB
C

/*!
* \file xc6xxx_hal_wdt.c
*
* \brief Target xc6xxx hal wdt implementation
*
* \copyright Revised BSD License, see section \ref LICENSE.
*
* \code
*
* _ __ _ ________ _
* | |/ /(_)___ / ____/ /_ (_)___
* | // / __ \/ / / __ \/ / __ \
* / |/ / / / / /___/ / / / / /_/ /
* /_/|_/_/_/ /_/\____/_/ /_/_/ .___/
* /_/
* (C) 2022-2025 XinChip
*
* \endcode
*
* \author ( XinChip ) Alex-J
*
* \author ( XinChip )
*/
/*------------------------------------------------------------------------------------
INCLUDE HEADE FILES
--------------------------------------------------------------------------------------*/
#include "xc_drv_wdt.h"
#if (WDT_ON)
/*------------------------------------------------------------------------------------
Local Variables
-------------------------------------------------------------------------------------*/
static uint8_t reload_val ;
/*------------------------------------------------------------------------------------
Func Prototype
-------------------------------------------------------------------------------------*/
/*------------------------------------------------------------------------------------
Functions
-------------------------------------------------------------------------------------*/
void xc_wdt_init(WDT_InitCfg_t *wdt_cfg)
{
cpr_ctlapbclken_grctl__wdt_pclk_en__setf(ENABLE);
cpr_rstctl_ctlapb_sw__wdt_rstn__setf(RSTCTL_ENABLE);
cpr_rstctl_ctlapb_sw__wdt_rstn__setf(RSTCTL_DISABLE);
/*
SYS_DISABLE | M0_ENABLE : SYS RST, for low-power reset or quick system reset;
SYS_ENABLE | M0_DISABLE: M0 RST, only for m0 reset;
SYS_DISABLE | M0_DISABLE: M0 RST, m0 reset and low-power reset;
*/
cpr_rstctl_wdtrst_mask_set(
(WDT_SYS_RSTN_MASK_DISABLE | WDT_M0_RSTN_MASK_ENABLE));
cpr_lp_ctl__wdt_pclk_sel__setf(wdt_cfg->PclkSel);
cpr_lp_ctl__wdt_tclk_en__setf(ENABLE);
wdt_cr__wdt_rmod__setf(wdt_cfg->WorkMode);
wdt_torr__wdt_top__setf(wdt_cfg->ReloadValue);
reload_val = wdt_cfg->ReloadValue;
}
void xc_wdt_start(void)
{
wdt_cr__wdt_rpl__setf(WDT_CR_RPL_4PCLK);
wdt_cr__wdt_en__setf(ENABLE);
wdt_crr__setf(WDT_CRR_CRR_ENABLE);
cpr_ctlapbclken_grctl__wdt_pclk_en__setf(DISABLE);
}
void xc_wdt_stop(void)
{
wdt_cr__wdt_en__setf(DISABLE);
}
void xc_wdt_refresh(void)
{
cpr_ctlapbclken_grctl__wdt_pclk_en__setf(ENABLE);
uint8_t val = wdt_icr_get();
wdt_torr__wdt_top__setf(val);
cpr_ctlapbclken_grctl__wdt_pclk_en__setf(DISABLE);
}
void xc_wdt_reload(void)
{
cpr_ctlapbclken_grctl__wdt_pclk_en__setf(ENABLE);
uint8_t val = wdt_icr_get();
wdt_torr__wdt_top__setf(reload_val);
wdt_crr__setf(WDT_CRR_CRR_ENABLE);
cpr_ctlapbclken_grctl__wdt_pclk_en__setf(DISABLE);
}
void WDT_Handler()
{
DEBUG("WDT_Handler\n");
xc_wdt_refresh();
}
#endif //(WDT_ON)