freescale k21 wtdog的实现

1. 看门狗定时器(WDOG)的功能包括:

•独立于CPU /总线时钟的时钟源输入。 两种时钟源之间的选择:

•低功耗振荡器(LPO)

•外部系统时钟

•解锁序列以允许更新一次写入WDOG控制/配置位。

•所有WDOG控制/配置位仅在解锁后的256个总线时钟周期内可写一次。

•在256个总线时钟周期内解锁后,您需要始终更新这些位。 无法更新这些位会重置系统。

•可编程超时周期,以WDOG时钟周期数指定。

•能够测试WDOG定时器并使用指示看门狗测试的标志进行复位。

•快速测试 - 为快速测试编程的小超时值。

•字节测试 - 一次测试一个定时器的单个字节。

•对WDOG定时器的只读访问 - 允许动态检查WDOG定时器是否正常运行。

•窗口刷新选项

•提供可靠的检查,确保程序流程快于预期。

•可编程窗口。

•刷新外部窗口导致重置。

•强大的刷新机制

•在20个总线时钟周期内将0xA602和0xB480的值写入WDOG刷新寄存器。

•WDOG的计数在发生时重置。

•超时可配置中断以提供调试面包屑。 然后在256个总线时钟周期后复位。

1.1. 解锁和更新看门狗

只要设置了看门狗控制寄存器中的ALLOW_UPDATE,就可以解锁和修改只写一次控制和配置寄存器:

1.在20个总线时钟周期内将0xC520后跟0xD928写入特定的解锁寄存器(WDOG_UNLOCK)。

2.等待一个总线时钟周期。在写入解锁序列后,您不能立即在总线时钟周期更新寄存器。

3.打开一个等于看门狗配置时间(WCT)长度的更新窗口。在此窗口中,您可以更新配置和控制寄存器位。这些​​寄存器位只能在解锁后修改一次。如果没有配置和控制寄存器在更新窗口内更新,看门狗向系统发出复位,即中断然后复位。尝试在初始解锁后解锁WCT内的看门狗无效。在更新操作期间,看门狗定时器未暂停并继续在后台运行。更新窗口关闭后,看门狗定时器重新启动,看门狗根据新配置运行。

更新功能对于具有初始,非安全关键部分的应用程序非常有用,其中看门狗被禁用或具有方便的长时间超时。 这意味着应用程序编码器不必经常为看门狗提供服务。 在应用程序的关键部分开始之后,可以根据需要重新配置看门狗。看门狗会向系统发出一个复位,即中断然后复位(如果已启用),以解决任何这些无效解锁序列:

•将除0xC520或0xD928以外的任何值写入解锁寄存器。

•设置ALLOW_UPDATE,并在写入解锁序列值之间插入超过20个总线时钟周期的间隙。

在解锁序列的两次写入之间以及在成功解锁之后的WCT时间内尝试刷新操作未被检测到。 另外,请参见8位访问的看门狗操作,了解与解锁寄存器的8位访问相关的指南。

解锁和刷新期间的上下文切换可能导致看门狗复位。

1.2. 看门狗配置时间(WCT)

为防止意外修改看门狗的控制和配置寄存器位,您只能在解锁后的256个总线时钟周期内更新它们。这段时间称为看门狗配置时间(WCT)。此外,这些寄存器位只有在解锁后才能修改,即使在复位后也是如此。

您必须在系统复位后解锁WCT内的寄存器,否则WDOG会向系统发出复位失败。换句话说,您必须在重置后至少写入WCT内解锁序列的第一个字。完成此操作后,您还有20个总线时钟周期,即解锁序列字之间允许的最大间隙,以完成解锁操作。此后,为了确保您不要忘记配置看门狗,如果在解锁后WCT中没有更新任何WDOG控制和配置寄存器,则看门狗会发出复位。在该窗口关闭后或第一次写入后,这些寄存器位将被锁定,不再进行任何进一步的更改。

看门狗定时器根据其默认配置通过解锁和更新操作保持运行,这些操作最多可延长2xWCT + 20个总线时钟周期。因此,必须确保看门狗的超时值始终大于2xWCT时间+20个总线时钟周期。

只有在WCT窗口关闭后,写入一次寄存器中的更新才会生效,但以下异常会立即生效:

•启用“停止”,“等待”和“调试”模式

•IRQ_RST_EN

在WCT期间,刷新看门狗的操作未被检测到。

1.3. 刷新看门狗

为监督机构选择了强大的刷新机制。 有效刷新是在20个总线时钟周期内写入0xA602,然后写入0xB480到看门狗刷新寄存器。 如果将这两个值写入的间隔超过20个总线周期,或者如果将这两个值以外的值写入寄存器,则会向系统发出看门狗复位或中断复位(如果已启用)。 有效刷新使看门狗定时器在下一个总线时钟重新启动。 此外,在刷新序列的两次写入之间的尝试解锁操作未被检测到。 有关对刷新寄存器进行8位访问的指导,请参见8位访问的看门狗操作。

1.4. 窗口操作模式

在这种操作模式中,对可以刷新看门狗的超时周期内的时间点进行限制。 仅当看门狗定时器增加超过看门狗窗口寄存器指定的某个计数时,才认为刷新有效。 这被称为在总超时期限的窗口内刷新看门狗。 如果在定时器达到窗口值之前尝试刷新,则看门狗会产生复位,如果启用则会产生中断然后复位。 如果根本没有刷新,则看门狗超时并产生复位或中断然后复位(如果启用)。

1.5. 看门狗禁止工作模式

当通过看门狗状态和控制寄存器中的WDOG_EN位禁止看门狗时,看门狗定时器将复位为零,并且在您启用它之前禁止计数,或者通过系统复位再次启用它。 在此模式下,看门狗定时器无法刷新 - 禁用定时器时无需执行此操作。

但是,看门狗在非超时异常时仍然会产生复位或中断然后复位(如果已启用)。 请参阅生成的重置和中断。 您需要在启用它之前解锁看门狗。 系统复位会使看门狗退出禁用模式。

1.6. 低功耗操作模式

看门狗的低功耗操作模式如下表所述:

mode

Behavior

Wait

如果WDOG被使能(WAIT_EN = 1),它可以在总线时钟或低功耗振荡器时钟(CLK_SRC = x)上运行,以产生中断(IRQ_RST_EN = 1),然后在超时时复位。 复位后,WDOG复位计数器递增1。

Stop

如果总线时钟被门控,则WDOG只能在低功耗振荡器时钟(CLK_SRC = 0)上运行(如果在停止时使能(STOP_EN = 1))。 在这种情况下,WDOG运行两次超时,然后从其备份电路产生复位。 因此,如果将看门狗编程为100 ms后超时,然后进入这种停止模式,则复位将在200 ms后发生。 此外,在这种情况下,无论IRQ_RST_EN位的值如何,都不会产生中断。 WDOG复位后,WDOG复位计数器也不会递增。

Power-Down

看门狗是

•LLS模式下的静态

•在VLLSx模式下关闭电源

1.7. 调试操作模式

您可以通过看门狗控制寄存器中的DBG_EN将看门狗编程为在调试模式下禁用。这导致看门狗定时器暂停模式的持续时间。仍允许注册读/写,这意味着允许刷新,解锁等操作。退出模式后,计时器从暂停点恢复其操作。

系统进入调试模式并不能免于在解锁后的WCT时间内强制配置看门狗,除非系统总线时钟被关闭,在这种情况下内部状态机也会暂停。如果不这样做,仍然会导致系统复位或中断然后复位(如果已启用)。此外,导致重置到系统的所有异常条件(如生成的重置和中断中所述)在此模式下仍然有效。因此,如果发生异常情况且系统总线时钟打开,则会发生复位,如果启用则会发生中断后复位。

复位后进入WCT内的调试模式的处理方式不同。 WDOG定时器保持重置为零,无需在WCT内解锁和配置。您不得尝试在此状态下刷新或解锁WDOG,否则可能会导致未知行为。 退出此模式后,WDOG定时器将重新启动,并且必须在WCT内解锁和配置WDOG。

2. 测试看门狗

对于IEC 60730和其他安全标准,期望必须测试监视安全功能的任何内容,并且该测试必须是容错的。 要测试看门狗,必须测试其主定时器及其相关的比较和复位逻辑。 为此,对快速测试和字节测试中描述的监视器实施了两个测试。 提供控制位以使看门狗进入功能测试模式。 还有一个覆盖测试禁用控制位,允许永久禁用功能测试模式。 设置后,该测试禁用位只能通过复位清除。

这两个测试实现了测试计数器功能以及比较和重置逻辑的总体目标。

在这些测试期间不要启用看门狗中断。 如果需要,您必须确保有效超时值大于WCT时间。 有关更多详细信息,请参阅生成的重置和中断。

要运行特定测试:

1.选择快速测试或字节测试..

2.将某个测试模式位置1,使看门狗进入功能测试模式。 将该位置1会自动将看门狗定时器切换为快速时钟源。 完成时钟源的切换以实现更快的超时并因此实现更快的测试。

在成功测试中,定时器在达到编程的超时值后超时并产生系统复位。

由于看门狗测试而出现复位后,解锁并配置看门狗。 在测试模式下,不会自动禁用刷新和解锁操作以及中断。

2.1 快速测试

在此测试中,看门狗定时器的超时值被编程为一个非常低的值,以实现快速超时。 快速测试和看门狗正常模式之间的唯一区别是TESTWDOG设置为快速测试。 这允许更快地测试看门狗复位机制。

2.2 字节测试

字节测试是对看门狗定时器的更彻底的测试。 在此测试中,定时器被分成其组成的字节宽级,这些级独立运行并针对超时值寄存器的相应字节进行超时测试。 下图解释了拆分概念:

每个级都是一个8位同步计数器,后跟产生溢出信号的组合逻辑。 溢出信号用作第N级的使能。

在测试模式下,当测试单个字节N时,字节N-1强制加载0xFF,并允许这两个字节从时钟源运行。 通过这样做,立即产生来自级N-1的溢出信号,使能计数器级N.第N级运行并与超时值寄存器的第N个字节进行比较。 以这种方式,还测试字节N以及它与前一级之间的链接。 没有其他阶段,N  -  2,N  -  3 ......和N 1,N 2 ...在字节N上进行测试。这些禁用阶段,除了计数器的最重要阶段,都加载了一个值 0xFF.

3. 备份复位发生器

备份复位发生器产生最终复位,然后输出到系统。 它有一个备份机制,可确保在总线时钟停止并防止主状态机产生复位异常/中断的情况下,看门狗定时器的超时将作为复位单独路由到系统。 在没有中间系统复位的情况下,两个连续的定时器超时导致备用复位发生器将超时信号路由出去作为系统的复位。

4. 生成重置和中断

看门狗在以下事件中生成重置,也称为异常:

•看门狗超时

•系统复位解除激活后,在WCT时间内未能解锁看门狗

•解锁后,不更新WCT窗口内的控制和配置寄存器。 必须在WCT窗口中至少写入以下寄存器之一以避免重置:

•WDOG_ST_CTRL_H,WDOG_ST_CTRL_L

•WDOG_TO_VAL_H,WDOG_TO_VAL_L

•WDOG_WIN_H,WDOG_WIN_L

•WDOG_PRESCALER

•解锁序列或刷新序列以外的值分别写入解锁和/或刷新寄存器。

•在解锁序列的两个值的写入之间存在超过20个总线周期的间隙。

•刷新序列的两个值的写入之间存在超过20个总线周期的间隙。

看门狗也可以产生中断。 如果设置了IRQ_RST_EN,则在上述事件中设置WDOG_ST_CTRL_L [INT_FLG],产生中断。 WCT时间之后也会生成看门狗复位,以确保看门狗具有容错能力。可以通过将1写入INT_FLG来清除中断。

中断和复位之间的WCT间隙意味着WDOG超时值必须大于WCT。 否则,如果由于超时而产生中断, 则在该WCT间隙中将发生第二次连续超时。这将触发备份复位发生器以产生对系统的复位,过早地结束中断服务程序执行。 此外,诸如计算看门狗复位次数等工作将无法完成。

设计看门狗功能程序的流程:

1、找到看门狗的时钟源,在WDOG_STCTRLH寄存器的CLKSRC位可以选择用LPO(低功耗

荡器)或者外部系统时钟,这里确认为LPO(1Khz)。

2、首先配置WDOG_STCTRLH的ALLOWUPDATE位,再20个时钟周期内向WDOG_UNLOCK写入0xC520和0xD928解锁完成可配置修改寄存器操作。

3、向WDOG_STCTRLH的WDOGEN写1使能看门狗,IRQRSTEN写1使能中断模式。

4、向WDOG_PRESC写入值分频,已确定Wdog clock。

5、配置WDOG_TOVALH和WDOG_TOVALL已配置溢出时间,看门狗的超时值必须至少设置为四个看门狗时钟周期。 这是为了考虑在看门狗时钟域中生效的新设置的延迟。

6、初始化中断,看门狗的中断号为38.调用enable_irq(38)。

初始化完成。

看门狗中断服务函数中刷新值,在刷新前读取一下WDOG_STCTRLL的INTFLG位(bit15)是否为1,在20个总线时钟周期内向WDOG_REFRESH中写入0xA602和0xB480,然后清除INTFLG位。

注意:在每次修改配置和状态寄存器时,需要先向ALLOWUPDATE写值,再20个时钟周期内向WDOG_UNLOCK写入0xC520和0xD928解锁完成可配置修改寄存器操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值