Color Oled(SSD1331) connect to STMicroelectronics Nucleo-F466

Dependencies:   ssd1331

Committer:
kadonotakashi
Date:
Wed Oct 10 00:33:53 2018 +0000
Revision:
0:8fdf9a60065b
how to make mbed librry

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kadonotakashi 0:8fdf9a60065b 1 /** \addtogroup platform */
kadonotakashi 0:8fdf9a60065b 2 /** @{*/
kadonotakashi 0:8fdf9a60065b 3 /**
kadonotakashi 0:8fdf9a60065b 4 * \defgroup platform_power_mgmt Power management functions
kadonotakashi 0:8fdf9a60065b 5 * @{
kadonotakashi 0:8fdf9a60065b 6 */
kadonotakashi 0:8fdf9a60065b 7
kadonotakashi 0:8fdf9a60065b 8 /* mbed Microcontroller Library
kadonotakashi 0:8fdf9a60065b 9 * Copyright (c) 2006-2018 ARM Limited
kadonotakashi 0:8fdf9a60065b 10 *
kadonotakashi 0:8fdf9a60065b 11 * Licensed under the Apache License, Version 2.0 (the "License");
kadonotakashi 0:8fdf9a60065b 12 * you may not use this file except in compliance with the License.
kadonotakashi 0:8fdf9a60065b 13 * You may obtain a copy of the License at
kadonotakashi 0:8fdf9a60065b 14 *
kadonotakashi 0:8fdf9a60065b 15 * http://www.apache.org/licenses/LICENSE-2.0
kadonotakashi 0:8fdf9a60065b 16 *
kadonotakashi 0:8fdf9a60065b 17 * Unless required by applicable law or agreed to in writing, software
kadonotakashi 0:8fdf9a60065b 18 * distributed under the License is distributed on an "AS IS" BASIS,
kadonotakashi 0:8fdf9a60065b 19 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
kadonotakashi 0:8fdf9a60065b 20 * See the License for the specific language governing permissions and
kadonotakashi 0:8fdf9a60065b 21 * limitations under the License.
kadonotakashi 0:8fdf9a60065b 22 */
kadonotakashi 0:8fdf9a60065b 23 #ifndef MBED_POWER_MGMT_H
kadonotakashi 0:8fdf9a60065b 24 #define MBED_POWER_MGMT_H
kadonotakashi 0:8fdf9a60065b 25
kadonotakashi 0:8fdf9a60065b 26 #include "hal/sleep_api.h"
kadonotakashi 0:8fdf9a60065b 27 #include "mbed_toolchain.h"
kadonotakashi 0:8fdf9a60065b 28 #include "hal/ticker_api.h"
kadonotakashi 0:8fdf9a60065b 29 #include <stdbool.h>
kadonotakashi 0:8fdf9a60065b 30
kadonotakashi 0:8fdf9a60065b 31 #ifdef __cplusplus
kadonotakashi 0:8fdf9a60065b 32 extern "C" {
kadonotakashi 0:8fdf9a60065b 33 #endif
kadonotakashi 0:8fdf9a60065b 34
kadonotakashi 0:8fdf9a60065b 35 /** Sleep manager API
kadonotakashi 0:8fdf9a60065b 36 * The sleep manager provides API to automatically select sleep mode.
kadonotakashi 0:8fdf9a60065b 37 *
kadonotakashi 0:8fdf9a60065b 38 * There are two sleep modes:
kadonotakashi 0:8fdf9a60065b 39 * - sleep
kadonotakashi 0:8fdf9a60065b 40 * - deepsleep
kadonotakashi 0:8fdf9a60065b 41 *
kadonotakashi 0:8fdf9a60065b 42 * Use locking/unlocking deepsleep for drivers that depend on features that
kadonotakashi 0:8fdf9a60065b 43 * are not allowed (=disabled) during the deepsleep. For instance, high frequency
kadonotakashi 0:8fdf9a60065b 44 * clocks.
kadonotakashi 0:8fdf9a60065b 45 *
kadonotakashi 0:8fdf9a60065b 46 * Example:
kadonotakashi 0:8fdf9a60065b 47 * @code
kadonotakashi 0:8fdf9a60065b 48 *
kadonotakashi 0:8fdf9a60065b 49 * void driver::handler()
kadonotakashi 0:8fdf9a60065b 50 * {
kadonotakashi 0:8fdf9a60065b 51 * if (_sensor.get_event()) {
kadonotakashi 0:8fdf9a60065b 52 * // any event - we are finished, unlock the deepsleep
kadonotakashi 0:8fdf9a60065b 53 * sleep_manager_unlock_deep_sleep();
kadonotakashi 0:8fdf9a60065b 54 * _callback();
kadonotakashi 0:8fdf9a60065b 55 * }
kadonotakashi 0:8fdf9a60065b 56 * }
kadonotakashi 0:8fdf9a60065b 57 *
kadonotakashi 0:8fdf9a60065b 58 * int driver::measure(event_t event, callback_t& callback)
kadonotakashi 0:8fdf9a60065b 59 * {
kadonotakashi 0:8fdf9a60065b 60 * _callback = callback;
kadonotakashi 0:8fdf9a60065b 61 * sleep_manager_lock_deep_sleep();
kadonotakashi 0:8fdf9a60065b 62 * // start async transaction, we are waiting for an event
kadonotakashi 0:8fdf9a60065b 63 * return _sensor.start(event, callback);
kadonotakashi 0:8fdf9a60065b 64 * }
kadonotakashi 0:8fdf9a60065b 65 * @endcode
kadonotakashi 0:8fdf9a60065b 66 */
kadonotakashi 0:8fdf9a60065b 67 #ifdef MBED_SLEEP_TRACING_ENABLED
kadonotakashi 0:8fdf9a60065b 68
kadonotakashi 0:8fdf9a60065b 69 void sleep_tracker_lock(const char *const filename, int line);
kadonotakashi 0:8fdf9a60065b 70 void sleep_tracker_unlock(const char *const filename, int line);
kadonotakashi 0:8fdf9a60065b 71
kadonotakashi 0:8fdf9a60065b 72 #define sleep_manager_lock_deep_sleep() \
kadonotakashi 0:8fdf9a60065b 73 do \
kadonotakashi 0:8fdf9a60065b 74 { \
kadonotakashi 0:8fdf9a60065b 75 sleep_manager_lock_deep_sleep_internal(); \
kadonotakashi 0:8fdf9a60065b 76 sleep_tracker_lock(MBED_FILENAME, __LINE__); \
kadonotakashi 0:8fdf9a60065b 77 } while (0);
kadonotakashi 0:8fdf9a60065b 78
kadonotakashi 0:8fdf9a60065b 79 #define sleep_manager_unlock_deep_sleep() \
kadonotakashi 0:8fdf9a60065b 80 do \
kadonotakashi 0:8fdf9a60065b 81 { \
kadonotakashi 0:8fdf9a60065b 82 sleep_manager_unlock_deep_sleep_internal(); \
kadonotakashi 0:8fdf9a60065b 83 sleep_tracker_unlock(MBED_FILENAME, __LINE__); \
kadonotakashi 0:8fdf9a60065b 84 } while (0);
kadonotakashi 0:8fdf9a60065b 85
kadonotakashi 0:8fdf9a60065b 86 #else
kadonotakashi 0:8fdf9a60065b 87
kadonotakashi 0:8fdf9a60065b 88 #define sleep_manager_lock_deep_sleep() \
kadonotakashi 0:8fdf9a60065b 89 sleep_manager_lock_deep_sleep_internal()
kadonotakashi 0:8fdf9a60065b 90
kadonotakashi 0:8fdf9a60065b 91 #define sleep_manager_unlock_deep_sleep() \
kadonotakashi 0:8fdf9a60065b 92 sleep_manager_unlock_deep_sleep_internal()
kadonotakashi 0:8fdf9a60065b 93
kadonotakashi 0:8fdf9a60065b 94 #endif // MBED_SLEEP_TRACING_ENABLED
kadonotakashi 0:8fdf9a60065b 95
kadonotakashi 0:8fdf9a60065b 96 /** Lock the deep sleep mode
kadonotakashi 0:8fdf9a60065b 97 *
kadonotakashi 0:8fdf9a60065b 98 * This locks the automatic deep mode selection.
kadonotakashi 0:8fdf9a60065b 99 * sleep_manager_sleep_auto() will ignore deepsleep mode if
kadonotakashi 0:8fdf9a60065b 100 * this function is invoked at least once (the internal counter is non-zero)
kadonotakashi 0:8fdf9a60065b 101 *
kadonotakashi 0:8fdf9a60065b 102 * Use this locking mechanism for interrupt driven API that are
kadonotakashi 0:8fdf9a60065b 103 * running in the background and deepsleep could affect their functionality
kadonotakashi 0:8fdf9a60065b 104 *
kadonotakashi 0:8fdf9a60065b 105 * The lock is a counter, can be locked up to USHRT_MAX
kadonotakashi 0:8fdf9a60065b 106 * This function is IRQ and thread safe
kadonotakashi 0:8fdf9a60065b 107 */
kadonotakashi 0:8fdf9a60065b 108 void sleep_manager_lock_deep_sleep_internal(void);
kadonotakashi 0:8fdf9a60065b 109
kadonotakashi 0:8fdf9a60065b 110 /** Unlock the deep sleep mode
kadonotakashi 0:8fdf9a60065b 111 *
kadonotakashi 0:8fdf9a60065b 112 * Use unlocking in pair with sleep_manager_lock_deep_sleep().
kadonotakashi 0:8fdf9a60065b 113 *
kadonotakashi 0:8fdf9a60065b 114 * The lock is a counter, should be equally unlocked as locked
kadonotakashi 0:8fdf9a60065b 115 * This function is IRQ and thread safe
kadonotakashi 0:8fdf9a60065b 116 */
kadonotakashi 0:8fdf9a60065b 117 void sleep_manager_unlock_deep_sleep_internal(void);
kadonotakashi 0:8fdf9a60065b 118
kadonotakashi 0:8fdf9a60065b 119 /** Get the status of deep sleep allowance for a target
kadonotakashi 0:8fdf9a60065b 120 *
kadonotakashi 0:8fdf9a60065b 121 * @return true if a target can go to deepsleep, false otherwise
kadonotakashi 0:8fdf9a60065b 122 */
kadonotakashi 0:8fdf9a60065b 123 bool sleep_manager_can_deep_sleep(void);
kadonotakashi 0:8fdf9a60065b 124
kadonotakashi 0:8fdf9a60065b 125 /** Check if the target can deep sleep within a period of time
kadonotakashi 0:8fdf9a60065b 126 *
kadonotakashi 0:8fdf9a60065b 127 * This function in intended for use in testing. The amount
kadonotakashi 0:8fdf9a60065b 128 * of time this functions waits for deeps sleep to be available
kadonotakashi 0:8fdf9a60065b 129 * is currently 2ms. This may change in the future depending
kadonotakashi 0:8fdf9a60065b 130 * on testing requirements.
kadonotakashi 0:8fdf9a60065b 131 *
kadonotakashi 0:8fdf9a60065b 132 * @return true if a target can go to deepsleep, false otherwise
kadonotakashi 0:8fdf9a60065b 133 */
kadonotakashi 0:8fdf9a60065b 134 bool sleep_manager_can_deep_sleep_test_check(void);
kadonotakashi 0:8fdf9a60065b 135
kadonotakashi 0:8fdf9a60065b 136 /** Enter auto selected sleep mode. It chooses the sleep or deeepsleep modes based
kadonotakashi 0:8fdf9a60065b 137 * on the deepsleep locking counter
kadonotakashi 0:8fdf9a60065b 138 *
kadonotakashi 0:8fdf9a60065b 139 * This function is IRQ and thread safe
kadonotakashi 0:8fdf9a60065b 140 *
kadonotakashi 0:8fdf9a60065b 141 * @note
kadonotakashi 0:8fdf9a60065b 142 * If MBED_DEBUG is defined, only hal_sleep is allowed. This ensures the debugger
kadonotakashi 0:8fdf9a60065b 143 * to be active for debug modes.
kadonotakashi 0:8fdf9a60065b 144 *
kadonotakashi 0:8fdf9a60065b 145 */
kadonotakashi 0:8fdf9a60065b 146 void sleep_manager_sleep_auto(void);
kadonotakashi 0:8fdf9a60065b 147
kadonotakashi 0:8fdf9a60065b 148 /** Send the microcontroller to sleep
kadonotakashi 0:8fdf9a60065b 149 *
kadonotakashi 0:8fdf9a60065b 150 * @note This function can be a noop if not implemented by the platform.
kadonotakashi 0:8fdf9a60065b 151 * @note This function will be a noop in debug mode (debug build profile when MBED_DEBUG is defined).
kadonotakashi 0:8fdf9a60065b 152 * @note This function will be a noop if the following conditions are met:
kadonotakashi 0:8fdf9a60065b 153 * - The RTOS is present
kadonotakashi 0:8fdf9a60065b 154 * - The processor turn off the Systick clock during sleep
kadonotakashi 0:8fdf9a60065b 155 * - The target does not implement tickless mode
kadonotakashi 0:8fdf9a60065b 156 *
kadonotakashi 0:8fdf9a60065b 157 * The processor is setup ready for sleep, and sent to sleep using __WFI(). In this mode, the
kadonotakashi 0:8fdf9a60065b 158 * system clock to the core is stopped until a reset or an interrupt occurs. This eliminates
kadonotakashi 0:8fdf9a60065b 159 * dynamic power used by the processor, memory systems and buses. The processor, peripheral and
kadonotakashi 0:8fdf9a60065b 160 * memory state are maintained, and the peripherals continue to work and can generate interrupts.
kadonotakashi 0:8fdf9a60065b 161 *
kadonotakashi 0:8fdf9a60065b 162 * The processor can be woken up by any internal peripheral interrupt or external pin interrupt.
kadonotakashi 0:8fdf9a60065b 163 *
kadonotakashi 0:8fdf9a60065b 164 * @note
kadonotakashi 0:8fdf9a60065b 165 * The mbed interface semihosting is disconnected as part of going to sleep, and can not be restored.
kadonotakashi 0:8fdf9a60065b 166 * Flash re-programming and the USB serial port will remain active, but the mbed program will no longer be
kadonotakashi 0:8fdf9a60065b 167 * able to access the LocalFileSystem
kadonotakashi 0:8fdf9a60065b 168 */
kadonotakashi 0:8fdf9a60065b 169 static inline void sleep(void)
kadonotakashi 0:8fdf9a60065b 170 {
kadonotakashi 0:8fdf9a60065b 171 #if DEVICE_SLEEP
kadonotakashi 0:8fdf9a60065b 172 #if (MBED_CONF_RTOS_PRESENT == 0) || (DEVICE_SYSTICK_CLK_OFF_DURING_SLEEP == 0) || defined(MBED_TICKLESS)
kadonotakashi 0:8fdf9a60065b 173 sleep_manager_sleep_auto();
kadonotakashi 0:8fdf9a60065b 174 #endif /* (MBED_CONF_RTOS_PRESENT == 0) || (DEVICE_SYSTICK_CLK_OFF_DURING_SLEEP == 0) || defined(MBED_TICKLESS) */
kadonotakashi 0:8fdf9a60065b 175 #endif /* DEVICE_SLEEP */
kadonotakashi 0:8fdf9a60065b 176 }
kadonotakashi 0:8fdf9a60065b 177
kadonotakashi 0:8fdf9a60065b 178 /** Send the microcontroller to deep sleep
kadonotakashi 0:8fdf9a60065b 179 *
kadonotakashi 0:8fdf9a60065b 180 * @deprecated
kadonotakashi 0:8fdf9a60065b 181 * Do not use this function. Applications should use sleep() API which puts the system in deepsleep mode if supported.
kadonotakashi 0:8fdf9a60065b 182 *
kadonotakashi 0:8fdf9a60065b 183 * @note This function can be a noop if not implemented by the platform.
kadonotakashi 0:8fdf9a60065b 184 * @note This function will be a noop in debug mode (debug build profile when MBED_DEBUG is defined)
kadonotakashi 0:8fdf9a60065b 185 *
kadonotakashi 0:8fdf9a60065b 186 * This processor is setup ready for deep sleep, and sent to sleep. This mode
kadonotakashi 0:8fdf9a60065b 187 * has the same sleep features as sleep plus it powers down peripherals and clocks. All state
kadonotakashi 0:8fdf9a60065b 188 * is still maintained.
kadonotakashi 0:8fdf9a60065b 189 *
kadonotakashi 0:8fdf9a60065b 190 * The processor can only be woken up by an external interrupt on a pin or a watchdog timer.
kadonotakashi 0:8fdf9a60065b 191 *
kadonotakashi 0:8fdf9a60065b 192 * @note
kadonotakashi 0:8fdf9a60065b 193 * The mbed interface semihosting is disconnected as part of going to sleep, and can not be restored.
kadonotakashi 0:8fdf9a60065b 194 * Flash re-programming and the USB serial port will remain active, but the mbed program will no longer be
kadonotakashi 0:8fdf9a60065b 195 * able to access the LocalFileSystem
kadonotakashi 0:8fdf9a60065b 196 */
kadonotakashi 0:8fdf9a60065b 197
kadonotakashi 0:8fdf9a60065b 198 MBED_DEPRECATED_SINCE("mbed-os-5.6", "One entry point for an application, use sleep()")
kadonotakashi 0:8fdf9a60065b 199 static inline void deepsleep(void)
kadonotakashi 0:8fdf9a60065b 200 {
kadonotakashi 0:8fdf9a60065b 201 #if DEVICE_SLEEP
kadonotakashi 0:8fdf9a60065b 202 sleep_manager_sleep_auto();
kadonotakashi 0:8fdf9a60065b 203 #endif /* DEVICE_SLEEP */
kadonotakashi 0:8fdf9a60065b 204 }
kadonotakashi 0:8fdf9a60065b 205
kadonotakashi 0:8fdf9a60065b 206 /** Resets the processor and most of the sub-system
kadonotakashi 0:8fdf9a60065b 207 *
kadonotakashi 0:8fdf9a60065b 208 * @note Does not affect the debug sub-system
kadonotakashi 0:8fdf9a60065b 209 */
kadonotakashi 0:8fdf9a60065b 210 static inline void system_reset(void)
kadonotakashi 0:8fdf9a60065b 211 {
kadonotakashi 0:8fdf9a60065b 212 NVIC_SystemReset();
kadonotakashi 0:8fdf9a60065b 213 }
kadonotakashi 0:8fdf9a60065b 214
kadonotakashi 0:8fdf9a60065b 215 /** Provides the time spent in sleep mode since boot.
kadonotakashi 0:8fdf9a60065b 216 *
kadonotakashi 0:8fdf9a60065b 217 * @return Time spent in sleep
kadonotakashi 0:8fdf9a60065b 218 * @note Works only if platform supports LP ticker.
kadonotakashi 0:8fdf9a60065b 219 */
kadonotakashi 0:8fdf9a60065b 220 us_timestamp_t mbed_time_sleep(void);
kadonotakashi 0:8fdf9a60065b 221
kadonotakashi 0:8fdf9a60065b 222 /** Provides the time spent in deep sleep mode since boot.
kadonotakashi 0:8fdf9a60065b 223 *
kadonotakashi 0:8fdf9a60065b 224 * @return Time spent in deep sleep
kadonotakashi 0:8fdf9a60065b 225 * @note Works only if platform supports LP ticker.
kadonotakashi 0:8fdf9a60065b 226 */
kadonotakashi 0:8fdf9a60065b 227 us_timestamp_t mbed_time_deepsleep(void);
kadonotakashi 0:8fdf9a60065b 228
kadonotakashi 0:8fdf9a60065b 229 /** Provides the time spent in idle mode since boot.
kadonotakashi 0:8fdf9a60065b 230 *
kadonotakashi 0:8fdf9a60065b 231 * @return Idle thread time.
kadonotakashi 0:8fdf9a60065b 232 * @note Works only if platform supports LP ticker.
kadonotakashi 0:8fdf9a60065b 233 */
kadonotakashi 0:8fdf9a60065b 234 us_timestamp_t mbed_time_idle(void);
kadonotakashi 0:8fdf9a60065b 235
kadonotakashi 0:8fdf9a60065b 236 /** Provides the time since the system is up i.e. boot.
kadonotakashi 0:8fdf9a60065b 237 *
kadonotakashi 0:8fdf9a60065b 238 * @return System uptime.
kadonotakashi 0:8fdf9a60065b 239 * @note Works only if platform supports LP ticker.
kadonotakashi 0:8fdf9a60065b 240 */
kadonotakashi 0:8fdf9a60065b 241 us_timestamp_t mbed_uptime(void);
kadonotakashi 0:8fdf9a60065b 242
kadonotakashi 0:8fdf9a60065b 243 #ifdef __cplusplus
kadonotakashi 0:8fdf9a60065b 244 }
kadonotakashi 0:8fdf9a60065b 245 #endif
kadonotakashi 0:8fdf9a60065b 246
kadonotakashi 0:8fdf9a60065b 247 #endif
kadonotakashi 0:8fdf9a60065b 248
kadonotakashi 0:8fdf9a60065b 249 /** @}*/
kadonotakashi 0:8fdf9a60065b 250 /** @}*/