0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MPSoC SWDT在Standalone下的应用有哪些?

YCqV_FPGA_EETre 来源:搜狐网 作者:搜狐网 2020-09-19 11:15 次阅读

1、 Author

Hank Fu (付汉杰) Staff FAE embedded, Xilinx, Inc.hankf@xilinx.com

2、问题
工程师反映,根据MPSoC SWDT在Standalone下的例子xwdtps_polled_example.c,不能实现MPSoC的PS复位。SWDT例子来自于目录XilinxSDK2018.3dataembeddedswXilinxProcessorIPLibdriverswdtps_v3_1examples。SWDT例子xwdtps_polled_example.c只检查了超时状态,没有实现复位。工程师把其中的“XWdtPs_DisableOutput(&Watchdog, XWDTPS_RESET_SIGNAL)”改为“XWdtPs_EnableOutput(&Watchdog, XWDTPS_RESET_SIGNAL)”,仍然不能复位。

工程师根据FSBL的main.c中的InitWatchDog( ),添加代码后,依然不能使MPSoC的PS复位。

3、 分析

3.1. FSBL的main.c

main.c是Zynq-7000的FSBL的代码。客户使用SOurce Insight分析代码时,使用了错误的文件。

3.2. MPSoC的FSBL

MPSoC的FSBL的主文件是xfsbl_main.c,wdt的代码在xfsbl_misc_drivers.c和xfsbl_misc_drivers.h中,初始化WDT的函数是u32 XFsbl_InitWdt(void),宏定义XFSBL_WDT_EXPIRE_TIME定义了FSBL中wdt的超时时间。

在XFsbl_InitWdt(void)中,初始化并启动WDT(XWdtPs_RestartWdt( ))后,直接使用sleep(20),睡眠20秒。睡眠过程中,因为WDT超时,MPSoC的PS会被复位。这说明FSBL关于WDT代码是正确的。

3.3. Standalone下的WDT

对比MPSoC FSBL初始化WDT的函数XFsbl_InitWdt( ),发现它设置了PMU的ERROR_SRST_EN_1 Register和ERROR_EN_1 Register。把相关代码复制到Standalone下的代码,在初始化WDT之前运行。重新编译后,WDT超时会复位MPSoC的PS。

3.4. 再次运行时,设置PMU的ERROR_SRST_EN_1后,PS马上复位。

WDT超时后,再次使用Debugger运行时,设置PMU的ERROR_SRST_EN_1后,WDT还没有被初始化时,PS马上被复位。检查PMU ERROR_STATUS_1 Register,发现WDT的超时状态为1。于是把读取到的ERROR_STATUS_1的值,再写回ERROR_STATUS_1 Register,清除WDT的超时状态。

这样在WDT超时后,设置PMU的ERROR_SRST_EN_1后,PS不会马上被复位。

3.5. FPD_SWDT 和 LPD_SWDT

工程师发现使用LPD_SWDT,能复位PS;换成FPD_SWDT,不能复位PS。

在设置PMU的ERROR_SRST_EN_1 Register和ERROR_EN_1 Register时,LPD_SWDT和FPD_SWDT有各自的使能位。增加设置FPD_SWDT的使能位后,换成FPD_SWDT,也能复位PS。

#define PMU_GLOBAL_ERROR_SRST_EN_1 ( ( PMU_GLOBAL_BASEADDR ) + 0X0000056CU ) #define PMU_GLOBAL_ERROR_SRST_EN_1_LPD_SWDT_MASK 0X00001000U #define PMU_GLOBAL_ERROR_SRST_EN_1_FPD_SWDT_MASK 0X00002000U04 Vivado 设置

使用WDT,要在Vivado里的PCW里,使能对应的WDT。

5、相关代码

5.1. 检查和清除PMU寄存器

xil_printf(" " ); u32_reg = Xil_In32(0xFFD80530); xil_printf("Old PMU ERROR_STATUS_1 (PMU_GLOBAL) Register: %x. ", u32_reg ); Xil_Out32(0xFFD80530, u32_reg); // Clear PMU ERROR_STATUS_1 (PMU_GLOBAL) Register u32_reg = Xil_In32(0xFFD80540); xil_printf("Old PMU ERROR_STATUS_2 (PMU_GLOBAL) Register: %x. ", u32_reg ); Xil_Out32(0xFFD80540, u32_reg); // Clear PMU ERROR_STATUS_2 (PMU_GLOBAL) Register u32_reg = Xil_In32(0xFFD80530); xil_printf("New PMU ERROR_STATUS_1 (PMU_GLOBAL) Register: %x. ", u32_reg ); u32_reg = Xil_In32(0xFFD80540); xil_printf("New PMU ERROR_STATUS_2 (PMU_GLOBAL) Register: %x. ", u32_reg );

5.2. 检查SWDT寄存器状态

void CheckWDTRegisterValue( u32 EffectiveAddress ) { u32 u32_reg; u32_reg = XWdtPs_ReadReg(EffectiveAddress, XWDTPS_ZMR_OFFSET); xil_printf("WDT Zero Mode Register: %x. ", u32_reg ); u32_reg = XWdtPs_ReadReg(EffectiveAddress, XWDTPS_CCR_OFFSET); xil_printf("WDT Counter Control Register: %x. ", u32_reg ); u32_reg = XWdtPs_ReadReg(EffectiveAddress, XWDTPS_RESTART_OFFSET); xil_printf("WDT Restart Register: %x. ", u32_reg ); u32_reg = XWdtPs_ReadReg(EffectiveAddress, XWDTPS_SR_OFFSET); xil_printf("WDT Status Register: %x. ", u32_reg ); }

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Standalone
    +关注

    关注

    0

    文章

    4

    浏览量

    6532
  • MPSoC
    +关注

    关注

    0

    文章

    194

    浏览量

    24111

原文标题:【干货分享】MPSoC SWDT在Standalone下的应用

文章出处:【微信号:FPGA-EETrend,微信公众号:FPGA开发圈】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    看门狗在Zynq MPSoC上的使用技巧

    在Zynq MPSoC的器件里,PS (Processing System )集成了三个看门狗,分别是CSU SWDT,LPD SWDT和FPD SWDT
    的头像 发表于 06-30 09:47 926次阅读
    看门狗在Zynq <b class='flag-5'>MPSoC</b>上的使用技巧

    Zynq UltraScale + MPSoC USB 3.0 CDC器件类设计

    设备模式使用Zynq®UltraScale+™MPSoC USB 3.0控制器,并使用批量传输类型使用USB 3.0进行串行通信设备抽象。USB组件中的CDC(ACM)类用于数据通信。您通常可以串行
    发表于 01-03 09:59

    SDK中运行程序时能在StandAlone模式使用多少内存?

    SDK中运行程序时,我可以StandAlone模式使用多少内存?(带有1G DDR的Zynq7030上)运行程序时独立模式需要多少内
    发表于 03-29 13:37

    我的hello world(基于米尔MPSOC开发板)

    Hello World好啦,用MPSOC上输出HELLO WORLD已经完成。其实也不难,关键是要多看开发手册、光盘资料,配置细节上留意(因为篇幅太长,这里缩减了许多步骤图片)。另外,不明白的地方可以找米尔技术支持。``
    发表于 08-07 15:05

    什么是Xilinx ZynqUltraScale+ MPSoC技术?

    ZynqUltraScale+ MPSoC是Xilinx推出的第二代多处理SoC系统,第一代Zynq-7000的基础上做了全面升级。包括先进的multi-domain,multi-island电源
    发表于 10-09 06:07

    如何利用ZYNQ MPSoC玩DOOM?

    赛灵思和 DornerWorks 的系统软件团队赛灵思的 Zynq® Ultrascale+™ MPSoC 上启动 Xen Project 管理程序时,我们发现可通过运行当年叱诧一时的流行电子游戏
    发表于 10-09 06:21

    请问Zynq Ultrascale + MPSOC本身是否存在问题?

    你好我们正在考虑我们的新设计中使用Zynq Ultrascale + MPSOC。我们想在我们的电路板设计中加入HDMI接口。 Zynq Ultrascale + MPSOCPS中
    发表于 10-14 09:17

    如何调试Zynq UltraScale+ MPSoC VCU DDR控制器

      如何调试Zynq UltraScale+ MPSoC VCU DDR控制器  Zynq UltraScale+ MPSoC VCU DDR 控制器是一款专用 DDR 控制器,只支持 Zynq
    发表于 01-07 16:02

    ZYNQ Ultrascale+ MPSOC FPGA教程

    ZYNQ Ultrascale+ MPSOC FPGA教程
    发表于 02-02 07:53

    如何在MPSoC上运行基于eglfs_kms的QT应用程序

    MPSoC上运行基于eglfs_kms的QT应用程序
    发表于 02-19 08:01

    基于MPSoC的以太网接口该如何去设计?

    本文介绍了一种基于MPSoC的以太网接口设计方案。
    发表于 05-19 07:22

    干货:PSoC SWDTStandalone下的应用

    SWDTStandalone 下的例子 xwdtps_polled_example.c,不能实现 MPSoC 的 PS 复位。SWDT 例子来自于目录 /Xilinx/SDK/
    的头像 发表于 10-30 10:13 673次阅读

    CSU SWDT、LPD SWDT和FPD SWDT的关系与使用

    在Zynq MPSoC的器件里,PS (Processing System )集成了三个看门狗,分别是CSU SWDT,LPD SWDT和FPD SWDT。CSU
    的头像 发表于 06-15 11:52 1948次阅读

    C1M-A1/2 SWDT 用户手册 HW

    C1M-A1/2 SWDT 用户手册 HW
    发表于 02-02 19:18 0次下载
    C1M-A1/2 <b class='flag-5'>SWDT</b> 用户手册 HW

    C1M-A1/2SWDT 用户手册 HW

    C1M-A1/2 SWDT 用户手册 HW
    发表于 07-04 19:04 0次下载
    C1M-A1/2<b class='flag-5'>SWDT</b> 用户手册 HW