Skip to content

Commit

Permalink
STM: Fix us_ticker timestamp after deep sleep
Browse files Browse the repository at this point in the history
Use the `mbed_sdk_inited` flag to correct the `HAL_GetTick()` behavior
after waking up from deep sleep mode. `ticker_read_us()` must not be
used to read us_ticker timestamp after waking up until the us_ticker
context is restored. More detailed description in issue #8117.

Fixes #8117
  • Loading branch information
fkjagodzinski committed Sep 14, 2018
1 parent 2e5e23f commit 6821556
Showing 1 changed file with 9 additions and 0 deletions.
9 changes: 9 additions & 0 deletions targets/TARGET_STM/sleep.c
Expand Up @@ -158,6 +158,7 @@ void hal_sleep(void)
}

extern int serial_is_tx_ongoing(void);
extern int mbed_sdk_inited;

void hal_deepsleep(void)
{
Expand Down Expand Up @@ -200,6 +201,10 @@ void hal_deepsleep(void)
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
#endif /* TARGET_STM32L4 */

/* Prevent HAL_GetTick() from using ticker_read_us() to read the
* us_ticker timestamp until the us_ticker context is restored. */
mbed_sdk_inited = 0;

// Verify Clock Out of Deep Sleep
ForceClockOutofDeepSleep();

Expand All @@ -214,6 +219,10 @@ void hal_deepsleep(void)

restore_timer_ctx();

/* us_ticker context restored, allow HAL_GetTick() to read the us_ticker
* timestamp via ticker_read_us() again. */
mbed_sdk_inited = 1;

// Enable IRQs
core_util_critical_section_exit();
}
Expand Down

0 comments on commit 6821556

Please sign in to comment.