Edit online

接口设计

Driver 层接口设计

以下接口是 Watchdog 设备驱动框架的标准接口。

1. drv_wdt_init
函数原型 rt_err_t drv_wdt_init(rt_watchdog_t *wdt)
功能说明 Watchdog 控制器的初始化
参数定义
返回值 0,成功;<0,失败
注意事项 -
2. drv_wdt_control
函数原型 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);