WDT各寄存器

WDT

WDT(WatchDog Timer)是MCU(微控制单元)中常用的模块。是一个定时器电路,有一个俗称“喂狗”的操作,同时有一个输出连接到MCU的全局复位端。用途是防止程序发生“死”循环或者”跑飞“。

功能特性

  • 本质31位计数器,每个周期++。
  • 支持可编程寄存器设定计数器阈值,比较值达到阈值会产生复位信号或者中断。
  • 无“看门狗”,可作为精确的周期性中断发生器。
  • 对密码寄存器写入密码后才能对“看门狗”操作,可以防止错误代码意外写入WDT的寄存器。

寄存器

  • 寄存器名称 地址 复位默认值 描述
  • WDOGCFG 0x1000_0000 0x0 配置寄存器
  • WDOGCOUNT 0x1000_0008 0x0 计数器计数值寄存器
  • WDOGS 0x1000_0010 0x0 计数器比较值寄存器
  • WDOGFEED 0x1000_0018 0x0 "喂狗"寄存器
  • WDOGKEY 0x1000_001C 0x0 密码寄存器
  • WDOGCMP 0x1000_0020 0xFFFF 比较器寄存器

WDOGCFG 各比特域描述

比特域:一种由结构体扩展而来的数据结构形式,也成为位域或占位符。

  • WDOGCMPIP 28 可读可写 0x0 反映WDT产生的中断等待状态。软件可以改变此域值,写入0清除中断。
  • WDOGENCOREAWAKE 13 可读可写 0x0 值为1,计数器仅在主域没有被PMU(电源管理单元)关电时进行计数。
  • WDOGENALWAYS 12 可读可写 0x0 值配置为1,计数器一直计数
  • WDOGZEROCMP 9 可读可写 0x0 值配置为1,计数器到阈值将会清零,可以利用此特性产生周期性中断;值配置为0,到达阈值不会清零
  • WDOGRSTEN 8 可读可写 0x0 阈值配置为1,WDT可以产生全局复位;0,不能
  • WDOGSCALE 3:0 可读可写 0x0 用于指定从WDOGCOUNT寄存器取出16位的低起始位置

WDT的计数器计数值寄存器-WDOGCOUNT

WDOGCOUNT是一个31位可读可写寄存器,计数器使能后,每个时钟周期自增1。

  • 在蜂鸟E203MCU中,WDT处于常开域的时钟域。
  • 由于常开域的低速时钟频率为32.768kHz,因此,在理论上,31位的计数器可以计
    时超过18小时(约65536秒)。

使能条件

  • 条件1:如果WDOGCFG寄存器的WDOGENALWAYS域的值被配置为1,则计数器永远进行计数。
  • 条件2:如果WDOGCFG寄存器的WDOGENCOREAWAKE域的值被配置为1,则计数器仅在主域没有被PMU(电源管理单元)关电时进行计数。

计数器清零情况

  • WDT的计数器在系统复位后会被清零。
  • 在软件通过写入特殊值至WDOGFEED寄存器进行“喂狗”操作时,WDT的计数器将会被清零。读者可通过2.11.7节了解“喂狗”操作的更多信息。
  • 如果WDOGCFG寄存器的WDOGZEROCMP域的值被配置为1,计数器的比较值不
    断自增并达到了设定的比较阈值,那么WDT的计数器将会被清零。

解锁寄存器–WDOGKEY

WDT在正常状态下处于被锁定状态。若需要写WDT寄存器需要先解锁。

  • WDOGKEY寄存器是一个1位的寄存器,其值为0表示WDT处于上锁状态,值为1表示WDT处于解锁状态。
  • WDT在上电复位后处于上锁状态,即WDOGKEY寄存器的值为0。
  • 软件将特定值0x51F15E写入WDOGKEY寄存器,则将WDT解锁,即WDOGKEY寄存器的值变为1。
  • 除解锁操作外,在软件对任何wDT相关的寄存器进行写操作后,WDT将会重新上锁。

“喂狗寄存器”–WDOGFEED

WDT通过将特定值0xD09F00D写入WDOGFEED寄存器,从而达到“喂狗”的效果,之后,WDT计数器清零。

写入之前必须先解锁。WDOGFEED寄存器专门用于“喂狗”的写操作。如果软件读WDOGFEED寄存器的值,则永远返回0。

WDT的计数器比较值寄存器–WDOGS

寄存器的值来自计数值寄存器取出的16位。配置寄存器WDOGGCFG的WDOGSCALE指定16位的起始位置。WDOGS是一个只读寄存器。

如果WDOGCFG寄存器的WDOGSCALE域的值为0,则意味着直接取出WDOGCOUNT寄存器的低16位作为WDOGS寄存器的值;如果WDOGCFG寄存器的WDOGSCALE域的值为最大值15,则意味着将WDOGCOUNT寄存器的值除以2的15次方的结果作为WDOGS寄存器的值,在这种情况下:

  • 在蜂鸟E203MCU中,由于WDT处于常开域的时钟域,而常开域的低速时钟频率为32. 768kHz,因此WDOGS寄存器的值每秒自加1。
  • 计算过程: (1/32768)x2^15= 1。

##比较寄存器WDOGCMP

WDOGCMP是一个16位的寄存器,该寄存器的值将作为比较阈值与WDT的计数器的比较值( WDOGS寄存器的值)进行比较。一旦WDOGS寄存器的值大于或等于WDOGCMP寄存器中的值,便会产生全局复位或者中断。

WDT产生全局复位

如果WDOGCFG寄存器的WDOGRSTEN域的值被配置为1,且WDT被使能之后在相当长的时间内没有被“喂狗”,使得其计数器的比较值(WDOGS寄存器的值)大于或等于WDOGCMP寄存器设定的比较阈值,则会产生复位信号,从而造成整个MCU的复位。

WDT产生中断

如果WDOGCFG寄存器的WDOGRSTEN域的值没有被配置为1,一旦WDT的计数器的比较值(WDOGS寄存器的值)大于或等于WDOGCMP寄存器设定的比较阈值,则会产生中断。中断会被反映在WDOGCFG寄存器的WDOGCMPIP域中。

中断产生后,WDOGCMPIP域值一直保持。

  • 软件需要通过改写WDOGCMP寄存器或者WDOGCOUNT寄存器的值,使得WDOGS寄存器的值小于WDOGCMP寄存器的值,从而实现清除中断的效果。
  • 除此之外,软件还需要通过写WDOGCMPIP域将其清除(或者被系统复位清零)。

如果WDOGCFG寄存器的WDOGRSTEN 域的值被配置为0,且WDOGZEROCMP域的值被配置为1,则WDT模块可以用于产生周期性的中断。

本文链接:https://my.lmcjl.com/post/8809.html

展开阅读全文

4 评论

留下您的评论.