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

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

3天内不再提示

了解Zynq SoC的私有看门狗定时器

OpenFPGA 来源:OpenFPGA 作者:OpenFPGA 2022-04-29 10:19 次阅读

在上一篇博客中,我们查看了 Zynq All Programmable SoC 中每个 CPU 提供的私有计时器。在本博客中,我们将了解 Zynq SoC 的私有看门狗定时器,以及如何使用它,我们将查看其使用示例。

参考:

UG585 CH8 Timer

每个A9处理器都有私有的32位定时器和32位看门狗定时器。两个处理器共享一个64位定时器。这些定时器的时钟始终是的CPU频率的1/2(CPU_3x2x)。

69c16a1a-c754-11ec-bce3-dac502259ad0.png

然而,在我们研究如何配置和使用 Zynq 看门狗之前,我认为最好先了解一下为什么需要看门狗定时器以及看门狗是如何工作的。看门狗解决了无响应软件的必然性,并为这个问题提供了可靠的解决方案。无论最终应用是什么,所有工程师都希望提供可靠的解决方案,优秀的系统设计人员知道他们必须针对所有可能性进行设计。

系统工程团队必须采取许多步骤来确保可靠的设计。第一步是建立定义系统及其软件行为的需求基线。然后,工程团队按照软件生命周期实施这些要求,其中包括:

  • 设计文档的生成
  • 软件设计和源代码
  • 验证策略是否已达到要求

大多数设计将包括确保软件能够对系统故障做出合理响应的方法。这些故障可能会产生两种影响之一——允许软件继续运行,同时保持完整或减少的服务,或者完全无法响应。当软件无法响应时,看门狗定时器可以重新启动系统或确保系统安全的发生故障。(安全关键系统和软件的问题是一个复杂的问题,需要的空间比我在这里详细介绍的要多。)

从最简单的意义上说,看门狗是一个从预加载值开始倒计时的计时器。当软件应用程序执行时,它会定期重置看门狗。如果软件未能重置看门狗,它的计数将达到零,然后看门狗电路复位处理器。当软件正常运行时,看门狗计数永远不会达到零。如果软件由于某种原因出现故障,则看门狗不会复位,计数达到零,处理器复位,软件重新启动。许多系统都有一个寄存器,它在看门狗触发时设置了一个位。此功能允许系统从看门狗复位中恢复过来,同时注意看门狗触发了复位这一事实。

Zynq SoC 中的两个 ARM Cortex-A9 处理器中的每一个都有一个私有看门狗定时器。这些私有看门狗可以用作像私有计时器(在本系列的上一篇博客文章中讨论过)这样的计时器,也可以用作看门狗。Zynq 看门狗定时器通过六个寄存器控制:

  • 看门狗加载寄存器(Watchdog Load Register):保存看门狗定时器倒计时的值。在自动重载模式下,看门狗计数器重置为存储在该寄存器中的值。写入该寄存器将导致看门狗计数器寄存器重置为此值。
  • 看门狗计数器寄存器(Watchdog Counter Register):这是看门狗计数器本身。是递减计数器。根据看门狗模式,写入该寄存器会重新加载计数器。在看门狗模式下,该寄存器只能通过写入看门狗加载寄存器来更新。
  • 看门狗控制寄存器(Watchdog Control Register):该寄存器控制看门狗(定时器或看门狗)的配置、预分频器设置、中断启用、自动重载模式以及看门狗在其当前配置模式下的启用。
  • 看门狗中断状态寄存器(Watchdog Interrupt Status Register):包含一个事件标志,显示计数器何时达到零。写入该寄存器会重置它。
  • 看门狗复位状态寄存器(Watchdog Reset Status Register):该寄存器仅包含一位,仅由上电复位(不是看门狗触发的复位)清除。它也可以通过软件应用程序清除。复位状态位允许软件确定重启的原因是否是由看门狗超时引起的。
  • 看门狗禁用寄存器(Watchdog Disable Register):当看门狗设置为定时器模式时,该寄存器需要写入两个特定模式以启用看门狗控制寄存器中的看门狗模式位。

正如我们在 Zynq SoC 的私有定时器中看到的那样,Zynq 软件开发环境提供了许多可用于配置和驱动看门狗的函数和宏。这些包含在#include "xscuwdt.h" 中。该文件使工具能够:

  • 测试看门狗是否过期
  • 加载看门狗
  • 启动、停止和重新启动看门狗
  • 设置看门狗模式
  • 配置和初始化看门狗

以下示例将看门狗配置为不刷新的传统看门狗,以便看门狗在超时时复位 Zynq SoC。然后,示例代码检查以确定在看门狗复位(例如上电复位或看门狗超时)后复位的原因,并通过 STDOUT 报告此情况。按下按钮启动私人(专用)定时器,点亮 LED,并启动看门狗。为了做到这一切,我们按照标准方法配置看门狗,就像我们迄今为止使用来自 xparameters.h 的数据和配置例程对所有外设所做的那样:

//defineprivatewatchdog
#defineWDT_DEVICE_IDXPAR_SCUWDT_0_DEVICE_ID
#defineINTC_DEVICE_IDXPAR_SCUGIC_SINGLE_DEVICE_ID
#defineWDT_IRPT_INTRXPAR_SCUWDT_INTR
#defineWDT_LOAD_VALUE0xFF

//看门狗配置

WCHConfigPtr=XScuWdt_LookupConfig(WDT_DEVICE_ID);
XScuWdt_CfgInitialize(&WdtInstance,WCHConfigPtr,WCHConfigPtr->BaseAddr);
XScuWdt_LoadWdt(&WdtInstance,WDT_LOAD_VALUE);
XScuWdt_Start(&WdtInstance);

在初始化和加载看门狗之后,接下来的步骤是启用中断(在中断配置函数内)并将看门狗设置为看门狗功能,而不是使用 XScuWdt_SetWdMode() 函数的定时器功能:

//setupthewatchdog

XScuGic_Connect(GicInstancePtr,WdtIntrId,(Xil_ExceptionHandler)WdtIntrHandler,
(void*)WdtInstancePtr);


//设置看门狗

XScuWdt_SetWdMode(WdtInstancePtr);

如果我们希望在定时器模式下使用看门狗,我们可以调用函数:XScuWdt_SetTimerMode()这就是为什么我设置中断以触发在定时器模式下运行的看门狗并为看门狗声明一个空的中断服务程序,在这种情况下将被调用。

我们可以使用读取看门狗复位状态寄存器的函数来查看最后一次复位是否是由于看门狗事件:

XScuWdt_IsWdtExpired(InstancePtr)

下图显示了当处理器从上电复位和按下按钮以启用看门狗定时器时发生的复位上电时通过 STDOUT 输出的结果:

69d874a8-c754-11ec-bce3-dac502259ad0.png

先前的复位状态保持存储在其中的看门狗事件的状态通过 XScuWdt_IsWdtExpired() 访问的看门狗复位状态寄存器。

此示例的源代码:

https://gitee.com/openfpga/zynq-chronicles/blob/master/main_part16.c

69f5cd8c-c754-11ec-bce3-dac502259ad0.jpg


审核编辑 :李倩


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

    关注

    10

    文章

    558

    浏览量

    70699
  • 寄存器
    +关注

    关注

    31

    文章

    5290

    浏览量

    119794
  • 定时器
    +关注

    关注

    23

    文章

    3230

    浏览量

    114313

原文标题:ZYNQ从放弃到入门(六)- 专用看门狗

文章出处:【微信号:Open_FPGA,微信公众号:OpenFPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    一文详解看门狗定时器

    看门狗定时器由独立的1 Mhz 片内振荡驱动。这是VCC = 5V 时的典型值。请参见特性数据以了解其他VCC 电平下的典型值。通过设置看门狗
    发表于 09-02 16:40 3903次阅读
    一文详解<b class='flag-5'>看门狗</b><b class='flag-5'>定时器</b>

    STM32看门狗定时器的工作原理和作用 看门狗定时器的特性

    看门狗定时器(WDT,Watch Dog Timer)是单片机的一个组成部分,它实际上是一个计数,一般来说都是向下计数的,给看门狗一个数字,程序开始运行后
    的头像 发表于 07-27 16:30 5756次阅读
    STM32<b class='flag-5'>看门狗</b><b class='flag-5'>定时器</b>的工作原理和作用 <b class='flag-5'>看门狗</b><b class='flag-5'>定时器</b>的特性

    内部与外部看门狗定时器的比较

    摘要:本文对内部(集成在处理内部)看门狗定时器(WTD)与外部(基于硬件) WDT的优势和劣势进行了对比。内部看门狗便于设计,但容易失效。MAXQ2000微控制
    发表于 05-02 10:34 4561次阅读

    看门狗定时器的设计、工作原理及看门狗定时器的操作

    看门狗定时器(WDT,Watch Dog Timer)是单片机的一个组成部分,它实际上是一个计数,一般给看门狗一个数字,程序开始运行后看门狗
    发表于 05-23 09:14 7609次阅读
    <b class='flag-5'>看门狗</b><b class='flag-5'>定时器</b>的设计、工作原理及<b class='flag-5'>看门狗</b><b class='flag-5'>定时器</b>的操作

    看门狗定时器的作用

    看门狗定时器(WDT,Watch Dog Timer)是单片机的一个组成部分,它实际上是一个计数,一般给看门狗一个数字,程序开始运行后看门狗
    发表于 10-20 14:41 6657次阅读

    dsp看门狗定时器的作用解析

    看门狗在外围监控DSP中软件的运行以及硬件的操作,当CPU出现故障时,看门狗将执行系统复位。如果软件进入了一个不正确的循环或者CPU出现暂时的混乱,看门狗定时器将出现溢出来使系统复位。
    发表于 11-21 16:52 1.4w次阅读
    dsp<b class='flag-5'>看门狗</b><b class='flag-5'>定时器</b>的作用解析

    基于VxWorks的看门狗定高效定时机制设计实现

    VxWorks提供了一个看门狗定时器(watchDog timer),它由以下四个函数维护: wdCreate( ) 创建并初始化一个看门狗定时器;wdDelete( ) 终止并
    发表于 03-06 09:22 4735次阅读
    基于VxWorks的<b class='flag-5'>看门狗</b>定高效<b class='flag-5'>定时</b>机制设计实现

    TB3123 - PIC®单片机的窗口看门狗定时器

    窗口看门狗定时器(Windowed Watchdog Timer,WWDT)是PIC单片机的增强型看门狗定时器。该定时器是PIC单片机现有
    发表于 03-26 14:35 0次下载
    TB3123 - PIC®单片机的窗口<b class='flag-5'>看门狗</b><b class='flag-5'>定时器</b>

    什么是看门狗定时器?为何看门狗定时器如此重要?

    的MCU故障可能无意中使看门狗定时器丧失功用,因此整合看门狗可能不会总是按预期的方式运作。同样地,虽然软件以内部看门狗能够侦测所有冻结或停机的方式编写,但是,采取额外的步骤以冗余方式监
    的头像 发表于 08-29 08:13 2.3w次阅读
    什么是<b class='flag-5'>看门狗</b><b class='flag-5'>定时器</b>?为何<b class='flag-5'>看门狗</b><b class='flag-5'>定时器</b>如此重要?

    看门狗定时器的相关问题和实验说明

    看门狗的作用: 看门狗定时器是一个计数,基本功能是在发生软件问题和程序跑飞后使系统重新启动。看门狗计数
    的头像 发表于 10-06 12:59 4455次阅读
    <b class='flag-5'>看门狗</b><b class='flag-5'>定时器</b>的相关问题和实验说明

    LPC2294看门狗定时器

    看门狗定时器(WDT)特点1.如果不定期重新装载,会内部重置芯片2.调试模式3.由软件启动,但是需要硬件复位或者看门狗复位/中断才能禁用。4.如果看门狗启用了之后,采用不正确或者不完全
    发表于 12-04 10:36 8次下载
    LPC2294<b class='flag-5'>看门狗</b><b class='flag-5'>定时器</b>

    一文详解微控制中的看门狗定时器

    本文介绍看门狗定时器,通常缩写为 WDT,也称为计算机正常运行定时器或 COP。有外部看门狗设备和内部看门狗功能。本文仅介绍内部
    的头像 发表于 04-25 17:26 4937次阅读
    一文详解微控制<b class='flag-5'>器</b>中的<b class='flag-5'>看门狗</b><b class='flag-5'>定时器</b>

    使用高速微型看门狗定时器

    在恶劣环境中使用的高速微控制应用的设计人员将使用看门狗定时器来防止软件失控。DS80C320高速微控制集成了看门狗
    的头像 发表于 02-09 11:54 836次阅读

    内部和外部看门狗定时器的比较

    本文比较了内部(与微处理集成)和外部(基于硬件)看门狗定时器(WDT)的优缺点。它解释了内部看门狗定时器易于实现,但容易发生故障。MAXQ
    的头像 发表于 04-03 11:15 2899次阅读

    AXI时基看门狗定时器(WDT)概述

    XilinxLogiCORE IP AXI4-Lite时基看门狗定时器(WDT)是一个32位外设,提供32位自由运行时基和看门狗定时器
    的头像 发表于 10-16 11:10 1086次阅读
    AXI时基<b class='flag-5'>看门狗</b><b class='flag-5'>定时器</b>(WDT)概述