mirror of https://github.com/ARMmbed/mbed-os.git
Fix watchdog API issues
- Fix typo in module comment - Redefine the default system behaviour in sleep mode - Guard K64F enableWait flag - Remove bit shifts from reset reason enumpull/10657/head
parent
c258acc222
commit
8a97101988
|
@ -25,15 +25,16 @@ extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
RESET_REASON_POWER_ON = (1 << 0), /**< Set when power is initially applied to the board. The power-on-reset circuit causes a POWER_ON reset when this occurs */
|
RESET_REASON_POWER_ON, /**< Set when power is initially applied to the board. The power-on-reset circuit causes a POWER_ON reset when this occurs */
|
||||||
RESET_REASON_PIN_RESET = (1 << 1), /**< Set when a reset is triggered by the hardware pin on the board */
|
RESET_REASON_PIN_RESET, /**< Set when a reset is triggered by the hardware pin on the board */
|
||||||
RESET_REASON_BROWN_OUT = (1 << 2), /**< Triggered when the voltage drops below the low voltage detect (LVD) threshold the system will be held in a reset until the voltage rises above the threshold */
|
RESET_REASON_BROWN_OUT, /**< Triggered when the voltage drops below the low voltage detect (LVD) threshold the system will be held in a reset until the voltage rises above the threshold */
|
||||||
RESET_REASON_SOFTWARE = (1 << 3), /**< Set during software reset, typically triggered by writing the SYSRESETREQ bit in the Application Interrupt and Reset Control register */
|
RESET_REASON_SOFTWARE, /**< Set during software reset, typically triggered by writing the SYSRESETREQ bit in the Application Interrupt and Reset Control register */
|
||||||
RESET_REASON_WATCHDOG = (1 << 4), /**< Set when a running watchdog timer fails to be refreshed */
|
RESET_REASON_WATCHDOG, /**< Set when a running watchdog timer fails to be refreshed */
|
||||||
RESET_REASON_LOCKUP = (1 << 5), /**< Set when the core is locked because of an unrecoverable exception */
|
RESET_REASON_LOCKUP, /**< Set when the core is locked because of an unrecoverable exception */
|
||||||
RESET_REASON_MULTIPLE = (1 << 6), /**< Set if multiple reset reasons are set within the board. Occurs when the reset reason registers aren't cleared between resets */
|
RESET_REASON_WAKE_LOW_POWER, /**< Set when waking from deep sleep mode */
|
||||||
RESET_REASON_PLATFORM = (1 << 7), /**< Platform specific reset reason not captured in this enum */
|
RESET_REASON_MULTIPLE, /**< Set if multiple reset reasons are set within the board. Occurs when the reset reason registers aren't cleared between resets */
|
||||||
RESET_REASON_UNKNOWN = (1 << 8) /**< Unknown or unreadable reset reason **/
|
RESET_REASON_PLATFORM, /**< Platform specific reset reason not captured in this enum */
|
||||||
|
RESET_REASON_UNKNOWN /**< Unknown or unreadable reset reason **/
|
||||||
} reset_reason_t;
|
} reset_reason_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -48,7 +49,7 @@ typedef enum {
|
||||||
*/
|
*/
|
||||||
reset_reason_t hal_reset_reason_get(void);
|
reset_reason_t hal_reset_reason_get(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clear the reset reason from registers
|
* Clear the reset reason from registers
|
||||||
*
|
*
|
||||||
* Reset the value of the reset status registers, the reset reason will persist
|
* Reset the value of the reset status registers, the reset reason will persist
|
||||||
|
|
|
@ -41,12 +41,11 @@
|
||||||
* to the user specified reset value.
|
* to the user specified reset value.
|
||||||
*
|
*
|
||||||
* The watchdog timer supports a second mode of operation called windowed mode.
|
* The watchdog timer supports a second mode of operation called windowed mode.
|
||||||
* When configured in this mode by setting enable_window to true, the timer
|
* When configured in this mode by setting enable_window to true, the watchdog
|
||||||
* watchdog will enable a restriction on the kick. If the watchdog timer too
|
* will enable a restriction on the kick. If the watchdog timer is kicked too
|
||||||
* soon after it has last been refreshed a system reset occurs. The earliest
|
* soon after it has last been refreshed a system reset occurs. The earliest
|
||||||
* time in milliseconds the timer can be kicked without triggering a reset is
|
* time in milliseconds the timer can be kicked without triggering a reset is
|
||||||
* specified by window_ms.
|
* specified by window_ms.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
|
@ -74,10 +73,9 @@ typedef struct
|
||||||
*/
|
*/
|
||||||
uint32_t window_ms;
|
uint32_t window_ms;
|
||||||
/**
|
/**
|
||||||
* Configures the watchdog timer to run while the core is in sleep mode. By
|
* Configures the watchdog behaviour while the system is in sleep mode. When
|
||||||
* default when the system is put into the sleep the watchdog timer is paused.
|
* this flag is enabled the watchdog timer runs normally while the system is
|
||||||
* Enabling this setting causes the timer to countdown during this time. This
|
* in sleep mode, when disabled the watchdog is paused during this time.
|
||||||
* flag is disabled by default.
|
|
||||||
*/
|
*/
|
||||||
bool enable_sleep;
|
bool enable_sleep;
|
||||||
} watchdog_config_t;
|
} watchdog_config_t;
|
||||||
|
|
|
@ -7,6 +7,15 @@ reset_reason_t hal_reset_reason_get(void)
|
||||||
const uint32_t reset_sources =
|
const uint32_t reset_sources =
|
||||||
RCM_GetPreviousResetSources(RCM) & kRCM_SourceAll;
|
RCM_GetPreviousResetSources(RCM) & kRCM_SourceAll;
|
||||||
|
|
||||||
|
// Low power mode is exited via the RESET pin. Therefore, when this reset is
|
||||||
|
// triggered both the PIN and WAKEUP will have bits set, so check this flag
|
||||||
|
// first.
|
||||||
|
#if (defined(FSL_FEATURE_RCM_HAS_WAKEUP) && FSL_FEATURE_RCM_HAS_WAKEUP)
|
||||||
|
if ((reset_sources & kRCM_SourceWakeup) != 0) {
|
||||||
|
return RESET_REASON_PLATFORM;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// Check POR flag first. During a POR reset there will be two reset sources
|
// Check POR flag first. During a POR reset there will be two reset sources
|
||||||
// set: POR and LVD. As during the power on phase the low voltage detector
|
// set: POR and LVD. As during the power on phase the low voltage detector
|
||||||
// circuit will detect a low voltage while the voltage is initially ramping
|
// circuit will detect a low voltage while the voltage is initially ramping
|
||||||
|
@ -44,12 +53,6 @@ reset_reason_t hal_reset_reason_get(void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (defined(FSL_FEATURE_RCM_HAS_WAKEUP) && FSL_FEATURE_RCM_HAS_WAKEUP)
|
|
||||||
if ((reset_sources & kRCM_SourceWakeup) != 0) {
|
|
||||||
return RESET_REASON_PLATFORM;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (defined(FSL_FEATURE_RCM_HAS_JTAG) && FSL_FEATURE_RCM_HAS_JTAG)
|
#if (defined(FSL_FEATURE_RCM_HAS_JTAG) && FSL_FEATURE_RCM_HAS_JTAG)
|
||||||
if ((reset_sources & kRCM_SourceJtag) != 0) {
|
if ((reset_sources & kRCM_SourceJtag) != 0) {
|
||||||
return RESET_REASON_PLATFORM;
|
return RESET_REASON_PLATFORM;
|
||||||
|
|
|
@ -71,8 +71,10 @@ watchdog_status_t hal_watchdog_init(const watchdog_config_t *config)
|
||||||
cfg.enableUpdate = true;
|
cfg.enableUpdate = true;
|
||||||
cfg.enableInterrupt = false;
|
cfg.enableInterrupt = false;
|
||||||
cfg.enableWindowMode = config->enable_window;
|
cfg.enableWindowMode = config->enable_window;
|
||||||
|
#if PLATFORM_SUPPORTS_SLEEP
|
||||||
cfg.workMode.enableWait = config->enable_sleep;
|
cfg.workMode.enableWait = config->enable_sleep;
|
||||||
cfg.workMode.enableStop = true;
|
#endif
|
||||||
|
cfg.workMode.enableStop = false;
|
||||||
cfg.workMode.enableDebug = false;
|
cfg.workMode.enableDebug = false;
|
||||||
|
|
||||||
const uint32_t prescaler = calculate_prescaler_value(config->timeout_ms);
|
const uint32_t prescaler = calculate_prescaler_value(config->timeout_ms);
|
||||||
|
|
Loading…
Reference in New Issue