1.30.20 1.31.20 1.33.20 1.37.20 Watchdog Timer (WDT)
The Watchdog timer (WDT) is designed to give an added level of safety in critical systems, to ensure a device reset is triggered in the case of a deadlock or other software malfunction that prevents normal device operation.
When enabled, the WDT is a constantly running timer that is configured to a predefined time-out period. Before the end of the time-out period, the WDT should be set back, or else, a system Reset is issued.
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.
Early Warning
In some cases it is desirable to receive an early warning that the Watchdog is about to expire, so that some system action (such as saving any system configuration data for failure analysis purposes) can be performed before the system reset occurs.
The Early Warning feature of the Watchdog module allows such a notification to be requested; after the configured early warning time (but before the expiry of the Watchdog counter) the Early Warning flag will become set, so that the user application can take an appropriate action.
It is important to note that the purpose of the Early Warning feature is not to allow the user application to reset the Watchdog; doing so will defeat the safety the module gives to the user application. Instead, this feature should be used purely to perform any tasks that need to be undertaken before the system reset occurs.
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_Clear | Restarts the WDT counter |
WDT_ClearWithSync | Restarts the WDT counter with write sync |
WDT_CallbackRegister | Sets the pointer to the function (and it's context) to be called when the Early Warning event occurs |
Data types and constants
Name | Type | Description |
---|---|---|
WDT_CALLBACK | Typedef | Defines the data type and function signature for the WDT peripheral callback function |