在工程内调用如下函数,配置看门狗程序,最后一个参数 float number 为看门狗的喂狗时间,
超过时间限制将重启系统
同时需要注意添加相关头文件
#include "xparameters.h"
#include "xscuwdt.h"
int watchdogConfig(XScuWdt * WdtInstancePtr, u16 DeviceId,float number)
{
int Status;
XScuWdt_Config *ConfigPtr;
u32 result;
//用来配置 WDT 的设备 ID 号,ID 号在#include "xparameters.h"中可以找到。
xil_printf("start the watchdog time``r successful! ");
ConfigPtr = XScuWdt_LookupConfig(DeviceId);
//初始化 WDT 计数器
Status = XScuWdt_CfgInitialize(WdtInstancePtr, ConfigPtr,
ConfigPtr->BaseAddr);
if (Status != XST_SUCCESS) {
return XST_FAILURE;
}
//通过设置看门狗控制寄存器的 WD 模式位,将看门狗定时器置于看门狗模式
XScuWdt_SetWdMode(WdtInstancePtr);
//给 WDT 计数器装初值,这里我对此函数进行了封装。已知 CPU 的时钟频率为 666.6666Mhz
,
//即 WDT 的时钟频率为 333.33Mhz,可得倒计时 1s 计数器需要配置的初值为 333_333_333
,
//对计数器赋的初值可以直接写在 number 变量中(本文赋值为 10s)。
result = (unsigned long)(333333333*number);
XScuWdt_LoadWdt(WdtInstancePtr,result);
//开启看门狗计数器。
XScuWdt_Start(WdtInstancePtr);
return XST_SUCCESS;
}
喂狗(重置计数函数为),传入声明的看门狗指针即可
XScuWdt_RestartWdt(Watchdog);