mbed library sources. Supersedes mbed-src.

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

Committer:
AnnaBridge
Date:
Thu Apr 19 17:12:19 2018 +0100
Revision:
184:08ed48f1de7f
Child:
186:707f6e361f3e
mbed-dev library. Release version 161

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 184:08ed48f1de7f 1 /* mbed Microcontroller Library
AnnaBridge 184:08ed48f1de7f 2 * Copyright (c) 2018 ARM Limited
AnnaBridge 184:08ed48f1de7f 3 *
AnnaBridge 184:08ed48f1de7f 4 * Licensed under the Apache License, Version 2.0 (the "License");
AnnaBridge 184:08ed48f1de7f 5 * you may not use this file except in compliance with the License.
AnnaBridge 184:08ed48f1de7f 6 * You may obtain a copy of the License at
AnnaBridge 184:08ed48f1de7f 7 *
AnnaBridge 184:08ed48f1de7f 8 * http://www.apache.org/licenses/LICENSE-2.0
AnnaBridge 184:08ed48f1de7f 9 *
AnnaBridge 184:08ed48f1de7f 10 * Unless required by applicable law or agreed to in writing, software
AnnaBridge 184:08ed48f1de7f 11 * distributed under the License is distributed on an "AS IS" BASIS,
AnnaBridge 184:08ed48f1de7f 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
AnnaBridge 184:08ed48f1de7f 13 * See the License for the specific language governing permissions and
AnnaBridge 184:08ed48f1de7f 14 * limitations under the License.
AnnaBridge 184:08ed48f1de7f 15 */
AnnaBridge 184:08ed48f1de7f 16
AnnaBridge 184:08ed48f1de7f 17 /**
AnnaBridge 184:08ed48f1de7f 18 * Low-power elapsed time measure and interval timer in micro-secundum,
AnnaBridge 184:08ed48f1de7f 19 * servicing \ref lp_ticker_api.h, using CMSDK Timer1 \ref CMSDK_TIMER1_DEV.
AnnaBridge 184:08ed48f1de7f 20 */
AnnaBridge 184:08ed48f1de7f 21
AnnaBridge 184:08ed48f1de7f 22 #include <limits.h>
AnnaBridge 184:08ed48f1de7f 23
AnnaBridge 184:08ed48f1de7f 24 #include "cmsdk_ticker.h"
AnnaBridge 184:08ed48f1de7f 25 #include "lp_ticker_api.h"
AnnaBridge 184:08ed48f1de7f 26 #include "platform_devices.h"
AnnaBridge 184:08ed48f1de7f 27
AnnaBridge 184:08ed48f1de7f 28 /**
AnnaBridge 184:08ed48f1de7f 29 * \brief Calculate clocks to us
AnnaBridge 184:08ed48f1de7f 30 *
AnnaBridge 184:08ed48f1de7f 31 * \param[in] tick Number of clock ticks
AnnaBridge 184:08ed48f1de7f 32 *
AnnaBridge 184:08ed48f1de7f 33 * \return Number of usec, relative to the timer frequency,
AnnaBridge 184:08ed48f1de7f 34 * that a given ammount of ticks equates to.
AnnaBridge 184:08ed48f1de7f 35 */
AnnaBridge 184:08ed48f1de7f 36 static uint32_t convert_tick_to_us(uint32_t tick)
AnnaBridge 184:08ed48f1de7f 37 {
AnnaBridge 184:08ed48f1de7f 38 return (tick / (SystemCoreClock / SEC_TO_USEC_MULTIPLIER));
AnnaBridge 184:08ed48f1de7f 39 }
AnnaBridge 184:08ed48f1de7f 40
AnnaBridge 184:08ed48f1de7f 41 /**
AnnaBridge 184:08ed48f1de7f 42 * \brief Calculate us to clock ticks
AnnaBridge 184:08ed48f1de7f 43 *
AnnaBridge 184:08ed48f1de7f 44 * \param[in] us Time to convert to clock ticks
AnnaBridge 184:08ed48f1de7f 45 *
AnnaBridge 184:08ed48f1de7f 46 * \return Number of clock ticks relative to the timer frequency,
AnnaBridge 184:08ed48f1de7f 47 * that a given period of usec equates to.
AnnaBridge 184:08ed48f1de7f 48 */
AnnaBridge 184:08ed48f1de7f 49 static uint32_t convert_us_to_tick(uint32_t us)
AnnaBridge 184:08ed48f1de7f 50 {
AnnaBridge 184:08ed48f1de7f 51 return (us * (SystemCoreClock / SEC_TO_USEC_MULTIPLIER));
AnnaBridge 184:08ed48f1de7f 52 }
AnnaBridge 184:08ed48f1de7f 53
AnnaBridge 184:08ed48f1de7f 54 static const struct tick_cfg_t cfg =
AnnaBridge 184:08ed48f1de7f 55 {
AnnaBridge 184:08ed48f1de7f 56 .timer_driver = &CMSDK_TIMER1_DEV,
AnnaBridge 184:08ed48f1de7f 57 .irq_n = TIMER1_IRQn,
AnnaBridge 184:08ed48f1de7f 58 .interval_callback = &lp_ticker_irq_handler,
AnnaBridge 184:08ed48f1de7f 59 .convert_tick_to_time = &convert_tick_to_us,
AnnaBridge 184:08ed48f1de7f 60 .convert_time_to_tick = &convert_us_to_tick
AnnaBridge 184:08ed48f1de7f 61 };
AnnaBridge 184:08ed48f1de7f 62
AnnaBridge 184:08ed48f1de7f 63 static struct tick_data_t data =
AnnaBridge 184:08ed48f1de7f 64 {
AnnaBridge 184:08ed48f1de7f 65 .is_initialized = false,
AnnaBridge 184:08ed48f1de7f 66 .cumulated_time = 0,
AnnaBridge 184:08ed48f1de7f 67 .max_interval_time = 0,
AnnaBridge 184:08ed48f1de7f 68 .reload_time = 0,
AnnaBridge 184:08ed48f1de7f 69 .interval_callback_enabled = false,
AnnaBridge 184:08ed48f1de7f 70 .previous_cumulated_time = 0,
AnnaBridge 184:08ed48f1de7f 71 .previous_elapsed = 0
AnnaBridge 184:08ed48f1de7f 72 };
AnnaBridge 184:08ed48f1de7f 73
AnnaBridge 184:08ed48f1de7f 74 static struct tick_drv_data_t timer_data =
AnnaBridge 184:08ed48f1de7f 75 {
AnnaBridge 184:08ed48f1de7f 76 .cfg = &cfg,
AnnaBridge 184:08ed48f1de7f 77 .data = &data
AnnaBridge 184:08ed48f1de7f 78 };
AnnaBridge 184:08ed48f1de7f 79
AnnaBridge 184:08ed48f1de7f 80 void lp_ticker_init(void)
AnnaBridge 184:08ed48f1de7f 81 {
AnnaBridge 184:08ed48f1de7f 82 cmsdk_ticker_init(&timer_data);
AnnaBridge 184:08ed48f1de7f 83 }
AnnaBridge 184:08ed48f1de7f 84
AnnaBridge 184:08ed48f1de7f 85 uint32_t lp_ticker_read()
AnnaBridge 184:08ed48f1de7f 86 {
AnnaBridge 184:08ed48f1de7f 87 return cmsdk_ticker_read(&timer_data);
AnnaBridge 184:08ed48f1de7f 88 }
AnnaBridge 184:08ed48f1de7f 89
AnnaBridge 184:08ed48f1de7f 90 void lp_ticker_set_interrupt(timestamp_t timestamp)
AnnaBridge 184:08ed48f1de7f 91 {
AnnaBridge 184:08ed48f1de7f 92 cmsdk_ticker_set_interrupt(&timer_data, timestamp);
AnnaBridge 184:08ed48f1de7f 93 }
AnnaBridge 184:08ed48f1de7f 94
AnnaBridge 184:08ed48f1de7f 95 void lp_ticker_disable_interrupt(void)
AnnaBridge 184:08ed48f1de7f 96 {
AnnaBridge 184:08ed48f1de7f 97 cmsdk_ticker_disable_interrupt(&timer_data);
AnnaBridge 184:08ed48f1de7f 98 }
AnnaBridge 184:08ed48f1de7f 99
AnnaBridge 184:08ed48f1de7f 100 void lp_ticker_clear_interrupt(void)
AnnaBridge 184:08ed48f1de7f 101 {
AnnaBridge 184:08ed48f1de7f 102 cmsdk_ticker_clear_interrupt(&timer_data);
AnnaBridge 184:08ed48f1de7f 103 }
AnnaBridge 184:08ed48f1de7f 104
AnnaBridge 184:08ed48f1de7f 105 void lp_ticker_fire_interrupt(void)
AnnaBridge 184:08ed48f1de7f 106 {
AnnaBridge 184:08ed48f1de7f 107 cmsdk_ticker_fire_interrupt(&timer_data);
AnnaBridge 184:08ed48f1de7f 108 }
AnnaBridge 184:08ed48f1de7f 109
AnnaBridge 184:08ed48f1de7f 110 void TIMER1_IRQHandler(void)
AnnaBridge 184:08ed48f1de7f 111 {
AnnaBridge 184:08ed48f1de7f 112 cmsdk_ticker_irq_handler(&timer_data);
AnnaBridge 184:08ed48f1de7f 113 }