LPD_SWDT---swdt0
FPD_SWDT--swdt1




可以选择超时是否输出reset信号(reset out)


https://github.com/Xilinx/embeddedsw/tree/master/XilinxProcessorIPLib/drivers/wdtps/examples
超时时间,主要通过设置Contrl 中的CRV寄存器来实现。

下面接单介绍下这个寄存器中的Counter值如何计算:
count = (timeout * clock) / prescaler + 1
这个count值以0xFFF为单位,0-0xFFF,所以再除以0x1000得到寄存器手册中的N值。bit2-bit13要写入的是N的值。
所以最终的CRV的计算公式是:
count = ((timeout * clock) / prescaler)/0x1000 + 1
如果我们想设置10s钟的超时时间:
count = (5 * (99990000 / 4096))/4096 + 1 = 30
/*
* Set the initial counter restart to the smallest value (0).
*/
XWdtPs_SetControlValue(&Watchdog,
(u8) XWDTPS_COUNTER_RESET, (u8) 30);
/*
* Set the initial Divider ratio at the smallest value.
*/
XWdtPs_SetControlValue(&Watchdog,
(u8) XWDTPS_CLK_PRESCALE,
(u8) XWDTPS_CCR_PSCALE_4096);测试超时时间:
#include "xtime_l.h"
XTime tStart = 0;
XTime tEnd = 0;
double dtime = 0;
XTime_GetTime(&tStart);
while (1) {
if (!(XWdtPs_IsWdtExpired(&Watchdog))) {
ExpiredTimeDelta1++;
} else {
break;
}
}
XTime_GetTime(&tEnd);
dtime = ((double)(tEnd - tStart) / (double)COUNTS_PER_SECOND);
xil_printf("watchdog expire time:%d,%d,%d\n\r",tEnd,tStart,(int)dtime);输出结果:
watchdog expire time:520642674,553036,5driver: drivers/watchdog/cadence_wdt.c
echo 1 > /dev/watchdog0
注:需要在PMU中使能一下2个宏定义,才能够实现看门狗超时时复位。
ENABLE_EM
ENABLE_SCHEDULER
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。