Add watchdog

This commit is contained in:
songyanguang 2025-08-11 18:02:00 +08:00
parent 18264a638c
commit d512b49a6a
5 changed files with 83 additions and 1 deletions

View File

@ -12,3 +12,7 @@ menuconfig BSP_USING_SPI
if BSP_USING_SPI
source "$BSP_DIR/third_party_driver/spi/Kconfig"
endif
menuconfig BSP_USING_WDT
bool "Using watchdog timer device"
default y

View File

@ -10,4 +10,8 @@ ifeq ($(CONFIG_BSP_USING_SPI),y)
SRC_DIR += spi
endif
ifeq ($(CONFIG_BSP_USING_WDT),y)
SRC_DIR += wdt
endif
include $(KERNEL_ROOT)/compiler.mk

View File

@ -461,4 +461,4 @@ int SpiFlashTest(int argc, char *argv[])
}
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN),
test_spi, SpiFlashTest, test spi);
SpiFlashTest, SpiFlashTest, test spi);

View File

@ -0,0 +1,3 @@
SRC_FILES := connect_wdt.c
include $(KERNEL_ROOT)/compiler.mk

View File

@ -0,0 +1,71 @@
/*
* Copyright (c) 2020 AIIT XUOS Lab
* XiUOS is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan
* PSL v2. You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY
* KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
* NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. See the
* Mulan PSL v2 for more details.
*/
/**
* @file connect_usart.c
* @brief support ch569 uart function and register to bus framework
* @version 1.0
* @author AIIT XUOS Lab
* @date 2025-04-07
*/
#include "CH56x_common.h"
#include "xizi.h"
#include "board.h"
#include "shell.h"
#define WDOG_MSECOND_MAX ( (0xff << 19) / (FREQ_SYS / 1000) ) // watchdog timer is clocked at Fsys/524288, arround 3~228Hz
int g_feed_wdt_stop = 0;
int InitHwWdt(void)
{
KPrintf("InitHwWdt WDOG_MSECOND_MAX is %d ms\n", WDOG_MSECOND_MAX);
WWDG_SetCounter(0);
WWDG_ClearFlag();
WWDG_ResetCfg(ENABLE);
while(1) {
WWDG_SetCounter(0);
//mDelaymS(100);
if (g_feed_wdt_stop == 1) {
KPrintf("%s watchdog feed stop!\n", __func__);
break;
}
}
return 0;
}
/**
* @description: Watchdog function
* @return success: EOK, failure: other
*/
int StartWatchdog(void)
{
int ret = EOK;
int32 WdtTask = KTaskCreate("WdtTask", (void *)InitHwWdt, NONE, 1024, 19);
StartupKTask(WdtTask);
return EOK;
}
int WdtTest(int argc, char *argv[])
{
KPrintf("WdtTest Start\n");
g_feed_wdt_stop = 1;
return 0;
}
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN),
WdtTest, WdtTest, test wdt);