mbed library sources. Supersedes mbed-src.

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Committer:
AnnaBridge
Date:
Wed Feb 20 22:31:08 2019 +0000
Revision:
189:f392fc9709a3
Parent:
188:bcfe06ba3d64
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Anna Bridge 186:707f6e361f3e 1 /* mbed Microcontroller Library
Anna Bridge 186:707f6e361f3e 2 * Copyright (c) 2018 ARM Limited
AnnaBridge 189:f392fc9709a3 3 * SPDX-License-Identifier: Apache-2.0
Anna Bridge 186:707f6e361f3e 4 *
Anna Bridge 186:707f6e361f3e 5 * Licensed under the Apache License, Version 2.0 (the "License");
Anna Bridge 186:707f6e361f3e 6 * you may not use this file except in compliance with the License.
Anna Bridge 186:707f6e361f3e 7 * You may obtain a copy of the License at
Anna Bridge 186:707f6e361f3e 8 *
Anna Bridge 186:707f6e361f3e 9 * http://www.apache.org/licenses/LICENSE-2.0
Anna Bridge 186:707f6e361f3e 10 *
Anna Bridge 186:707f6e361f3e 11 * Unless required by applicable law or agreed to in writing, software
Anna Bridge 186:707f6e361f3e 12 * distributed under the License is distributed on an "AS IS" BASIS,
Anna Bridge 186:707f6e361f3e 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Anna Bridge 186:707f6e361f3e 14 * See the License for the specific language governing permissions and
Anna Bridge 186:707f6e361f3e 15 * limitations under the License.
Anna Bridge 186:707f6e361f3e 16 */
AnnaBridge 188:bcfe06ba3d64 17 #include "hal/mbed_lp_ticker_wrapper.h"
Anna Bridge 186:707f6e361f3e 18
Anna Bridge 186:707f6e361f3e 19 #if DEVICE_LPTICKER && (LPTICKER_DELAY_TICKS > 0)
Anna Bridge 186:707f6e361f3e 20
AnnaBridge 188:bcfe06ba3d64 21 #include "hal/LowPowerTickerWrapper.h"
AnnaBridge 188:bcfe06ba3d64 22 #include "platform/mbed_critical.h"
Anna Bridge 186:707f6e361f3e 23
Anna Bridge 186:707f6e361f3e 24 // Do not use SingletonPtr since this must be initialized in a critical section
AnnaBridge 188:bcfe06ba3d64 25 static LowPowerTickerWrapper *ticker_wrapper;
AnnaBridge 188:bcfe06ba3d64 26 static uint64_t ticker_wrapper_data[(sizeof(LowPowerTickerWrapper) + 7) / 8];
AnnaBridge 188:bcfe06ba3d64 27 static bool init = false;
Anna Bridge 186:707f6e361f3e 28
AnnaBridge 188:bcfe06ba3d64 29 static void lp_ticker_wrapper_init()
Anna Bridge 186:707f6e361f3e 30 {
AnnaBridge 188:bcfe06ba3d64 31 ticker_wrapper->init();
AnnaBridge 188:bcfe06ba3d64 32 }
Anna Bridge 186:707f6e361f3e 33
AnnaBridge 188:bcfe06ba3d64 34 static uint32_t lp_ticker_wrapper_read()
AnnaBridge 188:bcfe06ba3d64 35 {
AnnaBridge 188:bcfe06ba3d64 36 return ticker_wrapper->read();
AnnaBridge 188:bcfe06ba3d64 37 }
Anna Bridge 186:707f6e361f3e 38
AnnaBridge 188:bcfe06ba3d64 39 static void lp_ticker_wrapper_set_interrupt(timestamp_t timestamp)
AnnaBridge 188:bcfe06ba3d64 40 {
AnnaBridge 188:bcfe06ba3d64 41 ticker_wrapper->set_interrupt(timestamp);
AnnaBridge 188:bcfe06ba3d64 42 }
Anna Bridge 186:707f6e361f3e 43
AnnaBridge 188:bcfe06ba3d64 44 static void lp_ticker_wrapper_disable_interrupt()
AnnaBridge 188:bcfe06ba3d64 45 {
AnnaBridge 188:bcfe06ba3d64 46 ticker_wrapper->disable_interrupt();
Anna Bridge 186:707f6e361f3e 47 }
Anna Bridge 186:707f6e361f3e 48
AnnaBridge 188:bcfe06ba3d64 49 static void lp_ticker_wrapper_clear_interrupt()
AnnaBridge 188:bcfe06ba3d64 50 {
AnnaBridge 188:bcfe06ba3d64 51 ticker_wrapper->clear_interrupt();
AnnaBridge 188:bcfe06ba3d64 52 }
AnnaBridge 188:bcfe06ba3d64 53
AnnaBridge 188:bcfe06ba3d64 54 static void lp_ticker_wrapper_fire_interrupt()
Anna Bridge 186:707f6e361f3e 55 {
AnnaBridge 188:bcfe06ba3d64 56 ticker_wrapper->fire_interrupt();
AnnaBridge 188:bcfe06ba3d64 57 }
AnnaBridge 188:bcfe06ba3d64 58
AnnaBridge 188:bcfe06ba3d64 59 static const ticker_info_t *lp_ticker_wrapper_get_info()
AnnaBridge 188:bcfe06ba3d64 60 {
AnnaBridge 188:bcfe06ba3d64 61 return ticker_wrapper->get_info();
Anna Bridge 186:707f6e361f3e 62 }
Anna Bridge 186:707f6e361f3e 63
AnnaBridge 188:bcfe06ba3d64 64 static void lp_ticker_wrapper_free()
AnnaBridge 188:bcfe06ba3d64 65 {
AnnaBridge 188:bcfe06ba3d64 66 ticker_wrapper->free();
AnnaBridge 188:bcfe06ba3d64 67 }
AnnaBridge 188:bcfe06ba3d64 68
AnnaBridge 188:bcfe06ba3d64 69 static const ticker_interface_t lp_interface = {
AnnaBridge 188:bcfe06ba3d64 70 lp_ticker_wrapper_init,
AnnaBridge 188:bcfe06ba3d64 71 lp_ticker_wrapper_read,
AnnaBridge 188:bcfe06ba3d64 72 lp_ticker_wrapper_disable_interrupt,
AnnaBridge 188:bcfe06ba3d64 73 lp_ticker_wrapper_clear_interrupt,
AnnaBridge 188:bcfe06ba3d64 74 lp_ticker_wrapper_set_interrupt,
AnnaBridge 188:bcfe06ba3d64 75 lp_ticker_wrapper_fire_interrupt,
AnnaBridge 188:bcfe06ba3d64 76 lp_ticker_wrapper_free,
AnnaBridge 188:bcfe06ba3d64 77 lp_ticker_wrapper_get_info
AnnaBridge 188:bcfe06ba3d64 78 };
AnnaBridge 188:bcfe06ba3d64 79
AnnaBridge 188:bcfe06ba3d64 80 void lp_ticker_wrapper_irq_handler(ticker_irq_handler_type handler)
Anna Bridge 186:707f6e361f3e 81 {
Anna Bridge 186:707f6e361f3e 82 core_util_critical_section_enter();
Anna Bridge 186:707f6e361f3e 83
AnnaBridge 188:bcfe06ba3d64 84 if (!init) {
AnnaBridge 188:bcfe06ba3d64 85 // Force ticker to initialize
AnnaBridge 188:bcfe06ba3d64 86 get_lp_ticker_data();
Anna Bridge 186:707f6e361f3e 87 }
AnnaBridge 188:bcfe06ba3d64 88
AnnaBridge 188:bcfe06ba3d64 89 ticker_wrapper->irq_handler(handler);
Anna Bridge 186:707f6e361f3e 90
Anna Bridge 186:707f6e361f3e 91 core_util_critical_section_exit();
Anna Bridge 186:707f6e361f3e 92 }
Anna Bridge 186:707f6e361f3e 93
AnnaBridge 188:bcfe06ba3d64 94 const ticker_data_t *get_lp_ticker_wrapper_data(const ticker_data_t *data)
Anna Bridge 186:707f6e361f3e 95 {
Anna Bridge 186:707f6e361f3e 96 core_util_critical_section_enter();
Anna Bridge 186:707f6e361f3e 97
Anna Bridge 186:707f6e361f3e 98 if (!init) {
AnnaBridge 188:bcfe06ba3d64 99 ticker_wrapper = new (ticker_wrapper_data) LowPowerTickerWrapper(data, &lp_interface, LPTICKER_DELAY_TICKS, LPTICKER_DELAY_TICKS);
Anna Bridge 186:707f6e361f3e 100 init = true;
Anna Bridge 186:707f6e361f3e 101 }
Anna Bridge 186:707f6e361f3e 102
AnnaBridge 188:bcfe06ba3d64 103 core_util_critical_section_exit();
AnnaBridge 188:bcfe06ba3d64 104
AnnaBridge 188:bcfe06ba3d64 105 return &ticker_wrapper->data;
AnnaBridge 188:bcfe06ba3d64 106 }
AnnaBridge 188:bcfe06ba3d64 107
AnnaBridge 188:bcfe06ba3d64 108 void lp_ticker_wrapper_suspend()
AnnaBridge 188:bcfe06ba3d64 109 {
AnnaBridge 188:bcfe06ba3d64 110 if (!init) {
AnnaBridge 188:bcfe06ba3d64 111 // Force ticker to initialize
AnnaBridge 188:bcfe06ba3d64 112 get_lp_ticker_data();
Anna Bridge 186:707f6e361f3e 113 }
Anna Bridge 186:707f6e361f3e 114
AnnaBridge 188:bcfe06ba3d64 115 ticker_wrapper->suspend();
AnnaBridge 188:bcfe06ba3d64 116 }
AnnaBridge 188:bcfe06ba3d64 117
AnnaBridge 188:bcfe06ba3d64 118 void lp_ticker_wrapper_resume()
AnnaBridge 188:bcfe06ba3d64 119 {
AnnaBridge 188:bcfe06ba3d64 120 if (!init) {
AnnaBridge 188:bcfe06ba3d64 121 // Force ticker to initialize
AnnaBridge 188:bcfe06ba3d64 122 get_lp_ticker_data();
Anna Bridge 186:707f6e361f3e 123 }
Anna Bridge 186:707f6e361f3e 124
AnnaBridge 188:bcfe06ba3d64 125 ticker_wrapper->resume();
Anna Bridge 186:707f6e361f3e 126 }
Anna Bridge 186:707f6e361f3e 127
Anna Bridge 186:707f6e361f3e 128 #endif