Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: STM32L452_Nucleo_ticker
Fork of mbed-dev by
Diff: drivers/Timer.cpp
- Revision:
- 175:af195413fb11
- Parent:
- 174:b96e65c34a4d
--- a/drivers/Timer.cpp Mon Oct 02 15:33:19 2017 +0100 +++ b/drivers/Timer.cpp Wed Oct 11 12:45:49 2017 +0100 @@ -17,21 +17,38 @@ #include "hal/ticker_api.h" #include "hal/us_ticker_api.h" #include "platform/mbed_critical.h" +#include "hal/lp_ticker_api.h" namespace mbed { -Timer::Timer() : _running(), _start(), _time(), _ticker_data(get_us_ticker_data()) { +Timer::Timer() : _running(), _start(), _time(), _ticker_data(get_us_ticker_data()), _lock_deepsleep(true) { reset(); } -Timer::Timer(const ticker_data_t *data) : _running(), _start(), _time(), _ticker_data(data) { +Timer::Timer(const ticker_data_t *data) : _running(), _start(), _time(), _ticker_data(data), _lock_deepsleep(true) { reset(); +#if DEVICE_LOWPOWERTIMER + _lock_deepsleep = (data != get_lp_ticker_data()); +#endif +} + +Timer::~Timer() { + core_util_critical_section_enter(); + if (_running) { + if(_lock_deepsleep) { + sleep_manager_unlock_deep_sleep(); + } + } + _running = 0; + core_util_critical_section_exit(); } void Timer::start() { core_util_critical_section_enter(); if (!_running) { - sleep_manager_lock_deep_sleep(); + if(_lock_deepsleep) { + sleep_manager_lock_deep_sleep(); + } _start = ticker_read_us(_ticker_data); _running = 1; } @@ -42,7 +59,9 @@ core_util_critical_section_enter(); _time += slicetime(); if (_running) { - sleep_manager_unlock_deep_sleep(); + if(_lock_deepsleep) { + sleep_manager_unlock_deep_sleep(); + } } _running = 0; core_util_critical_section_exit();