The sleep manager provides API to automatically select sleep mode. More...
Modules | |
Sleep manager API tests | |
Tests to validate the proper implementation of the sleep manager. | |
Functions | |
void | sleep_manager_lock_deep_sleep_internal (void) |
Lock the deep sleep mode. More... | |
void | sleep_manager_unlock_deep_sleep_internal (void) |
Unlock the deep sleep mode. More... | |
bool | sleep_manager_can_deep_sleep (void) |
Get the status of deep sleep allowance for a target. More... | |
bool | sleep_manager_can_deep_sleep_test_check (void) |
Check if the target can deep sleep within a period of time. More... | |
void | sleep_manager_sleep_auto (void) |
Enter auto selected sleep mode. More... | |
static void | sleep (void) |
Send the microcontroller to sleep. More... | |
static void | deepsleep (void) |
Send the microcontroller to deep sleep. More... | |
us_timestamp_t | mbed_time_sleep (void) |
Provides the time spent in sleep mode since boot. More... | |
us_timestamp_t | mbed_time_deepsleep (void) |
Provides the time spent in deep sleep mode since boot. More... | |
us_timestamp_t | mbed_time_idle (void) |
Provides the time spent in idle mode since boot. More... | |
us_timestamp_t | mbed_uptime (void) |
Provides the time since the system is up i.e. More... | |
The sleep manager provides API to automatically select sleep mode.
There are two sleep modes:
Use locking/unlocking deepsleep for drivers that depend on features that are not allowed (=disabled) during the deepsleep. For instance, high frequency clocks.
Example:
|
static |
Send the microcontroller to deep sleep.
This processor is setup ready for deep sleep, and sent to sleep. This mode has the same sleep features as sleep plus it powers down peripherals and clocks. All state is still maintained.
The processor can only be woken up by an external interrupt on a pin or a watchdog timer.
Definition at line 224 of file mbed_power_mgmt.h.
us_timestamp_t mbed_time_deepsleep | ( | void | ) |
Provides the time spent in deep sleep mode since boot.
us_timestamp_t mbed_time_idle | ( | void | ) |
Provides the time spent in idle mode since boot.
us_timestamp_t mbed_time_sleep | ( | void | ) |
Provides the time spent in sleep mode since boot.
us_timestamp_t mbed_uptime | ( | void | ) |
Provides the time since the system is up i.e.
boot.
|
static |
Send the microcontroller to sleep.
The processor is setup ready for sleep, and sent to sleep using __WFI(). In this mode, the system clock to the core is stopped until a reset or an interrupt occurs. This eliminates dynamic power used by the processor, memory systems and buses. The processor, peripheral and memory state are maintained, and the peripherals continue to work and can generate interrupts.
The processor can be woken up by any internal peripheral interrupt or external pin interrupt.
Definition at line 194 of file mbed_power_mgmt.h.
bool sleep_manager_can_deep_sleep | ( | void | ) |
Get the status of deep sleep allowance for a target.
bool sleep_manager_can_deep_sleep_test_check | ( | void | ) |
Check if the target can deep sleep within a period of time.
This function in intended for use in testing. The amount of time this functions waits for deeps sleep to be available is currently 2ms. This may change in the future depending on testing requirements.
void sleep_manager_lock_deep_sleep_internal | ( | void | ) |
Lock the deep sleep mode.
This locks the automatic deep mode selection. sleep_manager_sleep_auto() will ignore deepsleep mode if this function is invoked at least once (the internal counter is non-zero)
Use this locking mechanism for interrupt driven API that are running in the background and deepsleep could affect their functionality
The lock is a counter, can be locked up to USHRT_MAX This function is IRQ and thread safe
void sleep_manager_sleep_auto | ( | void | ) |
Enter auto selected sleep mode.
It chooses the sleep or deepsleep modes based on the deepsleep locking counter
This function is IRQ and thread safe
void sleep_manager_unlock_deep_sleep_internal | ( | void | ) |
Unlock the deep sleep mode.
Use unlocking in pair with sleep_manager_lock_deep_sleep().
The lock is a counter, should be equally unlocked as locked This function is IRQ and thread safe