#define IWDG_DEVICE_NAME "wdt" /*wdt device name*/
static rt_device_t wdg_dev; /*wdt device pointer*/
static void idle_hook(void)
{
rt_device_control(wdg_dev, RT_DEVICE_CTRL_WDT_KEEPALIVE, NULL);
}
static int iwdg_sample(void)
{
rt_err_t ret = RT_EOK;
rt_uint32_t settimeout = 100000; /*timeout*/
rt_uint32_t gettimeout = 0;
rt_uint32_t lefttime = 0;
/*find device*/
wdg_dev = rt_device_find(IWDG_DEVICE_NAME);
if (!wdg_dev)
{
rt_kprintf("find %s failed!\n", IWDG_DEVICE_NAME);
return RT_ERROR;
}
/*init device*/
ret = rt_device_init(wdg_dev);
if (ret != RT_EOK)
{
rt_kprintf("initialize %s failed!\n", IWDG_DEVICE_NAME);
return RT_ERROR;
}
/*set wdt timeout*/
ret = rt_device_control(wdg_dev, RT_DEVICE_CTRL_WDT_SET_TIMEOUT, &settimeout);
if (ret != RT_EOK)
{
rt_kprintf("set %s timeout failed!\n", IWDG_DEVICE_NAME);
return RT_ERROR;
}
ret = rt_device_control(wdg_dev, RT_DEVICE_CTRL_WDT_GET_TIMELEFT, &lefttime);
if (ret != RT_EOK)
{
rt_kprintf("get %s left time failed!\n", IWDG_DEVICE_NAME);
return RT_ERROR;
}
ret = rt_device_control(wdg_dev, RT_DEVICE_CTRL_WDT_GET_TIMEOUT, &gettimeout);
if (ret != RT_EOK)
{
rt_kprintf("get %s timeout failed!\n", IWDG_DEVICE_NAME);
return RT_ERROR;
}
/*set idle thread hook*/
rt_thread_idle_sethook(idle_hook);
ret = rt_device_control(wdg_dev, RT_DEVICE_CTRL_WDT_START, &gettimeout);
if (ret != RT_EOK)
{
rt_kprintf("start %s failed!\n", IWDG_DEVICE_NAME);
return RT_ERROR;
}
return ret;
}
MSH_CMD_EXPORT(iwdg_sample, iwdg sample);