首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >MPSoc SWDT的使用

MPSoc SWDT的使用

原创
作者头像
Frank-大龙
发布2025-05-07 14:20:32
发布2025-05-07 14:20:32
3250
举报
文章被收录于专栏:MPSOCMPSOC

Mpsoc 的watch dog

1. SWDT0/SWDT1

LPD_SWDT---swdt0

FPD_SWDT--swdt1

2. 框图:

3. 使能SWDT

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

4. 时钟

5. 裸机使用比较简单,参考embeddedsw中的example中即可

https://github.com/Xilinx/embeddedsw/tree/master/XilinxProcessorIPLib/drivers/wdtps/examples

6. 如何准确的设置超时时间

超时时间,主要通过设置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

代码语言:C
复制
	/*
	 * 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);

测试超时时间:

代码语言:C
复制
#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);

输出结果:

代码语言:C
复制
watchdog expire time:520642674,553036,5

7. Linux下使用watchdog

driver: drivers/watchdog/cadence_wdt.c

echo 1 > /dev/watchdog0

注:需要在PMU中使能一下2个宏定义,才能够实现看门狗超时时复位。

ENABLE_EM

ENABLE_SCHEDULER

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Mpsoc 的watch dog
    • 1. SWDT0/SWDT1
    • 2. 框图:
    • 3. 使能SWDT
    • 4. 时钟
    • 5. 裸机使用比较简单,参考embeddedsw中的example中即可
    • 6. 如何准确的设置超时时间
    • 7. Linux下使用watchdog
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档