WDOG - Watchdog#
Watchdog (WDOG) Peripheral API.
This module contains functions to control the WDOG peripheral of Silicon Labs 32-bit MCUs and SoCs. The WDOG resets the system in case of a fault condition.
Modules#
Enumerations#
Watchdog clock selection.
Select Watchdog warning timeout period as percentage of timeout.
Select Watchdog illegal window limit.
Functions#
Enable/disable the watchdog timer.
Feed WDOG.
Initialize WDOG (assuming the WDOG configuration has not been locked).
Lock the WDOG configuration.
Wait for the WDOG to complete all synchronization of register changes and commands.
Unlock the WDOG configuration.
Clear one or more pending WDOG interrupts.
Disable one or more WDOG interrupts.
Enable one or more WDOG interrupts.
Get pending WDOG interrupt flags.
Get enabled and pending WDOG interrupt flags.
Set one or more pending WDOG interrupts from SW.
Get enabled status of the Watchdog.
Get locked status of the Watchdog.
Macros#
In some scenarioes when the watchdog is disabled the synchronization register might be set and not be cleared until the watchdog is enabled again.
Default WDOG instance for deprecated functions.
Suggested default configuration for WDOG initialization structure.
Enumeration Documentation#
WDOG_PeriodSel_TypeDef#
WDOG_PeriodSel_TypeDef
Watchdog clock selection.
Watchdog period selection.
Enumerator | |
---|---|
wdogPeriod_9 | 9 clock periods |
wdogPeriod_17 | 17 clock periods |
wdogPeriod_33 | 33 clock periods |
wdogPeriod_65 | 65 clock periods |
wdogPeriod_129 | 129 clock periods |
wdogPeriod_257 | 257 clock periods |
wdogPeriod_513 | 513 clock periods |
wdogPeriod_1k | 1025 clock periods |
wdogPeriod_2k | 2049 clock periods |
wdogPeriod_4k | 4097 clock periods |
wdogPeriod_8k | 8193 clock periods |
wdogPeriod_16k | 16385 clock periods |
wdogPeriod_32k | 32769 clock periods |
wdogPeriod_64k | 65537 clock periods |
wdogPeriod_128k | 131073 clock periods |
wdogPeriod_256k | 262145 clock periods |
76
of file platform/emlib/inc/em_wdog.h
WDOG_WarnSel_TypeDef#
WDOG_WarnSel_TypeDef
Select Watchdog warning timeout period as percentage of timeout.
Enumerator | |
---|---|
wdogWarnDisable | Watchdog warning period is disabled. |
wdogWarnTime25pct | Watchdog warning period is 25% of the timeout. |
wdogWarnTime50pct | Watchdog warning period is 50% of the timeout. |
wdogWarnTime75pct | Watchdog warning period is 75% of the timeout. |
98
of file platform/emlib/inc/em_wdog.h
WDOG_WinSel_TypeDef#
WDOG_WinSel_TypeDef
Select Watchdog illegal window limit.
Enumerator | |
---|---|
wdogIllegalWindowDisable | Watchdog illegal window disabled. |
wdogIllegalWindowTime12_5pct | Window timeout is 12.5% of the timeout. |
wdogIllegalWindowTime25_0pct | Window timeout is 25% of the timeout. |
wdogIllegalWindowTime37_5pct | Window timeout is 37.5% of the timeout. |
wdogIllegalWindowTime50_0pct | Window timeout is 50% of the timeout. |
wdogIllegalWindowTime62_5pct | Window timeout is 62.5% of the timeout. |
wdogIllegalWindowTime75_0pct | Window timeout is 75% of the timeout. |
wdogIllegalWindowTime87_5pct | Window timeout is 87.5% of the timeout. |
109
of file platform/emlib/inc/em_wdog.h
Function Documentation#
WDOGn_Enable#
void WDOGn_Enable (WDOG_TypeDef * wdog, bool enable)
Enable/disable the watchdog timer.
[in] | wdog | A pointer to the WDOG peripheral register block. |
[in] | enable | True to enable Watchdog, false to disable. Watchdog cannot be disabled if it's been locked. |
Note
This function modifies the WDOG CTRL register which requires synchronization into the low-frequency domain. If this register is modified before a previous update to the same register has completed, this function will stall until the previous synchronization has completed.
75
of file platform/emlib/src/em_wdog.c
WDOGn_Feed#
void WDOGn_Feed (WDOG_TypeDef * wdog)
Feed WDOG.
[in] | wdog | A pointer to the WDOG peripheral register block. |
When WDOG is activated, it must be fed (i.e., clearing the counter) before it reaches the defined timeout period. Otherwise, WDOG will generate a reset.
Note
Note that WDOG is an asynchronous peripheral and when calling the WDOGn_Feed() function the hardware starts the process of clearing the counter. This process takes some time before it completes depending on the selected oscillator (up to 4 peripheral clock cycles). When using the ULFRCO for instance as the oscillator the watchdog runs on a 1 kHz clock and a watchdog clear operation might take up to 4 ms.
If the device enters EM2 or EM3 while a command is in progress then that command will be aborted. An application can use WDOGn_SyncWait() to wait for a command to complete.
141
of file platform/emlib/src/em_wdog.c
WDOGn_Init#
void WDOGn_Init (WDOG_TypeDef * wdog, const WDOG_Init_TypeDef * init)
Initialize WDOG (assuming the WDOG configuration has not been locked).
[in] | wdog | Pointer to the WDOG peripheral register block. |
[in] | init | The structure holding the WDOG configuration. A default setting WDOG_INIT_DEFAULT is available for initialization. |
Note
This function modifies the WDOG CTRL register which requires synchronization into the low-frequency domain. If this register is modified before a previous update to the same register has completed, this function will stall until the previous synchronization has completed.
203
of file platform/emlib/src/em_wdog.c
WDOGn_Lock#
void WDOGn_Lock (WDOG_TypeDef * wdog)
Lock the WDOG configuration.
[in] | wdog | A pointer to WDOG peripheral register block. |
This prevents errors from overwriting the WDOG configuration, possibly disabling it. Only a reset can unlock the WDOG configuration once locked.
If the LFRCO or LFXO clocks are used to clock WDOG, consider using the option of inhibiting those clocks to be disabled. See the WDOG_Enable() initialization structure.
Note
This function modifies the WDOG CTRL register which requires synchronization into the low-frequency domain. If this register is modified before a previous update to the same register has completed, this function will stall until the previous synchronization has completed.
298
of file platform/emlib/src/em_wdog.c
WDOGn_SyncWait#
void WDOGn_SyncWait (WDOG_TypeDef * wdog)
Wait for the WDOG to complete all synchronization of register changes and commands.
[in] | wdog | A pointer to WDOG peripheral register block. |
321
of file platform/emlib/src/em_wdog.c
WDOGn_Unlock#
void WDOGn_Unlock (WDOG_TypeDef * wdog)
Unlock the WDOG configuration.
[in] | wdog | A pointer to WDOG peripheral register block. |
Note that this function will have no effect on devices where a reset is the only way to unlock the watchdog.
345
of file platform/emlib/src/em_wdog.c
WDOGn_IntClear#
void WDOGn_IntClear (WDOG_TypeDef * wdog, uint32_t flags)
Clear one or more pending WDOG interrupts.
[in] | wdog | Pointer to the WDOG peripheral register block. |
[in] | flags | WDOG interrupt sources to clear. Use a set of interrupt flags OR-ed together to clear multiple interrupt sources. |
292
of file platform/emlib/inc/em_wdog.h
WDOGn_IntDisable#
void WDOGn_IntDisable (WDOG_TypeDef * wdog, uint32_t flags)
Disable one or more WDOG interrupts.
[in] | wdog | Pointer to the WDOG peripheral register block. |
[in] | flags | WDOG interrupt sources to disable. Use a set of interrupt flags OR-ed together to disable multiple interrupt. |
312
of file platform/emlib/inc/em_wdog.h
WDOGn_IntEnable#
void WDOGn_IntEnable (WDOG_TypeDef * wdog, uint32_t flags)
Enable one or more WDOG interrupts.
[in] | wdog | Pointer to the WDOG peripheral register block. |
[in] | flags | WDOG interrupt sources to enable. Use a set of interrupt flags OR-ed together to set multiple interrupt. |
Note
Depending on the use, a pending interrupt may already be set prior to enabling the interrupt. To ignore a pending interrupt, consider using WDOG_IntClear() prior to enabling the interrupt.
337
of file platform/emlib/inc/em_wdog.h
WDOGn_IntGet#
uint32_t WDOGn_IntGet (WDOG_TypeDef * wdog)
Get pending WDOG interrupt flags.
[in] | wdog | Pointer to the WDOG peripheral register block. |
Note
The event bits are not cleared by the use of this function.
Returns
Pending WDOG interrupt sources. Returns a set of interrupt flags OR-ed together for the interrupt sources set.
360
of file platform/emlib/inc/em_wdog.h
WDOGn_IntGetEnabled#
uint32_t WDOGn_IntGetEnabled (WDOG_TypeDef * wdog)
Get enabled and pending WDOG interrupt flags.
[in] | wdog | Pointer to the WDOG peripheral register block. |
Useful for handling more interrupt sources in the same interrupt handler.
Returns
Pending and enabled WDOG interrupt sources. Returns a set of interrupt flags OR-ed together for the interrupt sources set.
379
of file platform/emlib/inc/em_wdog.h
WDOGn_IntSet#
void WDOGn_IntSet (WDOG_TypeDef * wdog, uint32_t flags)
Set one or more pending WDOG interrupts from SW.
[in] | wdog | Pointer to the WDOG peripheral register block. |
[in] | flags | WDOG interrupt sources to set to pending. Use a set of interrupt flags (WDOG_IFS_nnn). |
400
of file platform/emlib/inc/em_wdog.h
WDOGn_IsEnabled#
bool WDOGn_IsEnabled (WDOG_TypeDef * wdog)
Get enabled status of the Watchdog.
[in] | wdog | Pointer to the WDOG peripheral register block. |
Returns
True if Watchdog is enabled.
420
of file platform/emlib/inc/em_wdog.h
WDOGn_IsLocked#
bool WDOGn_IsLocked (WDOG_TypeDef * wdog)
Get locked status of the Watchdog.
[in] | wdog | Pointer to the WDOG peripheral register block. |
Returns
True if Watchdog is locked.
439
of file platform/emlib/inc/em_wdog.h
Macro Definition Documentation#
WDOG_SYNC_TIMEOUT#
#define WDOG_SYNC_TIMEOUTValue:
30000
In some scenarioes when the watchdog is disabled the synchronization register might be set and not be cleared until the watchdog is enabled again.
This will happen when for instance some watchdog register is modified while the watchdog clock is disabled. In these scenarioes we need to make sure that the software does not wait forever.
52
of file platform/emlib/src/em_wdog.c
DEFAULT_WDOG#
#define DEFAULT_WDOGValue:
WDOG0
Default WDOG instance for deprecated functions.
56
of file platform/emlib/inc/em_wdog.h
WDOG_INIT_DEFAULT#
#define WDOG_INIT_DEFAULTValue:
Suggested default configuration for WDOG initialization structure.
219
of file platform/emlib/inc/em_wdog.h