WDOG - Watchdog

Description

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.

Data Structures

struct  WDOG_Init_TypeDef
 Watchdog initialization structure.
 

Functions

void WDOGn_Enable (WDOG_TypeDef *wdog, bool enable)
 Enable/disable the watchdog timer.
 
void WDOGn_Feed (WDOG_TypeDef *wdog)
 Feed WDOG.
 
void WDOGn_Init (WDOG_TypeDef *wdog, const WDOG_Init_TypeDef *init)
 Initialize WDOG (assuming the WDOG configuration has not been locked).
 
void WDOGn_Lock (WDOG_TypeDef *wdog)
 Lock the WDOG configuration.
 
void WDOGn_SyncWait (WDOG_TypeDef *wdog)
 Wait for the WDOG to complete all synchronization of register changes and commands.
 
void WDOGn_Unlock (WDOG_TypeDef *wdog)
 Unlock the WDOG configuration.
 
void WDOGn_IntClear (WDOG_TypeDef *wdog, uint32_t flags)
 Clear one or more pending WDOG interrupts.
 
void WDOGn_IntDisable (WDOG_TypeDef *wdog, uint32_t flags)
 Disable one or more WDOG interrupts.
 
void WDOGn_IntEnable (WDOG_TypeDef *wdog, uint32_t flags)
 Enable one or more WDOG interrupts.
 
uint32_t WDOGn_IntGet (WDOG_TypeDef *wdog)
 Get pending WDOG interrupt flags.
 
uint32_t WDOGn_IntGetEnabled (WDOG_TypeDef *wdog)
 Get enabled and pending WDOG interrupt flags.
 
void WDOGn_IntSet (WDOG_TypeDef *wdog, uint32_t flags)
 Set one or more pending WDOG interrupts from SW.
 
bool WDOGn_IsEnabled (WDOG_TypeDef *wdog)
 Get enabled status of the watchdog.
 
bool WDOGn_IsLocked (WDOG_TypeDef *wdog)
 Get locked status of the watchdog.
 
void WDOG_Enable (bool enable)
 Enable/disable the watchdog timer.
 
void WDOG_Feed (void)
 Feed the watchdog.
 
void WDOG_Init (const WDOG_Init_TypeDef *init)
 Initialize watchdog (assuming the watchdog configuration has not been locked).
 
void WDOG_Lock (void)
 Lock the watchdog configuration.
 
bool WDOG_IsEnabled (void)
 Get enabled status of the watchdog.
 
bool WDOG_IsLocked (void)
 Get locked status of the watchdog.
 

Macros

#define WDOG_SYNC_TIMEOUT   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.
 
#define DEFAULT_WDOG   WDOG0
 Default WDOG instance for deprecated functions.
 
#define WDOG_INIT_DEFAULT
 Suggested default configuration for WDOG initialization structure.
 

Enumerations

enum  WDOG_ClkSel_TypeDef {
  wdogClkSelULFRCO = _WDOG_CTRL_CLKSEL_ULFRCO,
  wdogClkSelLFRCO = _WDOG_CTRL_CLKSEL_LFRCO,
  wdogClkSelLFXO = _WDOG_CTRL_CLKSEL_LFXO
}
 Watchdog clock selection.
 
enum  WDOG_PeriodSel_TypeDef {
  wdogPeriod_9 = 0x0,
  wdogPeriod_17 = 0x1,
  wdogPeriod_33 = 0x2,
  wdogPeriod_65 = 0x3,
  wdogPeriod_129 = 0x4,
  wdogPeriod_257 = 0x5,
  wdogPeriod_513 = 0x6,
  wdogPeriod_1k = 0x7,
  wdogPeriod_2k = 0x8,
  wdogPeriod_4k = 0x9,
  wdogPeriod_8k = 0xA,
  wdogPeriod_16k = 0xB,
  wdogPeriod_32k = 0xC,
  wdogPeriod_64k = 0xD,
  wdogPeriod_128k = 0xE,
  wdogPeriod_256k = 0xF
}
 Watchdog period selection.
 
enum  WDOG_WarnSel_TypeDef {
  wdogWarnDisable = 0,
  wdogWarnTime25pct = 1,
  wdogWarnTime50pct = 2,
  wdogWarnTime75pct = 3
}
 Select watchdog warning timeout period as percentage of timeout.
 
enum  WDOG_WinSel_TypeDef {
  wdogIllegalWindowDisable = 0,
  wdogIllegalWindowTime12_5pct = 1,
  wdogIllegalWindowTime25_0pct = 2,
  wdogIllegalWindowTime37_5pct = 3,
  wdogIllegalWindowTime50_0pct = 4,
  wdogIllegalWindowTime62_5pct = 5,
  wdogIllegalWindowTime75_0pct = 6,
  wdogIllegalWindowTime87_5pct = 7
}
 Select watchdog illegal window limit.
 

Function Documentation

◆ WDOGn_Enable()

void WDOGn_Enable ( WDOG_TypeDef *  wdog,
bool  enable 
)

Enable/disable the watchdog timer.

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.
Parameters
[in]wdogA pointer to the WDOG peripheral register block.
[in]enableTrue to enable Watchdog, false to disable. Watchdog cannot be disabled if it's been locked.

◆ WDOGn_Feed()

void WDOGn_Feed ( WDOG_TypeDef *  wdog)

Feed WDOG.

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.

Parameters
[in]wdogA pointer to the WDOG peripheral register block.

◆ WDOGn_Init()

void WDOGn_Init ( WDOG_TypeDef *  wdog,
const WDOG_Init_TypeDef init 
)

Initialize WDOG (assuming the WDOG configuration has not 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.
Parameters
[in]wdogPointer to the WDOG peripheral register block.
[in]initThe structure holding the WDOG configuration. A default setting WDOG_INIT_DEFAULT is available for initialization.

◆ WDOGn_Lock()

void WDOGn_Lock ( WDOG_TypeDef *  wdog)

Lock the WDOG configuration.

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.
Parameters
[in]wdogA pointer to WDOG peripheral register block.

◆ WDOGn_SyncWait()

void WDOGn_SyncWait ( WDOG_TypeDef *  wdog)

Wait for the WDOG to complete all synchronization of register changes and commands.

Parameters
[in]wdogA pointer to WDOG peripheral register block.

◆ WDOGn_Unlock()

void WDOGn_Unlock ( WDOG_TypeDef *  wdog)

Unlock the WDOG configuration.

Note that this function will have no effect on devices where a reset is the only way to unlock the watchdog.

Parameters
[in]wdogA pointer to WDOG peripheral register block.

◆ WDOGn_IntClear()

void WDOGn_IntClear ( WDOG_TypeDef *  wdog,
uint32_t  flags 
)
inline

Clear one or more pending WDOG interrupts.

Parameters
[in]wdogPointer to WDOG peripheral register block.
[in]flagsWDOG interrupt sources to clear. Use a set of interrupt flags OR-ed together to clear multiple interrupt sources.

◆ WDOGn_IntDisable()

void WDOGn_IntDisable ( WDOG_TypeDef *  wdog,
uint32_t  flags 
)
inline

Disable one or more WDOG interrupts.

Parameters
[in]wdogPointer to WDOG peripheral register block.
[in]flagsWDOG interrupt sources to disable. Use a set of interrupt flags OR-ed together to disable multiple interrupt.

◆ WDOGn_IntEnable()

void WDOGn_IntEnable ( WDOG_TypeDef *  wdog,
uint32_t  flags 
)
inline

Enable one or more WDOG interrupts.

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.
Parameters
[in]wdogPointer to WDOG peripheral register block.
[in]flagsWDOG interrupt sources to enable. Use a set of interrupt flags OR-ed together to set multiple interrupt.

◆ WDOGn_IntGet()

uint32_t WDOGn_IntGet ( WDOG_TypeDef *  wdog)
inline

Get pending WDOG interrupt flags.

Note
The event bits are not cleared by the use of this function.
Parameters
[in]wdogPointer to WDOG peripheral register block.
Returns
Pending WDOG interrupt sources. Returns a set of interrupt flags OR-ed together for the interrupt sources set.

◆ WDOGn_IntGetEnabled()

uint32_t WDOGn_IntGetEnabled ( WDOG_TypeDef *  wdog)
inline

Get enabled and pending WDOG interrupt flags.

Useful for handling more interrupt sources in the same interrupt handler.

Parameters
[in]wdogPointer to WDOG peripheral register block.
Returns
Pending and enabled WDOG interrupt sources. Returns a set of interrupt flags OR-ed together for the interrupt sources set.

◆ WDOGn_IntSet()

void WDOGn_IntSet ( WDOG_TypeDef *  wdog,
uint32_t  flags 
)
inline

Set one or more pending WDOG interrupts from SW.

Parameters
[in]wdogPointer to WDOG peripheral register block.
[in]flagsWDOG interrupt sources to set to pending. Use a set of interrupt flags (WDOG_IFS_nnn).

◆ WDOGn_IsEnabled()

bool WDOGn_IsEnabled ( WDOG_TypeDef *  wdog)
inline

Get enabled status of the watchdog.

Parameters
[in]wdogPointer to WDOG peripheral register block.
Returns
True if watchdog is enabled.

◆ WDOGn_IsLocked()

bool WDOGn_IsLocked ( WDOG_TypeDef *  wdog)
inline

Get locked status of the watchdog.

Parameters
[in]wdogPointer to WDOG peripheral register block.
Returns
True if watchdog is locked.

◆ WDOG_Enable()

void WDOG_Enable ( bool  enable)
inline

Enable/disable the watchdog timer.

Parameters
[in]enableSet to true to enable watchdog, false to disable. Watchdog cannot be disabled if watchdog has been locked.

◆ WDOG_Feed()

void WDOG_Feed ( void  )
inline

Feed the watchdog.

◆ WDOG_Init()

void WDOG_Init ( const WDOG_Init_TypeDef init)
inline

Initialize watchdog (assuming the watchdog configuration has not been locked).

Parameters
[in]initStructure holding watchdog configuration. A default setting WDOG_INIT_DEFAULT is available for initialization.

◆ WDOG_Lock()

void WDOG_Lock ( void  )
inline

Lock the watchdog configuration.

◆ WDOG_IsEnabled()

bool WDOG_IsEnabled ( void  )
inline

Get enabled status of the watchdog.

Returns
True if watchdog is enabled.

◆ WDOG_IsLocked()

bool WDOG_IsLocked ( void  )
inline

Get locked status of the watchdog.

Returns
True if watchdog is locked.

Macro Definition Documentation

◆ WDOG_SYNC_TIMEOUT

#define WDOG_SYNC_TIMEOUT   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.

◆ DEFAULT_WDOG

#define DEFAULT_WDOG   WDOG0

Default WDOG instance for deprecated functions.

◆ WDOG_INIT_DEFAULT

#define WDOG_INIT_DEFAULT
Value:
{ \
true, /* Start watchdog when initialization is done. */ \
false, /* WDOG is not counting during debug halt. */ \
false, /* WDOG is not counting when in EM2. */ \
false, /* WDOG is not counting when in EM3. */ \
false, /* EM4 can be entered. */ \
false, /* Do not block disabling LFRCO/LFXO in CMU. */ \
false, /* Do not lock WDOG configuration. */ \
wdogClkSelLFRCO, /* Select 32.768 kHZ WDOG oscillator. */ \
wdogPeriod_256k, /* Set longest possible timeout period. */ \
wdogWarnDisable, /* Disable warning interrupt. */ \
wdogIllegalWindowDisable, /* Disable illegal window interrupt. */ \
false /* Do not disable reset. */ \
}

Suggested default configuration for WDOG initialization structure.

Enumeration Type Documentation

◆ WDOG_ClkSel_TypeDef

Watchdog clock selection.

Enumerator
wdogClkSelULFRCO 

Ultra low frequency (1 kHz) clock.

wdogClkSelLFRCO 

Low frequency RC oscillator.

wdogClkSelLFXO 

Low frequency crystal oscillator.

◆ WDOG_PeriodSel_TypeDef

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

◆ 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.

◆ 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.