通过分析瑞萨已适配的看门狗驱动,我们可以得到以下信息:
1. 需要使用fsp生成一个名为g_wdt_ctrl的全局变量,用于维护看门狗所需配置
2. 看门狗时间不可动态设置,只能在fsp中默认设置
配置过程
配置代码
在emu中运行menuconfig,打开看门狗配置
运行scons --target=mdk5,把dac部分导入工程

配置看门狗
打开新生成的keil工程后运行RASC,增加看门狗相关配置


生成代码配置
修改代码
因为驱动对接上层的设备名称就叫wdt,因此我就直接使用rtt官网上的测试脚本做测试了,但是需要做以下修改:
1. 由于驱动使用fsp设置的超时时间,因此上层设置超时时间时会向上层报错,需要屏蔽上层设置超时时间的代码。
2. 测试程序默认看门狗正常工作,增加了不断喂狗的动作,反而不能判断看门狗是否工作,因此将喂狗回调去掉。
具体代码如下:
#define WDT_DEVICE_NAME "wdt" /* 看门狗设备名称 */
static rt_device_t wdg_dev; /* 看门狗设备句柄 */
static int wdt_sample(int argc, char *argv[])
{
rt_err_t ret = RT_EOK;
char device_name[RT_NAME_MAX];
/* 判断命令行参数是否给定了设备名称 */
if (argc == 2)
{
rt_strncpy(device_name, argv[1], RT_NAME_MAX);
}
else
{
rt_strncpy(device_name, WDT_DEVICE_NAME, RT_NAME_MAX);
}
/* 根据设备名称查找看门狗设备,获取设备句柄 */
wdg_dev = rt_device_find(device_name);
if (!wdg_dev)
{
rt_kprintf("find %s failed!\n", device_name);
return RT_ERROR;
}
/* 初始化设备 */
rt_device_init(wdg_dev);
/* 启动看门狗 */
ret = rt_device_control(wdg_dev, RT_DEVICE_CTRL_WDT_START, RT_NULL);
if (ret != RT_EOK)
{
rt_kprintf("start %s failed!\n", device_name);
return -RT_ERROR;
}
return ret;
}
/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(wdt_sample, wdt sample);编译固件
结果验证
\ | / - RT - Thread Operating System / | \ 5.2.0 build Feb 9 2025 22:38:00 2006 - 2024 Copyright by RT-Thread team Hello RT-Thread! msh > msh > msh > msh >wd wdt_sample msh >wdt_sample msh > \ | / - RT - Thread Operating System / | \ 5.2.0 build Feb 9 2025 22:38:00 2006 - 2024 Copyright by RT-Thread team Hello RT-Thread! msh >
其实这个位置使用动态图或者录视频的方式更加直观,具体效果为,运行wdt_sample后约2s,从打印上看,芯片重启,此时看门狗起作用。
我要赚赏金
