Files
youled62d_bluetooth/project/example/driver/wdt/app/src/wdt.c
T
moyuhai e8074162f3 V1.0
2026-06-11 13:00:46 +08:00

110 lines
2.7 KiB
C

/*!
* \file wdt.c
*
* \brief Target wdt(watch dog) 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 "wdt.h"
#include "xc_drv_wdt.h"
/*------------------------------------------------------------------------------------
Macros
-------------------------------------------------------------------------------------*/
/*------------------------------------------------------------------------------------
Global Variables
-------------------------------------------------------------------------------------*/
/*------------------------------------------------------------------------------------
Functions
-------------------------------------------------------------------------------------*/
/**
* @brief wdt_demo
* @details
* @param void
* @retval void
*/
void wdt_mode0_demo()
{
DEBUG("__WDT_WORK_MODE0_DEMO__\r");
WDT_InitCfg_t wdt_cfg ;
wdt_cfg.WorkMode = WDT_WORK_MODE0;
wdt_cfg.ReloadValue = WDT_CLK_32K_RESET_MODE0_2048MS;
wdt_cfg.PclkSel = WDT_WORK_32K;
xc_wdt_init(&wdt_cfg);
xc_wdt_start();
while(1)
{
delay_ms(2000); //If the reset time is set to be less than 2s,it will be reset directly
DEBUG("wdt mode0 demo\n");
xc_wdt_reload(); //Refeeding
}
}
void wdt_mode1_demo()
{
DEBUG("__WDT_WORK_MODE1_DEMO__\r");
WDT_InitCfg_t wdt_cfg ;
NVIC_EnableIRQ(WDT_IRQn);
wdt_cfg.WorkMode = WDT_WORK_MODE1;
wdt_cfg.ReloadValue = WDT_CLK_32K_RESET_MODE1_4096MS;//WDT_CLK_32M_RESET_MODE1_8192US WDT_CLK_32K_RESET_MODE1_4096MS
wdt_cfg.PclkSel = WDT_WORK_32K;
xc_wdt_init(&wdt_cfg);
xc_wdt_start();
}
#define WDT_MODE0_DEMO 1
#define WDT_MODE1_DEMO 0
void wdt_demo()
{
#if WDT_MODE0_DEMO
/* Software timed reset */
wdt_mode0_demo();
#endif
#if WDT_MODE1_DEMO
/* Software did not clear interrupt, reset, feed dog in interrupt */
wdt_mode1_demo();
#endif
}