/*! * \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 }