hpw422移植新的sdk
This commit is contained in:
@@ -0,0 +1,150 @@
|
||||
/*!
|
||||
* \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 XC_CHECK(XC_WDT_ENABLED)
|
||||
/*------------------------------------------------------------------------------------
|
||||
Local Variables
|
||||
-------------------------------------------------------------------------------------*/
|
||||
/*------------------------------------------------------------------------------------
|
||||
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);
|
||||
}
|
||||
|
||||
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_ext32k_wdt_init(WDT_InitCfg_t *wdt_cfg)
|
||||
{
|
||||
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_rstctl_wdtrst_mask_set(
|
||||
// (WDT_SYS_RSTN_MASK_ENABLE | WDT_M0_RSTN_MASK_DISABLE));
|
||||
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);
|
||||
}
|
||||
|
||||
void xc_ext32k_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);
|
||||
}
|
||||
|
||||
void xc_wdt_stop(void)
|
||||
{
|
||||
wdt_cr__wdt_en__setf(DISABLE);
|
||||
}
|
||||
|
||||
void xc_wdt_refresh(void)
|
||||
{
|
||||
GLOBAL_INT_DISABLE();
|
||||
cpr_ctlapbclken_grctl__wdt_pclk_en__setf(ENABLE);
|
||||
uint8_t val = wdt_icr_get();
|
||||
|
||||
val = wdt_torr__wdt_top__getf();
|
||||
wdt_torr__wdt_top__setf(val);
|
||||
|
||||
cpr_ctlapbclken_grctl__wdt_pclk_en__setf(DISABLE);
|
||||
GLOBAL_INT_RESTORE();
|
||||
}
|
||||
|
||||
void xc_wdt_reload(void)
|
||||
{
|
||||
GLOBAL_INT_DISABLE();
|
||||
cpr_ctlapbclken_grctl__wdt_pclk_en__setf(ENABLE);
|
||||
uint8_t val = wdt_icr_get();
|
||||
|
||||
val = wdt_torr__wdt_top__getf();
|
||||
wdt_torr__wdt_top__setf(val);
|
||||
|
||||
wdt_crr__setf(WDT_CRR_CRR_ENABLE);
|
||||
cpr_ctlapbclken_grctl__wdt_pclk_en__setf(DISABLE);
|
||||
GLOBAL_INT_RESTORE();
|
||||
}
|
||||
|
||||
void WDT_Handler()
|
||||
{
|
||||
DEBUG("WDT_Handler\n");
|
||||
|
||||
#if ((XTAL_32K) && (!defined(NO_SUPPORT_LFCLK_XTAL_32768)))
|
||||
cprao_aon_ctl_clk32k_set(0x109);
|
||||
|
||||
WDT_InitCfg_t wdt_cfg ;
|
||||
|
||||
wdt_cfg.WorkMode = WDT_WORK_MODE0;
|
||||
wdt_cfg.ReloadValue = WDT_CLK_32M_RESET_MODE0_4096US;
|
||||
wdt_cfg.PclkSel = WDT_WORK_32M;
|
||||
xc_wdt_init(&wdt_cfg);
|
||||
xc_wdt_start();
|
||||
while(1);
|
||||
#endif
|
||||
xc_wdt_refresh();
|
||||
}
|
||||
|
||||
#endif // XC_CHECK(XC_WDT_ENABLED)
|
||||
Reference in New Issue
Block a user