1.6.27 Watchdog Timer (WDT)
The Watchdog timer (WDT) is designed to give an added level of safety in critical systems, to ensure a system reset is triggered in the case of a deadlock or other software malfunction that prevents normal device operation.
It operates from the internal Low-Power Oscillator (LPRC) clock source. Various WDT time-out periods can be selected using the WDT postscaler. The WDT can also be used to wake the device from Sleep or Idle mode.
The following are some of the key features of the WDT module:
-
Configuration or software controlled
-
User-configurable time-out period
-
Can wake the device from Sleep or Idle
Using The Library
The Watchdog Timer (WDT) runs independent of the rest of the system, causing system resets whenever it times out. However, the application software should ensure that the timeout never occurs by resetting the WDT periodically as long as the software is in a known healthy state.
If the system hangs or program execution is corrupted, the WDT will not receive its periodic reset, and will eventually time out and cause a system reset.
In many systems, there is an obvious upper boundary to the amount of time each iteration of the main application loop can be expected to run, before a malfunction can be assumed (either due to a deadlock waiting on hardware or software, or due to other means).
When the Watchdog is configured with a timeout period equal to this upper boundary, a malfunction in the system will force a full system reset to allow for a graceful recovery.
Window Mode
In many system, there is also lower boundary to the amount of time each iteration of the main application loop can be expected to run. To guard against a system failure resetting the Watchdog in a tight loop (or a failure in the system application causing the main loop to run faster than expected) a "Window" mode can be enabled to disallow resetting of the Watchdog counter before a certain period of time. If the Watchdog is not reset after the window opens but not before the Watchdog expires, the system will reset.
Here is an example code to enable watchdog timer and keep clearing at regular intervals
WDT_Enable(); while ( true ) { // Application Code WDT_Clear(); }
Library Interface
Watchdog Timer peripheral library provides the following interfaces:
Functions
Name | Description |
---|---|
WDT_Enable | Enables the WDT peripheral |
WDT_Disable | Disables the WDT peripheral |
WDT_WindowEnable | Enables the WDT window mode |
WDT_WindowDisable | Disables the WDT window mode |
WDT_Clear | Restarts the WDT counter |