RTC auf true

Committer:
kevman
Date:
Wed Mar 13 11:03:24 2019 +0000
Revision:
2:7aab896b1a3b
Parent:
0:38ceb79fef03
2019-03-13

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kevman 0:38ceb79fef03 1 /* mbed Microcontroller Library
kevman 0:38ceb79fef03 2 * Copyright (c) 2006-2013 ARM Limited
kevman 0:38ceb79fef03 3 *
kevman 0:38ceb79fef03 4 * Licensed under the Apache License, Version 2.0 (the "License");
kevman 0:38ceb79fef03 5 * you may not use this file except in compliance with the License.
kevman 0:38ceb79fef03 6 * You may obtain a copy of the License at
kevman 0:38ceb79fef03 7 *
kevman 0:38ceb79fef03 8 * http://www.apache.org/licenses/LICENSE-2.0
kevman 0:38ceb79fef03 9 *
kevman 0:38ceb79fef03 10 * Unless required by applicable law or agreed to in writing, software
kevman 0:38ceb79fef03 11 * distributed under the License is distributed on an "AS IS" BASIS,
kevman 0:38ceb79fef03 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
kevman 0:38ceb79fef03 13 * See the License for the specific language governing permissions and
kevman 0:38ceb79fef03 14 * limitations under the License.
kevman 0:38ceb79fef03 15 */
kevman 0:38ceb79fef03 16 #ifndef MBED_TICKER_H
kevman 0:38ceb79fef03 17 #define MBED_TICKER_H
kevman 0:38ceb79fef03 18
kevman 0:38ceb79fef03 19 #include "drivers/TimerEvent.h"
kevman 0:38ceb79fef03 20 #include "platform/Callback.h"
kevman 0:38ceb79fef03 21 #include "platform/mbed_toolchain.h"
kevman 0:38ceb79fef03 22 #include "platform/NonCopyable.h"
kevman 0:38ceb79fef03 23 #include "platform/mbed_power_mgmt.h"
kevman 0:38ceb79fef03 24 #include "hal/lp_ticker_api.h"
kevman 0:38ceb79fef03 25 #include "platform/mbed_critical.h"
kevman 0:38ceb79fef03 26
kevman 0:38ceb79fef03 27 namespace mbed {
kevman 0:38ceb79fef03 28 /** \addtogroup drivers */
kevman 0:38ceb79fef03 29
kevman 0:38ceb79fef03 30 /** A Ticker is used to call a function at a recurring interval
kevman 0:38ceb79fef03 31 *
kevman 0:38ceb79fef03 32 * You can use as many separate Ticker objects as you require.
kevman 0:38ceb79fef03 33 *
kevman 0:38ceb79fef03 34 * @note Synchronization level: Interrupt safe
kevman 0:38ceb79fef03 35 *
kevman 0:38ceb79fef03 36 * Example:
kevman 0:38ceb79fef03 37 * @code
kevman 0:38ceb79fef03 38 * // Toggle the blinking LED after 5 seconds
kevman 0:38ceb79fef03 39 *
kevman 0:38ceb79fef03 40 * #include "mbed.h"
kevman 0:38ceb79fef03 41 *
kevman 0:38ceb79fef03 42 * Ticker timer;
kevman 0:38ceb79fef03 43 * DigitalOut led1(LED1);
kevman 0:38ceb79fef03 44 * DigitalOut led2(LED2);
kevman 0:38ceb79fef03 45 *
kevman 0:38ceb79fef03 46 * int flip = 0;
kevman 0:38ceb79fef03 47 *
kevman 0:38ceb79fef03 48 * void attime() {
kevman 0:38ceb79fef03 49 * flip = !flip;
kevman 0:38ceb79fef03 50 * }
kevman 0:38ceb79fef03 51 *
kevman 0:38ceb79fef03 52 * int main() {
kevman 0:38ceb79fef03 53 * timer.attach(&attime, 5);
kevman 0:38ceb79fef03 54 * while(1) {
kevman 0:38ceb79fef03 55 * if(flip == 0) {
kevman 0:38ceb79fef03 56 * led1 = !led1;
kevman 0:38ceb79fef03 57 * } else {
kevman 0:38ceb79fef03 58 * led2 = !led2;
kevman 0:38ceb79fef03 59 * }
kevman 0:38ceb79fef03 60 * wait(0.2);
kevman 0:38ceb79fef03 61 * }
kevman 0:38ceb79fef03 62 * }
kevman 0:38ceb79fef03 63 * @endcode
kevman 0:38ceb79fef03 64 * @ingroup drivers
kevman 0:38ceb79fef03 65 */
kevman 0:38ceb79fef03 66 class Ticker : public TimerEvent, private NonCopyable<Ticker> {
kevman 0:38ceb79fef03 67
kevman 0:38ceb79fef03 68 public:
kevman 0:38ceb79fef03 69 Ticker() : TimerEvent(), _function(0), _lock_deepsleep(true)
kevman 0:38ceb79fef03 70 {
kevman 0:38ceb79fef03 71 }
kevman 0:38ceb79fef03 72
kevman 0:38ceb79fef03 73 // When low power ticker is in use, then do not disable deep sleep.
kevman 0:38ceb79fef03 74 Ticker(const ticker_data_t *data) : TimerEvent(data), _function(0), _lock_deepsleep(true)
kevman 0:38ceb79fef03 75 {
kevman 0:38ceb79fef03 76 #if DEVICE_LPTICKER
kevman 0:38ceb79fef03 77 _lock_deepsleep = (data != get_lp_ticker_data());
kevman 0:38ceb79fef03 78 #endif
kevman 0:38ceb79fef03 79 }
kevman 0:38ceb79fef03 80
kevman 0:38ceb79fef03 81 /** Attach a function to be called by the Ticker, specifying the interval in seconds
kevman 0:38ceb79fef03 82 *
kevman 0:38ceb79fef03 83 * @param func pointer to the function to be called
kevman 0:38ceb79fef03 84 * @param t the time between calls in seconds
kevman 0:38ceb79fef03 85 */
kevman 0:38ceb79fef03 86 void attach(Callback<void()> func, float t)
kevman 0:38ceb79fef03 87 {
kevman 0:38ceb79fef03 88 attach_us(func, t * 1000000.0f);
kevman 0:38ceb79fef03 89 }
kevman 0:38ceb79fef03 90
kevman 0:38ceb79fef03 91 /** Attach a member function to be called by the Ticker, specifying the interval in seconds
kevman 0:38ceb79fef03 92 *
kevman 0:38ceb79fef03 93 * @param obj pointer to the object to call the member function on
kevman 0:38ceb79fef03 94 * @param method pointer to the member function to be called
kevman 0:38ceb79fef03 95 * @param t the time between calls in seconds
kevman 0:38ceb79fef03 96 * @deprecated
kevman 0:38ceb79fef03 97 * The attach function does not support cv-qualifiers. Replaced by
kevman 0:38ceb79fef03 98 * attach(callback(obj, method), t).
kevman 0:38ceb79fef03 99 */
kevman 0:38ceb79fef03 100 template<typename T, typename M>
kevman 0:38ceb79fef03 101 MBED_DEPRECATED_SINCE("mbed-os-5.1",
kevman 0:38ceb79fef03 102 "The attach function does not support cv-qualifiers. Replaced by "
kevman 0:38ceb79fef03 103 "attach(callback(obj, method), t).")
kevman 0:38ceb79fef03 104 void attach(T *obj, M method, float t)
kevman 0:38ceb79fef03 105 {
kevman 0:38ceb79fef03 106 attach(callback(obj, method), t);
kevman 0:38ceb79fef03 107 }
kevman 0:38ceb79fef03 108
kevman 0:38ceb79fef03 109 /** Attach a function to be called by the Ticker, specifying the interval in microseconds
kevman 0:38ceb79fef03 110 *
kevman 0:38ceb79fef03 111 * @param func pointer to the function to be called
kevman 0:38ceb79fef03 112 * @param t the time between calls in micro-seconds
kevman 0:38ceb79fef03 113 *
kevman 0:38ceb79fef03 114 * @note setting @a t to a value shorter than it takes to process the ticker callback
kevman 0:38ceb79fef03 115 * causes the system to hang. Ticker callback is called constantly with no time
kevman 0:38ceb79fef03 116 * for threads scheduling.
kevman 0:38ceb79fef03 117 *
kevman 0:38ceb79fef03 118 */
kevman 0:38ceb79fef03 119 void attach_us(Callback<void()> func, us_timestamp_t t)
kevman 0:38ceb79fef03 120 {
kevman 0:38ceb79fef03 121 core_util_critical_section_enter();
kevman 0:38ceb79fef03 122 // lock only for the initial callback setup and this is not low power ticker
kevman 0:38ceb79fef03 123 if (!_function && _lock_deepsleep) {
kevman 0:38ceb79fef03 124 sleep_manager_lock_deep_sleep();
kevman 0:38ceb79fef03 125 }
kevman 0:38ceb79fef03 126 _function = func;
kevman 0:38ceb79fef03 127 setup(t);
kevman 0:38ceb79fef03 128 core_util_critical_section_exit();
kevman 0:38ceb79fef03 129 }
kevman 0:38ceb79fef03 130
kevman 0:38ceb79fef03 131 /** Attach a member function to be called by the Ticker, specifying the interval in microseconds
kevman 0:38ceb79fef03 132 *
kevman 0:38ceb79fef03 133 * @param obj pointer to the object to call the member function on
kevman 0:38ceb79fef03 134 * @param method pointer to the member function to be called
kevman 0:38ceb79fef03 135 * @param t the time between calls in microseconds
kevman 0:38ceb79fef03 136 * @deprecated
kevman 0:38ceb79fef03 137 * The attach_us function does not support cv-qualifiers. Replaced by
kevman 0:38ceb79fef03 138 * attach_us(callback(obj, method), t).
kevman 0:38ceb79fef03 139 */
kevman 0:38ceb79fef03 140 template<typename T, typename M>
kevman 0:38ceb79fef03 141 MBED_DEPRECATED_SINCE("mbed-os-5.1",
kevman 0:38ceb79fef03 142 "The attach_us function does not support cv-qualifiers. Replaced by "
kevman 0:38ceb79fef03 143 "attach_us(callback(obj, method), t).")
kevman 0:38ceb79fef03 144 void attach_us(T *obj, M method, us_timestamp_t t)
kevman 0:38ceb79fef03 145 {
kevman 0:38ceb79fef03 146 attach_us(Callback<void()>(obj, method), t);
kevman 0:38ceb79fef03 147 }
kevman 0:38ceb79fef03 148
kevman 0:38ceb79fef03 149 virtual ~Ticker()
kevman 0:38ceb79fef03 150 {
kevman 0:38ceb79fef03 151 detach();
kevman 0:38ceb79fef03 152 }
kevman 0:38ceb79fef03 153
kevman 0:38ceb79fef03 154 /** Detach the function
kevman 0:38ceb79fef03 155 */
kevman 0:38ceb79fef03 156 void detach();
kevman 0:38ceb79fef03 157
kevman 0:38ceb79fef03 158 #if !defined(DOXYGEN_ONLY)
kevman 0:38ceb79fef03 159 protected:
kevman 0:38ceb79fef03 160 void setup(us_timestamp_t t);
kevman 0:38ceb79fef03 161 virtual void handler();
kevman 0:38ceb79fef03 162
kevman 0:38ceb79fef03 163 protected:
kevman 0:38ceb79fef03 164 us_timestamp_t _delay; /**< Time delay (in microseconds) for resetting the multishot callback. */
kevman 0:38ceb79fef03 165 Callback<void()> _function; /**< Callback. */
kevman 0:38ceb79fef03 166 bool _lock_deepsleep; /**< Flag which indicates if deep sleep should be disabled. */
kevman 0:38ceb79fef03 167 #endif
kevman 0:38ceb79fef03 168 };
kevman 0:38ceb79fef03 169
kevman 0:38ceb79fef03 170 } // namespace mbed
kevman 0:38ceb79fef03 171
kevman 0:38ceb79fef03 172 #endif