接口设计
Driver 层接口设计
以下接口是 Watchdog 设备驱动框架的标准接口。
函数原型 | rt_err_t drv_wdt_init(rt_watchdog_t *wdt) |
---|---|
功能说明 | Watchdog 控制器的初始化 |
参数定义 | 无 |
返回值 | 0,成功;<0,失败 |
注意事项 | - |
函数原型 | rt_err_t drv_wdt_control(rt_watchdog_t *wdt, int cmd, void *args) |
---|---|
功能说明 | Watchdog 驱动的 ioctl 接口 |
参数定义 | wdt - 指向 Watchdog 设备 cmd - ioctl 命令码 ioctl 命令相应的参数 |
返回值 | 0,成功;<0,失败 |
注意事项 | - |
其中,cmd 命令码的定义如下(详见 rt-thread/components/drivers/include/watchdog.h):
#define RT_DEVICE_CTRL_WDT_GET_TIMEOUT (RT_DEVICE_CTRL_BASE(WDT) + 1) /* get timeout(in seconds) */ #define RT_DEVICE_CTRL_WDT_SET_TIMEOUT (RT_DEVICE_CTRL_BASE(WDT) + 2) /* set timeout(in seconds) */ #define RT_DEVICE_CTRL_WDT_GET_TIMELEFT (RT_DEVICE_CTRL_BASE(WDT) + 3) /* get the left time before reboot(in seconds) */ #define RT_DEVICE_CTRL_WDT_KEEPALIVE (RT_DEVICE_CTRL_BASE(WDT) + 4) /* refresh watchdog */ #define RT_DEVICE_CTRL_WDT_START (RT_DEVICE_CTRL_BASE(WDT) + 5) /* start watchdog */ #define RT_DEVICE_CTRL_WDT_STOP (RT_DEVICE_CTRL_BASE(WDT) + 6) /* stop watchdog */
另外,基于 aic 的 watchdog 的 cmd 命令码的定义如下(详见 bsp/arcinchip/include/drv/aic_drv_wdt.h):
#define RT_DEVICE_CTRL_WDT_SET_IRQ_TIMEOUT (RT_DEVICE_CTRL_BASE(WDT) + 7) /* set pretimeout(in seconds) */ #define RT_DEVICE_CTRL_WDT_IRQ_ENABLE (RT_DEVICE_CTRL_BASE(WDT) + 8) /* start pretreatment */ #define RT_DEVICE_CTRL_WDT_IRQ_DISABLE (RT_DEVICE_CTRL_BASE(WDT) + 9) /* stop pretreatment */ #define RT_DEVICE_CTRL_WDT_SET_CLR_THD (RT_DEVICE_CTRL_BASE(WDT) + 10) /* set clear threshold */
HAL 层接口设计
HAL 层的函数接口声明存放在 hal_wdt.h
中,主要接口有:
void hal_wdt_op_clr(u32 thd); s32 hal_wdt_is_running(void); void hal_wdt_clr_thd_set(u32 ch, struct aic_wdt *wdt); void hal_wdt_irq_thd_set(u32 ch, struct aic_wdt *wdt); void hal_wdt_rst_thd_set(u32 ch, struct aic_wdt *wdt); void hal_wdt_switch_chan(int chan); u32 hal_wdt_remain(struct aic_wdt *wdt); void hal_wdt_enable(u32 enable, u32 dbg_continue); void hal_wdt_irq_enable(u32 enable); int hal_wdt_irq_sta(void); void hal_wdt_thd_get(u32 ch, struct aic_wdt *wdt); int hal_wdt_clr_int(void); void hal_wdt_status_show(u32 ch);