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:
186:707f6e361f3e
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Anna Bridge 186:707f6e361f3e 1 /**
Anna Bridge 186:707f6e361f3e 2 * @file
Anna Bridge 186:707f6e361f3e 3 * @brief Timer utility functions.
Anna Bridge 186:707f6e361f3e 4 */
Anna Bridge 186:707f6e361f3e 5 /* *****************************************************************************
Anna Bridge 186:707f6e361f3e 6 * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
Anna Bridge 186:707f6e361f3e 7 *
Anna Bridge 186:707f6e361f3e 8 * Permission is hereby granted, free of charge, to any person obtaining a
Anna Bridge 186:707f6e361f3e 9 * copy of this software and associated documentation files (the "Software"),
Anna Bridge 186:707f6e361f3e 10 * to deal in the Software without restriction, including without limitation
Anna Bridge 186:707f6e361f3e 11 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
Anna Bridge 186:707f6e361f3e 12 * and/or sell copies of the Software, and to permit persons to whom the
Anna Bridge 186:707f6e361f3e 13 * Software is furnished to do so, subject to the following conditions:
Anna Bridge 186:707f6e361f3e 14 *
Anna Bridge 186:707f6e361f3e 15 * The above copyright notice and this permission notice shall be included
Anna Bridge 186:707f6e361f3e 16 * in all copies or substantial portions of the Software.
Anna Bridge 186:707f6e361f3e 17 *
Anna Bridge 186:707f6e361f3e 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
Anna Bridge 186:707f6e361f3e 19 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
Anna Bridge 186:707f6e361f3e 20 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
Anna Bridge 186:707f6e361f3e 21 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
Anna Bridge 186:707f6e361f3e 22 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
Anna Bridge 186:707f6e361f3e 23 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
Anna Bridge 186:707f6e361f3e 24 * OTHER DEALINGS IN THE SOFTWARE.
Anna Bridge 186:707f6e361f3e 25 *
Anna Bridge 186:707f6e361f3e 26 * Except as contained in this notice, the name of Maxim Integrated
Anna Bridge 186:707f6e361f3e 27 * Products, Inc. shall not be used except as stated in the Maxim Integrated
Anna Bridge 186:707f6e361f3e 28 * Products, Inc. Branding Policy.
Anna Bridge 186:707f6e361f3e 29 *
Anna Bridge 186:707f6e361f3e 30 * The mere transfer of this software does not imply any licenses
Anna Bridge 186:707f6e361f3e 31 * of trade secrets, proprietary technology, copyrights, patents,
Anna Bridge 186:707f6e361f3e 32 * trademarks, maskwork rights, or any other form of intellectual
Anna Bridge 186:707f6e361f3e 33 * property whatsoever. Maxim Integrated Products, Inc. retains all
Anna Bridge 186:707f6e361f3e 34 * ownership rights.
Anna Bridge 186:707f6e361f3e 35 *
Anna Bridge 186:707f6e361f3e 36 * $Date: 2016-09-08 17:30:35 -0500 (Thu, 08 Sep 2016) $
Anna Bridge 186:707f6e361f3e 37 * $Revision: 24322 $
Anna Bridge 186:707f6e361f3e 38 *
Anna Bridge 186:707f6e361f3e 39 **************************************************************************** */
Anna Bridge 186:707f6e361f3e 40
Anna Bridge 186:707f6e361f3e 41 /* **** Includes **** */
Anna Bridge 186:707f6e361f3e 42 #include <stddef.h>
Anna Bridge 186:707f6e361f3e 43 #include "mxc_assert.h"
Anna Bridge 186:707f6e361f3e 44 #include "tmr.h"
Anna Bridge 186:707f6e361f3e 45 #include "tmr_utils.h"
Anna Bridge 186:707f6e361f3e 46
Anna Bridge 186:707f6e361f3e 47
Anna Bridge 186:707f6e361f3e 48 /**
Anna Bridge 186:707f6e361f3e 49 * @ingroup tmr_utilities
Anna Bridge 186:707f6e361f3e 50 * @{
Anna Bridge 186:707f6e361f3e 51 */
Anna Bridge 186:707f6e361f3e 52
Anna Bridge 186:707f6e361f3e 53 /* **** Definitions **** */
Anna Bridge 186:707f6e361f3e 54
Anna Bridge 186:707f6e361f3e 55 /* **** Globals **** */
Anna Bridge 186:707f6e361f3e 56
Anna Bridge 186:707f6e361f3e 57 /* **** Functions **** */
Anna Bridge 186:707f6e361f3e 58
Anna Bridge 186:707f6e361f3e 59 /* ************************************************************************** */
Anna Bridge 186:707f6e361f3e 60 void TMR_Delay(mxc_tmr_regs_t* tmr, unsigned long us)
Anna Bridge 186:707f6e361f3e 61 {
Anna Bridge 186:707f6e361f3e 62 TMR_TO_Start(tmr, us);
Anna Bridge 186:707f6e361f3e 63
Anna Bridge 186:707f6e361f3e 64 while(TMR_TO_Check(tmr) != E_TIME_OUT) {}
Anna Bridge 186:707f6e361f3e 65 }
Anna Bridge 186:707f6e361f3e 66
Anna Bridge 186:707f6e361f3e 67 /* ************************************************************************** */
Anna Bridge 186:707f6e361f3e 68 void TMR_TO_Start(mxc_tmr_regs_t* tmr, unsigned long us)
Anna Bridge 186:707f6e361f3e 69 {
Anna Bridge 186:707f6e361f3e 70 unsigned clk_shift = 0;
Anna Bridge 186:707f6e361f3e 71 uint64_t max_us;
Anna Bridge 186:707f6e361f3e 72 uint32_t ticks;
Anna Bridge 186:707f6e361f3e 73
Anna Bridge 186:707f6e361f3e 74 // Adjust the clk shift amout by how long the timeout is
Anna Bridge 186:707f6e361f3e 75 // Start with the fastest clock to give the greatest accuracy
Anna Bridge 186:707f6e361f3e 76 do {
Anna Bridge 186:707f6e361f3e 77 max_us = (uint64_t)((0xFFFFFFFFUL / ((uint64_t)SystemCoreClock >> clk_shift++)) * 1000000UL);
Anna Bridge 186:707f6e361f3e 78 } while(us > max_us);
Anna Bridge 186:707f6e361f3e 79
Anna Bridge 186:707f6e361f3e 80 // Calculate the number of timer ticks we need to wait
Anna Bridge 186:707f6e361f3e 81 TMR_Init(tmr, (tmr_prescale_t)clk_shift, NULL);
Anna Bridge 186:707f6e361f3e 82 TMR32_TimeToTicks(tmr, us, TMR_UNIT_MICROSEC, &ticks);
Anna Bridge 186:707f6e361f3e 83
Anna Bridge 186:707f6e361f3e 84 // Initialize the timer in one-shot mode
Anna Bridge 186:707f6e361f3e 85 tmr32_cfg_t cfg;
Anna Bridge 186:707f6e361f3e 86 cfg.mode = TMR32_MODE_ONE_SHOT;
Anna Bridge 186:707f6e361f3e 87 cfg.compareCount = ticks;
Anna Bridge 186:707f6e361f3e 88 TMR32_Stop(tmr);
Anna Bridge 186:707f6e361f3e 89 TMR32_Config(tmr, &cfg);
Anna Bridge 186:707f6e361f3e 90
Anna Bridge 186:707f6e361f3e 91 TMR32_ClearFlag(tmr);
Anna Bridge 186:707f6e361f3e 92 TMR32_Start(tmr);
Anna Bridge 186:707f6e361f3e 93 }
Anna Bridge 186:707f6e361f3e 94
Anna Bridge 186:707f6e361f3e 95 /* ************************************************************************** */
Anna Bridge 186:707f6e361f3e 96 int TMR_TO_Check(mxc_tmr_regs_t* tmr)
Anna Bridge 186:707f6e361f3e 97 {
Anna Bridge 186:707f6e361f3e 98 if(TMR32_GetFlag(tmr)) {
Anna Bridge 186:707f6e361f3e 99 return E_TIME_OUT;
Anna Bridge 186:707f6e361f3e 100 }
Anna Bridge 186:707f6e361f3e 101 return E_NO_ERROR;
Anna Bridge 186:707f6e361f3e 102 }
Anna Bridge 186:707f6e361f3e 103
Anna Bridge 186:707f6e361f3e 104 /* ************************************************************************** */
Anna Bridge 186:707f6e361f3e 105 void TMR_TO_Stop(mxc_tmr_regs_t* tmr)
Anna Bridge 186:707f6e361f3e 106 {
Anna Bridge 186:707f6e361f3e 107 TMR32_Stop(tmr);
Anna Bridge 186:707f6e361f3e 108 TMR32_SetCount(tmr, 0x0);
Anna Bridge 186:707f6e361f3e 109 }
Anna Bridge 186:707f6e361f3e 110
Anna Bridge 186:707f6e361f3e 111 /* ************************************************************************** */
Anna Bridge 186:707f6e361f3e 112 void TMR_TO_Clear(mxc_tmr_regs_t* tmr)
Anna Bridge 186:707f6e361f3e 113 {
Anna Bridge 186:707f6e361f3e 114 TMR32_ClearFlag(tmr);
Anna Bridge 186:707f6e361f3e 115 TMR32_SetCount(tmr, 0x0);
Anna Bridge 186:707f6e361f3e 116 }
Anna Bridge 186:707f6e361f3e 117
Anna Bridge 186:707f6e361f3e 118 /* ************************************************************************** */
Anna Bridge 186:707f6e361f3e 119 unsigned TMR_TO_Elapsed(mxc_tmr_regs_t* tmr)
Anna Bridge 186:707f6e361f3e 120 {
Anna Bridge 186:707f6e361f3e 121 uint32_t elapsed;
Anna Bridge 186:707f6e361f3e 122 tmr_unit_t units;
Anna Bridge 186:707f6e361f3e 123
Anna Bridge 186:707f6e361f3e 124 TMR_TicksToTime(tmr, TMR32_GetCount(tmr), &elapsed, &units);
Anna Bridge 186:707f6e361f3e 125
Anna Bridge 186:707f6e361f3e 126 switch(units) {
Anna Bridge 186:707f6e361f3e 127 case TMR_UNIT_NANOSEC:
Anna Bridge 186:707f6e361f3e 128 default:
Anna Bridge 186:707f6e361f3e 129 return (elapsed / 1000);
Anna Bridge 186:707f6e361f3e 130 case TMR_UNIT_MICROSEC:
Anna Bridge 186:707f6e361f3e 131 return (elapsed);
Anna Bridge 186:707f6e361f3e 132 case TMR_UNIT_MILLISEC:
Anna Bridge 186:707f6e361f3e 133 return (elapsed * 1000);
Anna Bridge 186:707f6e361f3e 134 case TMR_UNIT_SEC:
Anna Bridge 186:707f6e361f3e 135 return (elapsed * 1000000);
Anna Bridge 186:707f6e361f3e 136 }
Anna Bridge 186:707f6e361f3e 137 }
Anna Bridge 186:707f6e361f3e 138
Anna Bridge 186:707f6e361f3e 139 /* ************************************************************************** */
Anna Bridge 186:707f6e361f3e 140 unsigned TMR_TO_Remaining(mxc_tmr_regs_t* tmr)
Anna Bridge 186:707f6e361f3e 141 {
Anna Bridge 186:707f6e361f3e 142 uint32_t remaining_ticks, remaining_time;
Anna Bridge 186:707f6e361f3e 143 tmr_unit_t units;
Anna Bridge 186:707f6e361f3e 144
Anna Bridge 186:707f6e361f3e 145 remaining_ticks = TMR32_GetCompare(tmr) - TMR32_GetCount(tmr);
Anna Bridge 186:707f6e361f3e 146 TMR_TicksToTime(tmr, remaining_ticks, &remaining_time, &units);
Anna Bridge 186:707f6e361f3e 147
Anna Bridge 186:707f6e361f3e 148 switch(units) {
Anna Bridge 186:707f6e361f3e 149 case TMR_UNIT_NANOSEC:
Anna Bridge 186:707f6e361f3e 150 default:
Anna Bridge 186:707f6e361f3e 151 return (remaining_time / 1000);
Anna Bridge 186:707f6e361f3e 152 case TMR_UNIT_MICROSEC:
Anna Bridge 186:707f6e361f3e 153 return (remaining_time);
Anna Bridge 186:707f6e361f3e 154 case TMR_UNIT_MILLISEC:
Anna Bridge 186:707f6e361f3e 155 return (remaining_time * 1000);
Anna Bridge 186:707f6e361f3e 156 case TMR_UNIT_SEC:
Anna Bridge 186:707f6e361f3e 157 return (remaining_time * 1000000);
Anna Bridge 186:707f6e361f3e 158 }
Anna Bridge 186:707f6e361f3e 159 }
Anna Bridge 186:707f6e361f3e 160
Anna Bridge 186:707f6e361f3e 161 /* ************************************************************************** */
Anna Bridge 186:707f6e361f3e 162 void TMR_SW_Start(mxc_tmr_regs_t* tmr)
Anna Bridge 186:707f6e361f3e 163 {
Anna Bridge 186:707f6e361f3e 164 TMR_TO_Start(tmr, 0xFFFFFFFF);
Anna Bridge 186:707f6e361f3e 165 }
Anna Bridge 186:707f6e361f3e 166
Anna Bridge 186:707f6e361f3e 167 /* ************************************************************************** */
Anna Bridge 186:707f6e361f3e 168 unsigned TMR_SW_Stop(mxc_tmr_regs_t* tmr)
Anna Bridge 186:707f6e361f3e 169 {
Anna Bridge 186:707f6e361f3e 170 unsigned elapsed = TMR_TO_Elapsed(tmr);
Anna Bridge 186:707f6e361f3e 171 TMR_TO_Stop(tmr);
Anna Bridge 186:707f6e361f3e 172 return elapsed;
Anna Bridge 186:707f6e361f3e 173 }
Anna Bridge 186:707f6e361f3e 174 /** @} end of ingroup tmr_utilities */