From Ben Katz mbed-dev library. Removed unnecessary target files to reduce the overall size by a factor of 10 to make it easier to import into the online IDE.

Dependents:   motor_driver motor_driver_screaming_fix

Committer:
saloutos
Date:
Thu Nov 26 04:08:56 2020 +0000
Revision:
0:083111ae2a11
first commit of leaned mbed dev lib

Who changed what in which revision?

UserRevisionLine numberNew contents of line
saloutos 0:083111ae2a11 1 /* mbed Microcontroller Library
saloutos 0:083111ae2a11 2 * Copyright (c) 2006-2013 ARM Limited
saloutos 0:083111ae2a11 3 *
saloutos 0:083111ae2a11 4 * Licensed under the Apache License, Version 2.0 (the "License");
saloutos 0:083111ae2a11 5 * you may not use this file except in compliance with the License.
saloutos 0:083111ae2a11 6 * You may obtain a copy of the License at
saloutos 0:083111ae2a11 7 *
saloutos 0:083111ae2a11 8 * http://www.apache.org/licenses/LICENSE-2.0
saloutos 0:083111ae2a11 9 *
saloutos 0:083111ae2a11 10 * Unless required by applicable law or agreed to in writing, software
saloutos 0:083111ae2a11 11 * distributed under the License is distributed on an "AS IS" BASIS,
saloutos 0:083111ae2a11 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
saloutos 0:083111ae2a11 13 * See the License for the specific language governing permissions and
saloutos 0:083111ae2a11 14 * limitations under the License.
saloutos 0:083111ae2a11 15 */
saloutos 0:083111ae2a11 16 #include "drivers/Timer.h"
saloutos 0:083111ae2a11 17 #include "hal/ticker_api.h"
saloutos 0:083111ae2a11 18 #include "hal/us_ticker_api.h"
saloutos 0:083111ae2a11 19 #include "platform/mbed_critical.h"
saloutos 0:083111ae2a11 20 #include "hal/lp_ticker_api.h"
saloutos 0:083111ae2a11 21
saloutos 0:083111ae2a11 22 namespace mbed {
saloutos 0:083111ae2a11 23
saloutos 0:083111ae2a11 24 Timer::Timer() : _running(), _start(), _time(), _ticker_data(get_us_ticker_data()), _lock_deepsleep(true) {
saloutos 0:083111ae2a11 25 reset();
saloutos 0:083111ae2a11 26 }
saloutos 0:083111ae2a11 27
saloutos 0:083111ae2a11 28 Timer::Timer(const ticker_data_t *data) : _running(), _start(), _time(), _ticker_data(data), _lock_deepsleep(true) {
saloutos 0:083111ae2a11 29 reset();
saloutos 0:083111ae2a11 30 #if DEVICE_LOWPOWERTIMER
saloutos 0:083111ae2a11 31 _lock_deepsleep = (data != get_lp_ticker_data());
saloutos 0:083111ae2a11 32 #endif
saloutos 0:083111ae2a11 33 }
saloutos 0:083111ae2a11 34
saloutos 0:083111ae2a11 35 Timer::~Timer() {
saloutos 0:083111ae2a11 36 core_util_critical_section_enter();
saloutos 0:083111ae2a11 37 if (_running) {
saloutos 0:083111ae2a11 38 if(_lock_deepsleep) {
saloutos 0:083111ae2a11 39 sleep_manager_unlock_deep_sleep();
saloutos 0:083111ae2a11 40 }
saloutos 0:083111ae2a11 41 }
saloutos 0:083111ae2a11 42 _running = 0;
saloutos 0:083111ae2a11 43 core_util_critical_section_exit();
saloutos 0:083111ae2a11 44 }
saloutos 0:083111ae2a11 45
saloutos 0:083111ae2a11 46 void Timer::start() {
saloutos 0:083111ae2a11 47 core_util_critical_section_enter();
saloutos 0:083111ae2a11 48 if (!_running) {
saloutos 0:083111ae2a11 49 if(_lock_deepsleep) {
saloutos 0:083111ae2a11 50 sleep_manager_lock_deep_sleep();
saloutos 0:083111ae2a11 51 }
saloutos 0:083111ae2a11 52 _start = ticker_read_us(_ticker_data);
saloutos 0:083111ae2a11 53 _running = 1;
saloutos 0:083111ae2a11 54 }
saloutos 0:083111ae2a11 55 core_util_critical_section_exit();
saloutos 0:083111ae2a11 56 }
saloutos 0:083111ae2a11 57
saloutos 0:083111ae2a11 58 void Timer::stop() {
saloutos 0:083111ae2a11 59 core_util_critical_section_enter();
saloutos 0:083111ae2a11 60 _time += slicetime();
saloutos 0:083111ae2a11 61 if (_running) {
saloutos 0:083111ae2a11 62 if(_lock_deepsleep) {
saloutos 0:083111ae2a11 63 sleep_manager_unlock_deep_sleep();
saloutos 0:083111ae2a11 64 }
saloutos 0:083111ae2a11 65 }
saloutos 0:083111ae2a11 66 _running = 0;
saloutos 0:083111ae2a11 67 core_util_critical_section_exit();
saloutos 0:083111ae2a11 68 }
saloutos 0:083111ae2a11 69
saloutos 0:083111ae2a11 70 int Timer::read_us() {
saloutos 0:083111ae2a11 71 return read_high_resolution_us();
saloutos 0:083111ae2a11 72 }
saloutos 0:083111ae2a11 73
saloutos 0:083111ae2a11 74 float Timer::read() {
saloutos 0:083111ae2a11 75 return (float)read_us() / 1000000.0f;
saloutos 0:083111ae2a11 76 }
saloutos 0:083111ae2a11 77
saloutos 0:083111ae2a11 78 int Timer::read_ms() {
saloutos 0:083111ae2a11 79 return read_high_resolution_us() / 1000;
saloutos 0:083111ae2a11 80 }
saloutos 0:083111ae2a11 81
saloutos 0:083111ae2a11 82 us_timestamp_t Timer::read_high_resolution_us() {
saloutos 0:083111ae2a11 83 core_util_critical_section_enter();
saloutos 0:083111ae2a11 84 us_timestamp_t time = _time + slicetime();
saloutos 0:083111ae2a11 85 core_util_critical_section_exit();
saloutos 0:083111ae2a11 86 return time;
saloutos 0:083111ae2a11 87 }
saloutos 0:083111ae2a11 88
saloutos 0:083111ae2a11 89 us_timestamp_t Timer::slicetime() {
saloutos 0:083111ae2a11 90 us_timestamp_t ret = 0;
saloutos 0:083111ae2a11 91 core_util_critical_section_enter();
saloutos 0:083111ae2a11 92 if (_running) {
saloutos 0:083111ae2a11 93 ret = ticker_read_us(_ticker_data) - _start;
saloutos 0:083111ae2a11 94 }
saloutos 0:083111ae2a11 95 core_util_critical_section_exit();
saloutos 0:083111ae2a11 96 return ret;
saloutos 0:083111ae2a11 97 }
saloutos 0:083111ae2a11 98
saloutos 0:083111ae2a11 99 void Timer::reset() {
saloutos 0:083111ae2a11 100 core_util_critical_section_enter();
saloutos 0:083111ae2a11 101 _start = ticker_read_us(_ticker_data);
saloutos 0:083111ae2a11 102 _time = 0;
saloutos 0:083111ae2a11 103 core_util_critical_section_exit();
saloutos 0:083111ae2a11 104 }
saloutos 0:083111ae2a11 105
saloutos 0:083111ae2a11 106 Timer::operator float() {
saloutos 0:083111ae2a11 107 return read();
saloutos 0:083111ae2a11 108 }
saloutos 0:083111ae2a11 109
saloutos 0:083111ae2a11 110 } // namespace mbed