diff --git a/bsp/raspberry-pico/drivers/SConscript b/bsp/raspberry-pico/drivers/SConscript index 0244d8a644..83779589ee 100644 --- a/bsp/raspberry-pico/drivers/SConscript +++ b/bsp/raspberry-pico/drivers/SConscript @@ -19,6 +19,9 @@ if GetDepend('BSP_USING_SOFT_SPI'): if GetDepend('BSP_USING_ADC'): src += ['drv_adc.c'] +if GetDepend('BSP_USING_WDT'): + src += ['drv_wdt.c'] + group = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH) Return('group') diff --git a/bsp/raspberry-pico/drivers/drv_wdt.c b/bsp/raspberry-pico/drivers/drv_wdt.c new file mode 100644 index 0000000000..b63088f8ee --- /dev/null +++ b/bsp/raspberry-pico/drivers/drv_wdt.c @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2023-06-05 Chushicheng the first version + */ + +#include "drv_wdt.h" +#include + +#define DBG_TAG "drv.wdt" +#define DBG_LVL DBG_INFO +#include + +static struct pico_wdt pico_wdt_obj; + +static rt_err_t wdt_init(rt_watchdog_t *wdt) +{ + return RT_EOK; +} + +static rt_err_t wdt_control(rt_watchdog_t *wdt, int cmd, void *arg) +{ + static rt_uint32_t delay_ms; + switch (cmd) + { + /* feed the watchdog */ + case RT_DEVICE_CTRL_WDT_KEEPALIVE: + watchdog_update(); + break; + /* set watchdog timeout */ + case RT_DEVICE_CTRL_WDT_SET_TIMEOUT: + delay_ms = *((rt_uint32_t*)arg) * 1000; + watchdog_reboot(0, RT_NULL, delay_ms); + break; + case RT_DEVICE_CTRL_WDT_GET_TIMEOUT: + (*((rt_uint32_t*)arg)) = watchdog_get_count(); + break; + case RT_DEVICE_CTRL_WDT_START: + watchdog_enable(delay_ms, 1); + pico_wdt_obj.is_start = 1; + break; + default: + LOG_W("This command is not supported."); + return -RT_ERROR; + } + return RT_EOK; +} + +static const struct rt_watchdog_ops ops = +{ + .init = wdt_init, + .control = wdt_control, +}; + +int rt_hw_wdt_init(void) +{ + int result = RT_EOK; + + pico_wdt_obj.watchdog.ops = &ops; + /* register wdt device */ + if (rt_hw_watchdog_register(&pico_wdt_obj.watchdog, "wdt", RT_DEVICE_FLAG_DEACTIVATE, RT_NULL) == RT_EOK) + { + LOG_D("wdt init success"); + } + else + { + LOG_E("wdt register failed"); + result = -RT_ERROR; + } + + return result; +} +INIT_BOARD_EXPORT(rt_hw_wdt_init); diff --git a/bsp/raspberry-pico/drivers/drv_wdt.h b/bsp/raspberry-pico/drivers/drv_wdt.h new file mode 100644 index 0000000000..d30c75a708 --- /dev/null +++ b/bsp/raspberry-pico/drivers/drv_wdt.h @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2023-06-05 Chushicheng the first version + */ + +#ifndef DRV_WDT_H +#define DRV_WDT_H + +#include + +/* pico wdt driver class */ +struct pico_wdt +{ + rt_watchdog_t watchdog; + rt_uint16_t is_start; +}; + +int rt_hw_wdt_init(void); + +#endif /* DRV_WDT_H */ diff --git a/bsp/raspberry-pico/libraries/Kconfig b/bsp/raspberry-pico/libraries/Kconfig index bd1cd56a9a..a9992b04e4 100644 --- a/bsp/raspberry-pico/libraries/Kconfig +++ b/bsp/raspberry-pico/libraries/Kconfig @@ -114,6 +114,11 @@ menu "On-chip Peripheral Drivers" bool "Enable ADC2 (GP28)" default n endif + + config BSP_USING_WDT + bool "Enable WDT" + select RT_USING_WDT + default n endmenu endmenu diff --git a/bsp/raspberry-pico/libraries/SConscript b/bsp/raspberry-pico/libraries/SConscript index d6210e57c1..7ac63498d2 100644 --- a/bsp/raspberry-pico/libraries/SConscript +++ b/bsp/raspberry-pico/libraries/SConscript @@ -12,6 +12,7 @@ pico-sdk/src/rp2_common/pico_multicore/multicore.c pico-sdk/src/rp2_common/pico_stdlib/stdlib.c pico-sdk/src/rp2_common/hardware_gpio/gpio.c pico-sdk/src/rp2_common/hardware_adc/adc.c +pico-sdk/src/rp2_common/hardware_watchdog/watchdog.c pico-sdk/src/rp2_common/hardware_claim/claim.c pico-sdk/src/rp2_common/hardware_sync/sync.c pico-sdk/src/rp2_common/pico_platform/platform.c @@ -67,6 +68,7 @@ path = [ cwd + '/pico-sdk/src/common/pico_stdlib/include', cwd + '/pico-sdk/src/rp2_common/hardware_gpio/include', cwd + '/pico-sdk/src/rp2_common/hardware_adc/include', + cwd + '/pico-sdk/src/rp2_common/hardware_watchdog/include', cwd + '/pico-sdk/src/common/pico_base/include', cwd + '/pico-sdk/src/boards/include', cwd + '/pico-sdk/src/rp2_common/pico_platform/include',