为什么程序会停止 MSP430 上的看门狗定时器?

电器工程 msp430
2022-01-31 06:31:43

MSP430 的许多示例程序的第一行如下:

WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer

他们为什么这样做呢?

2个回答

看门狗定时器 (WDT) 默认开启,它在更复杂的应用程序中很有用,但会让很多新人绊倒。他们通常不会在他们的代码中服务 WDT 或包含一个中断服务程序 (ISR) 来处理 WDT 事件,因此,当他们的芯片不断复位时,他们会变得非常沮丧。此外,在大多数情况下,示例程序不会尝试演示 WDT,因此将其关闭。

编辑:看门狗定时器可能被命名为“死人开关”。它的默认行为是重置微控制器,除非固件定期让它知道一切运行正常。这被称为“喂狗”或“踢狗”。这样,如果您的固件卡在一个循环中或以其他方式停止按预期运行,则看门狗不会被馈送并将重置芯片(希望恢复到新的工作状态)。

您还可以将 WDT 用作周期性中断来执行其他任务,无论您能想到什么。您只需要编写相关的 ISR。

除了 Samuel 关于人们不小心绊倒 WDT 的观点之外,还有另一个重要的原因是为什么它最初应该被禁用。

即使您的应用程序通常能够正确重置计时器,它也可能无法在初始化代码期间这样做,原因有两个:

  • 初始化可能需要比单个 WDT 滴答声更长的时间,但需要禁用中断。这意味着,如果您依靠计时器 ISR 来重置计时器,您可能会进入无限引导循环。
  • 您不一定知道所有 MCU 上定时器寄存器的状态(即,下一个滴答声可能比预期的要早得多,因为寄存器可能不会从 0 开始)。

因此,最好的做法是首先禁用 WDT,即使您从未启用它

如果您确实想使用它,您可以在打开中断之前立即重新启用它,作为初始化代码的最后一步。