The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Dependents:   hello SerialTestv11 SerialTestv12 Sierpinski ... more

mbed 2

This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.

Committer:
Anna Bridge
Date:
Wed May 10 11:31:27 2017 +0100
Revision:
142:4eea097334d6
Child:
159:7130f322cb7e
Release 142 of the mbed library

Ports for Upcoming Targets


Fixes and Changes

4059: [Silicon Labs] Rename targets https://github.com/ARMmbed/mbed-os/pull/4059
4187: [NCS36510] Reduce default heap size allocated by IAR to 1/4 of RAM https://github.com/ARMmbed/mbed-os/pull/4187
4225: fixed missing device_name for xDot and removed progen https://github.com/ARMmbed/mbed-os/pull/4225
4251: Fix C++11 build error w/ u-blox EVK-ODIN-W2 https://github.com/ARMmbed/mbed-os/pull/4251
4236: STM32 Fixed warning related to __packed redefinition https://github.com/ARMmbed/mbed-os/pull/4236
4190: LPC4088: Enable LWIP feature https://github.com/ARMmbed/mbed-os/pull/4190
4260: Inherit Xadow M0 target from LPC11U35_501 https://github.com/ARMmbed/mbed-os/pull/4260
4249: Add consistent button names across targets https://github.com/ARMmbed/mbed-os/pull/4249

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Anna Bridge 142:4eea097334d6 1 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 2 * @file em_timer.h
Anna Bridge 142:4eea097334d6 3 * @brief Timer/counter (TIMER) peripheral API
Anna Bridge 142:4eea097334d6 4 * @version 5.1.2
Anna Bridge 142:4eea097334d6 5 *******************************************************************************
Anna Bridge 142:4eea097334d6 6 * @section License
Anna Bridge 142:4eea097334d6 7 * <b>Copyright 2016 Silicon Laboratories, Inc. http://www.silabs.com</b>
Anna Bridge 142:4eea097334d6 8 *******************************************************************************
Anna Bridge 142:4eea097334d6 9 *
Anna Bridge 142:4eea097334d6 10 * Permission is granted to anyone to use this software for any purpose,
Anna Bridge 142:4eea097334d6 11 * including commercial applications, and to alter it and redistribute it
Anna Bridge 142:4eea097334d6 12 * freely, subject to the following restrictions:
Anna Bridge 142:4eea097334d6 13 *
Anna Bridge 142:4eea097334d6 14 * 1. The origin of this software must not be misrepresented; you must not
Anna Bridge 142:4eea097334d6 15 * claim that you wrote the original software.
Anna Bridge 142:4eea097334d6 16 * 2. Altered source versions must be plainly marked as such, and must not be
Anna Bridge 142:4eea097334d6 17 * misrepresented as being the original software.
Anna Bridge 142:4eea097334d6 18 * 3. This notice may not be removed or altered from any source distribution.
Anna Bridge 142:4eea097334d6 19 *
Anna Bridge 142:4eea097334d6 20 * DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Silicon Labs has no
Anna Bridge 142:4eea097334d6 21 * obligation to support this Software. Silicon Labs is providing the
Anna Bridge 142:4eea097334d6 22 * Software "AS IS", with no express or implied warranties of any kind,
Anna Bridge 142:4eea097334d6 23 * including, but not limited to, any implied warranties of merchantability
Anna Bridge 142:4eea097334d6 24 * or fitness for any particular purpose or warranties against infringement
Anna Bridge 142:4eea097334d6 25 * of any proprietary rights of a third party.
Anna Bridge 142:4eea097334d6 26 *
Anna Bridge 142:4eea097334d6 27 * Silicon Labs will not be liable for any consequential, incidental, or
Anna Bridge 142:4eea097334d6 28 * special damages, or any other relief, or for any claim by any third party,
Anna Bridge 142:4eea097334d6 29 * arising from your use of this Software.
Anna Bridge 142:4eea097334d6 30 *
Anna Bridge 142:4eea097334d6 31 ******************************************************************************/
Anna Bridge 142:4eea097334d6 32
Anna Bridge 142:4eea097334d6 33 #ifndef EM_TIMER_H
Anna Bridge 142:4eea097334d6 34 #define EM_TIMER_H
Anna Bridge 142:4eea097334d6 35
Anna Bridge 142:4eea097334d6 36 #include "em_device.h"
Anna Bridge 142:4eea097334d6 37 #if defined(TIMER_COUNT) && (TIMER_COUNT > 0)
Anna Bridge 142:4eea097334d6 38
Anna Bridge 142:4eea097334d6 39 #include <stdbool.h>
Anna Bridge 142:4eea097334d6 40 #include "em_assert.h"
Anna Bridge 142:4eea097334d6 41
Anna Bridge 142:4eea097334d6 42 #ifdef __cplusplus
Anna Bridge 142:4eea097334d6 43 extern "C" {
Anna Bridge 142:4eea097334d6 44 #endif
Anna Bridge 142:4eea097334d6 45
Anna Bridge 142:4eea097334d6 46 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 47 * @addtogroup emlib
Anna Bridge 142:4eea097334d6 48 * @{
Anna Bridge 142:4eea097334d6 49 ******************************************************************************/
Anna Bridge 142:4eea097334d6 50
Anna Bridge 142:4eea097334d6 51 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 52 * @addtogroup TIMER
Anna Bridge 142:4eea097334d6 53 * @{
Anna Bridge 142:4eea097334d6 54 ******************************************************************************/
Anna Bridge 142:4eea097334d6 55
Anna Bridge 142:4eea097334d6 56 /*******************************************************************************
Anna Bridge 142:4eea097334d6 57 ******************************* DEFINES ***********************************
Anna Bridge 142:4eea097334d6 58 ******************************************************************************/
Anna Bridge 142:4eea097334d6 59
Anna Bridge 142:4eea097334d6 60 /** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
Anna Bridge 142:4eea097334d6 61
Anna Bridge 142:4eea097334d6 62 /** Validation of TIMER register block pointer reference for assert statements. */
Anna Bridge 142:4eea097334d6 63 #define TIMER_REF_VALID(ref) TIMER_Valid(ref)
Anna Bridge 142:4eea097334d6 64
Anna Bridge 142:4eea097334d6 65 /** Validation of TIMER compare/capture channel number */
Anna Bridge 142:4eea097334d6 66 #if defined(_SILICON_LABS_32B_SERIES_0)
Anna Bridge 142:4eea097334d6 67 #define TIMER_CH_VALID(ch) ((ch) < 3)
Anna Bridge 142:4eea097334d6 68 #elif defined(_SILICON_LABS_32B_SERIES_1)
Anna Bridge 142:4eea097334d6 69 #define TIMER_CH_VALID(ch) ((ch) < 4)
Anna Bridge 142:4eea097334d6 70 #else
Anna Bridge 142:4eea097334d6 71 #error "Unknown device. Undefined number of channels."
Anna Bridge 142:4eea097334d6 72 #endif
Anna Bridge 142:4eea097334d6 73
Anna Bridge 142:4eea097334d6 74 /** @endcond */
Anna Bridge 142:4eea097334d6 75
Anna Bridge 142:4eea097334d6 76 /*******************************************************************************
Anna Bridge 142:4eea097334d6 77 ******************************** ENUMS ************************************
Anna Bridge 142:4eea097334d6 78 ******************************************************************************/
Anna Bridge 142:4eea097334d6 79
Anna Bridge 142:4eea097334d6 80 /** Timer compare/capture mode. */
Anna Bridge 142:4eea097334d6 81 typedef enum
Anna Bridge 142:4eea097334d6 82 {
Anna Bridge 142:4eea097334d6 83 timerCCModeOff = _TIMER_CC_CTRL_MODE_OFF, /**< Channel turned off. */
Anna Bridge 142:4eea097334d6 84 timerCCModeCapture = _TIMER_CC_CTRL_MODE_INPUTCAPTURE, /**< Input capture. */
Anna Bridge 142:4eea097334d6 85 timerCCModeCompare = _TIMER_CC_CTRL_MODE_OUTPUTCOMPARE, /**< Output compare. */
Anna Bridge 142:4eea097334d6 86 timerCCModePWM = _TIMER_CC_CTRL_MODE_PWM /**< Pulse-Width modulation. */
Anna Bridge 142:4eea097334d6 87 } TIMER_CCMode_TypeDef;
Anna Bridge 142:4eea097334d6 88
Anna Bridge 142:4eea097334d6 89
Anna Bridge 142:4eea097334d6 90 /** Clock select. */
Anna Bridge 142:4eea097334d6 91 typedef enum
Anna Bridge 142:4eea097334d6 92 {
Anna Bridge 142:4eea097334d6 93 /** Prescaled HFPER clock. */
Anna Bridge 142:4eea097334d6 94 timerClkSelHFPerClk = _TIMER_CTRL_CLKSEL_PRESCHFPERCLK,
Anna Bridge 142:4eea097334d6 95
Anna Bridge 142:4eea097334d6 96 /** Compare/Capture Channel 1 Input. */
Anna Bridge 142:4eea097334d6 97 timerClkSelCC1 = _TIMER_CTRL_CLKSEL_CC1,
Anna Bridge 142:4eea097334d6 98
Anna Bridge 142:4eea097334d6 99 /**
Anna Bridge 142:4eea097334d6 100 * Cascaded, clocked by underflow (down-counting) or overflow (up-counting)
Anna Bridge 142:4eea097334d6 101 * by lower numbered timer.
Anna Bridge 142:4eea097334d6 102 */
Anna Bridge 142:4eea097334d6 103 timerClkSelCascade = _TIMER_CTRL_CLKSEL_TIMEROUF
Anna Bridge 142:4eea097334d6 104 } TIMER_ClkSel_TypeDef;
Anna Bridge 142:4eea097334d6 105
Anna Bridge 142:4eea097334d6 106
Anna Bridge 142:4eea097334d6 107 /** Input capture edge select. */
Anna Bridge 142:4eea097334d6 108 typedef enum
Anna Bridge 142:4eea097334d6 109 {
Anna Bridge 142:4eea097334d6 110 /** Rising edges detected. */
Anna Bridge 142:4eea097334d6 111 timerEdgeRising = _TIMER_CC_CTRL_ICEDGE_RISING,
Anna Bridge 142:4eea097334d6 112
Anna Bridge 142:4eea097334d6 113 /** Falling edges detected. */
Anna Bridge 142:4eea097334d6 114 timerEdgeFalling = _TIMER_CC_CTRL_ICEDGE_FALLING,
Anna Bridge 142:4eea097334d6 115
Anna Bridge 142:4eea097334d6 116 /** Both edges detected. */
Anna Bridge 142:4eea097334d6 117 timerEdgeBoth = _TIMER_CC_CTRL_ICEDGE_BOTH,
Anna Bridge 142:4eea097334d6 118
Anna Bridge 142:4eea097334d6 119 /** No edge detection, leave signal as is. */
Anna Bridge 142:4eea097334d6 120 timerEdgeNone = _TIMER_CC_CTRL_ICEDGE_NONE
Anna Bridge 142:4eea097334d6 121 } TIMER_Edge_TypeDef;
Anna Bridge 142:4eea097334d6 122
Anna Bridge 142:4eea097334d6 123
Anna Bridge 142:4eea097334d6 124 /** Input capture event control. */
Anna Bridge 142:4eea097334d6 125 typedef enum
Anna Bridge 142:4eea097334d6 126 {
Anna Bridge 142:4eea097334d6 127 /** PRS output pulse, interrupt flag and DMA request set on every capture. */
Anna Bridge 142:4eea097334d6 128 timerEventEveryEdge = _TIMER_CC_CTRL_ICEVCTRL_EVERYEDGE,
Anna Bridge 142:4eea097334d6 129 /** PRS output pulse, interrupt flag and DMA request set on every second capture. */
Anna Bridge 142:4eea097334d6 130 timerEventEvery2ndEdge = _TIMER_CC_CTRL_ICEVCTRL_EVERYSECONDEDGE,
Anna Bridge 142:4eea097334d6 131 /**
Anna Bridge 142:4eea097334d6 132 * PRS output pulse, interrupt flag and DMA request set on rising edge (if
Anna Bridge 142:4eea097334d6 133 * input capture edge = BOTH).
Anna Bridge 142:4eea097334d6 134 */
Anna Bridge 142:4eea097334d6 135 timerEventRising = _TIMER_CC_CTRL_ICEVCTRL_RISING,
Anna Bridge 142:4eea097334d6 136 /**
Anna Bridge 142:4eea097334d6 137 * PRS output pulse, interrupt flag and DMA request set on falling edge (if
Anna Bridge 142:4eea097334d6 138 * input capture edge = BOTH).
Anna Bridge 142:4eea097334d6 139 */
Anna Bridge 142:4eea097334d6 140 timerEventFalling = _TIMER_CC_CTRL_ICEVCTRL_FALLING
Anna Bridge 142:4eea097334d6 141 } TIMER_Event_TypeDef;
Anna Bridge 142:4eea097334d6 142
Anna Bridge 142:4eea097334d6 143
Anna Bridge 142:4eea097334d6 144 /** Input edge action. */
Anna Bridge 142:4eea097334d6 145 typedef enum
Anna Bridge 142:4eea097334d6 146 {
Anna Bridge 142:4eea097334d6 147 /** No action taken. */
Anna Bridge 142:4eea097334d6 148 timerInputActionNone = _TIMER_CTRL_FALLA_NONE,
Anna Bridge 142:4eea097334d6 149
Anna Bridge 142:4eea097334d6 150 /** Start counter without reload. */
Anna Bridge 142:4eea097334d6 151 timerInputActionStart = _TIMER_CTRL_FALLA_START,
Anna Bridge 142:4eea097334d6 152
Anna Bridge 142:4eea097334d6 153 /** Stop counter without reload. */
Anna Bridge 142:4eea097334d6 154 timerInputActionStop = _TIMER_CTRL_FALLA_STOP,
Anna Bridge 142:4eea097334d6 155
Anna Bridge 142:4eea097334d6 156 /** Reload and start counter. */
Anna Bridge 142:4eea097334d6 157 timerInputActionReloadStart = _TIMER_CTRL_FALLA_RELOADSTART
Anna Bridge 142:4eea097334d6 158 } TIMER_InputAction_TypeDef;
Anna Bridge 142:4eea097334d6 159
Anna Bridge 142:4eea097334d6 160
Anna Bridge 142:4eea097334d6 161 /** Timer mode. */
Anna Bridge 142:4eea097334d6 162 typedef enum
Anna Bridge 142:4eea097334d6 163 {
Anna Bridge 142:4eea097334d6 164 timerModeUp = _TIMER_CTRL_MODE_UP, /**< Up-counting. */
Anna Bridge 142:4eea097334d6 165 timerModeDown = _TIMER_CTRL_MODE_DOWN, /**< Down-counting. */
Anna Bridge 142:4eea097334d6 166 timerModeUpDown = _TIMER_CTRL_MODE_UPDOWN, /**< Up/down-counting. */
Anna Bridge 142:4eea097334d6 167 timerModeQDec = _TIMER_CTRL_MODE_QDEC /**< Quadrature decoder. */
Anna Bridge 142:4eea097334d6 168 } TIMER_Mode_TypeDef;
Anna Bridge 142:4eea097334d6 169
Anna Bridge 142:4eea097334d6 170
Anna Bridge 142:4eea097334d6 171 /** Compare/capture output action. */
Anna Bridge 142:4eea097334d6 172 typedef enum
Anna Bridge 142:4eea097334d6 173 {
Anna Bridge 142:4eea097334d6 174 /** No action. */
Anna Bridge 142:4eea097334d6 175 timerOutputActionNone = _TIMER_CC_CTRL_CUFOA_NONE,
Anna Bridge 142:4eea097334d6 176
Anna Bridge 142:4eea097334d6 177 /** Toggle on event. */
Anna Bridge 142:4eea097334d6 178 timerOutputActionToggle = _TIMER_CC_CTRL_CUFOA_TOGGLE,
Anna Bridge 142:4eea097334d6 179
Anna Bridge 142:4eea097334d6 180 /** Clear on event. */
Anna Bridge 142:4eea097334d6 181 timerOutputActionClear = _TIMER_CC_CTRL_CUFOA_CLEAR,
Anna Bridge 142:4eea097334d6 182
Anna Bridge 142:4eea097334d6 183 /** Set on event. */
Anna Bridge 142:4eea097334d6 184 timerOutputActionSet = _TIMER_CC_CTRL_CUFOA_SET
Anna Bridge 142:4eea097334d6 185 } TIMER_OutputAction_TypeDef;
Anna Bridge 142:4eea097334d6 186
Anna Bridge 142:4eea097334d6 187
Anna Bridge 142:4eea097334d6 188 /** Prescaler. */
Anna Bridge 142:4eea097334d6 189 typedef enum
Anna Bridge 142:4eea097334d6 190 {
Anna Bridge 142:4eea097334d6 191 timerPrescale1 = _TIMER_CTRL_PRESC_DIV1, /**< Divide by 1. */
Anna Bridge 142:4eea097334d6 192 timerPrescale2 = _TIMER_CTRL_PRESC_DIV2, /**< Divide by 2. */
Anna Bridge 142:4eea097334d6 193 timerPrescale4 = _TIMER_CTRL_PRESC_DIV4, /**< Divide by 4. */
Anna Bridge 142:4eea097334d6 194 timerPrescale8 = _TIMER_CTRL_PRESC_DIV8, /**< Divide by 8. */
Anna Bridge 142:4eea097334d6 195 timerPrescale16 = _TIMER_CTRL_PRESC_DIV16, /**< Divide by 16. */
Anna Bridge 142:4eea097334d6 196 timerPrescale32 = _TIMER_CTRL_PRESC_DIV32, /**< Divide by 32. */
Anna Bridge 142:4eea097334d6 197 timerPrescale64 = _TIMER_CTRL_PRESC_DIV64, /**< Divide by 64. */
Anna Bridge 142:4eea097334d6 198 timerPrescale128 = _TIMER_CTRL_PRESC_DIV128, /**< Divide by 128. */
Anna Bridge 142:4eea097334d6 199 timerPrescale256 = _TIMER_CTRL_PRESC_DIV256, /**< Divide by 256. */
Anna Bridge 142:4eea097334d6 200 timerPrescale512 = _TIMER_CTRL_PRESC_DIV512, /**< Divide by 512. */
Anna Bridge 142:4eea097334d6 201 timerPrescale1024 = _TIMER_CTRL_PRESC_DIV1024 /**< Divide by 1024. */
Anna Bridge 142:4eea097334d6 202 } TIMER_Prescale_TypeDef;
Anna Bridge 142:4eea097334d6 203
Anna Bridge 142:4eea097334d6 204
Anna Bridge 142:4eea097334d6 205 /** Peripheral Reflex System signal. */
Anna Bridge 142:4eea097334d6 206 typedef enum
Anna Bridge 142:4eea097334d6 207 {
Anna Bridge 142:4eea097334d6 208 timerPRSSELCh0 = _TIMER_CC_CTRL_PRSSEL_PRSCH0, /**< PRS channel 0. */
Anna Bridge 142:4eea097334d6 209 timerPRSSELCh1 = _TIMER_CC_CTRL_PRSSEL_PRSCH1, /**< PRS channel 1. */
Anna Bridge 142:4eea097334d6 210 timerPRSSELCh2 = _TIMER_CC_CTRL_PRSSEL_PRSCH2, /**< PRS channel 2. */
Anna Bridge 142:4eea097334d6 211 timerPRSSELCh3 = _TIMER_CC_CTRL_PRSSEL_PRSCH3, /**< PRS channel 3. */
Anna Bridge 142:4eea097334d6 212 #if defined(_TIMER_CC_CTRL_PRSSEL_PRSCH4)
Anna Bridge 142:4eea097334d6 213 timerPRSSELCh4 = _TIMER_CC_CTRL_PRSSEL_PRSCH4, /**< PRS channel 4. */
Anna Bridge 142:4eea097334d6 214 #endif
Anna Bridge 142:4eea097334d6 215 #if defined(_TIMER_CC_CTRL_PRSSEL_PRSCH5)
Anna Bridge 142:4eea097334d6 216 timerPRSSELCh5 = _TIMER_CC_CTRL_PRSSEL_PRSCH5, /**< PRS channel 5. */
Anna Bridge 142:4eea097334d6 217 #endif
Anna Bridge 142:4eea097334d6 218 #if defined(_TIMER_CC_CTRL_PRSSEL_PRSCH6)
Anna Bridge 142:4eea097334d6 219 timerPRSSELCh6 = _TIMER_CC_CTRL_PRSSEL_PRSCH6, /**< PRS channel 6. */
Anna Bridge 142:4eea097334d6 220 #endif
Anna Bridge 142:4eea097334d6 221 #if defined(_TIMER_CC_CTRL_PRSSEL_PRSCH7)
Anna Bridge 142:4eea097334d6 222 timerPRSSELCh7 = _TIMER_CC_CTRL_PRSSEL_PRSCH7, /**< PRS channel 7. */
Anna Bridge 142:4eea097334d6 223 #endif
Anna Bridge 142:4eea097334d6 224 #if defined(_TIMER_CC_CTRL_PRSSEL_PRSCH8)
Anna Bridge 142:4eea097334d6 225 timerPRSSELCh8 = _TIMER_CC_CTRL_PRSSEL_PRSCH8, /**< PRS channel 8. */
Anna Bridge 142:4eea097334d6 226 #endif
Anna Bridge 142:4eea097334d6 227 #if defined(_TIMER_CC_CTRL_PRSSEL_PRSCH9)
Anna Bridge 142:4eea097334d6 228 timerPRSSELCh9 = _TIMER_CC_CTRL_PRSSEL_PRSCH9, /**< PRS channel 9. */
Anna Bridge 142:4eea097334d6 229 #endif
Anna Bridge 142:4eea097334d6 230 #if defined(_TIMER_CC_CTRL_PRSSEL_PRSCH10)
Anna Bridge 142:4eea097334d6 231 timerPRSSELCh10 = _TIMER_CC_CTRL_PRSSEL_PRSCH10, /**< PRS channel 10. */
Anna Bridge 142:4eea097334d6 232 #endif
Anna Bridge 142:4eea097334d6 233 #if defined(_TIMER_CC_CTRL_PRSSEL_PRSCH11)
Anna Bridge 142:4eea097334d6 234 timerPRSSELCh11 = _TIMER_CC_CTRL_PRSSEL_PRSCH11, /**< PRS channel 11. */
Anna Bridge 142:4eea097334d6 235 #endif
Anna Bridge 142:4eea097334d6 236 } TIMER_PRSSEL_TypeDef;
Anna Bridge 142:4eea097334d6 237
Anna Bridge 142:4eea097334d6 238 #if defined(_TIMER_DTFC_DTFA_NONE)
Anna Bridge 142:4eea097334d6 239 /** DT (Dead Time) Fault Actions. */
Anna Bridge 142:4eea097334d6 240 typedef enum
Anna Bridge 142:4eea097334d6 241 {
Anna Bridge 142:4eea097334d6 242 timerDtiFaultActionNone = _TIMER_DTFC_DTFA_NONE, /**< No action on fault. */
Anna Bridge 142:4eea097334d6 243 timerDtiFaultActionInactive = _TIMER_DTFC_DTFA_INACTIVE, /**< Set outputs inactive. */
Anna Bridge 142:4eea097334d6 244 timerDtiFaultActionClear = _TIMER_DTFC_DTFA_CLEAR, /**< Clear outputs. */
Anna Bridge 142:4eea097334d6 245 timerDtiFaultActionTristate = _TIMER_DTFC_DTFA_TRISTATE /**< Tristate outputs. */
Anna Bridge 142:4eea097334d6 246 } TIMER_DtiFaultAction_TypeDef;
Anna Bridge 142:4eea097334d6 247 #endif
Anna Bridge 142:4eea097334d6 248
Anna Bridge 142:4eea097334d6 249 /*******************************************************************************
Anna Bridge 142:4eea097334d6 250 ******************************* STRUCTS ***********************************
Anna Bridge 142:4eea097334d6 251 ******************************************************************************/
Anna Bridge 142:4eea097334d6 252
Anna Bridge 142:4eea097334d6 253 /** TIMER initialization structure. */
Anna Bridge 142:4eea097334d6 254 typedef struct
Anna Bridge 142:4eea097334d6 255 {
Anna Bridge 142:4eea097334d6 256 /** Start counting when init completed. */
Anna Bridge 142:4eea097334d6 257 bool enable;
Anna Bridge 142:4eea097334d6 258
Anna Bridge 142:4eea097334d6 259 /** Counter shall keep running during debug halt. */
Anna Bridge 142:4eea097334d6 260 bool debugRun;
Anna Bridge 142:4eea097334d6 261
Anna Bridge 142:4eea097334d6 262 /** Prescaling factor, if HFPER clock used. */
Anna Bridge 142:4eea097334d6 263 TIMER_Prescale_TypeDef prescale;
Anna Bridge 142:4eea097334d6 264
Anna Bridge 142:4eea097334d6 265 /** Clock selection. */
Anna Bridge 142:4eea097334d6 266 TIMER_ClkSel_TypeDef clkSel;
Anna Bridge 142:4eea097334d6 267
Anna Bridge 142:4eea097334d6 268 #if defined(TIMER_CTRL_X2CNT) && defined(TIMER_CTRL_ATI)
Anna Bridge 142:4eea097334d6 269 /** 2x Count mode, counter increments/decrements by 2, meant for PWN mode. */
Anna Bridge 142:4eea097334d6 270 bool count2x;
Anna Bridge 142:4eea097334d6 271
Anna Bridge 142:4eea097334d6 272 /** ATI (Always Track Inputs) makes CCPOL always track
Anna Bridge 142:4eea097334d6 273 * the polarity of the inputs. */
Anna Bridge 142:4eea097334d6 274 bool ati;
Anna Bridge 142:4eea097334d6 275 #endif
Anna Bridge 142:4eea097334d6 276
Anna Bridge 142:4eea097334d6 277 /** Action on falling input edge. */
Anna Bridge 142:4eea097334d6 278 TIMER_InputAction_TypeDef fallAction;
Anna Bridge 142:4eea097334d6 279
Anna Bridge 142:4eea097334d6 280 /** Action on rising input edge. */
Anna Bridge 142:4eea097334d6 281 TIMER_InputAction_TypeDef riseAction;
Anna Bridge 142:4eea097334d6 282
Anna Bridge 142:4eea097334d6 283 /** Counting mode. */
Anna Bridge 142:4eea097334d6 284 TIMER_Mode_TypeDef mode;
Anna Bridge 142:4eea097334d6 285
Anna Bridge 142:4eea097334d6 286 /** DMA request clear on active. */
Anna Bridge 142:4eea097334d6 287 bool dmaClrAct;
Anna Bridge 142:4eea097334d6 288
Anna Bridge 142:4eea097334d6 289 /** Select X2 or X4 quadrature decode mode (if used). */
Anna Bridge 142:4eea097334d6 290 bool quadModeX4;
Anna Bridge 142:4eea097334d6 291
Anna Bridge 142:4eea097334d6 292 /** Determines if only counting up or down once. */
Anna Bridge 142:4eea097334d6 293 bool oneShot;
Anna Bridge 142:4eea097334d6 294
Anna Bridge 142:4eea097334d6 295 /** Timer start/stop/reload by other timers. */
Anna Bridge 142:4eea097334d6 296 bool sync;
Anna Bridge 142:4eea097334d6 297 } TIMER_Init_TypeDef;
Anna Bridge 142:4eea097334d6 298
Anna Bridge 142:4eea097334d6 299 /** Default config for TIMER init structure. */
Anna Bridge 142:4eea097334d6 300 #if defined(TIMER_CTRL_X2CNT) && defined(TIMER_CTRL_ATI)
Anna Bridge 142:4eea097334d6 301 #define TIMER_INIT_DEFAULT \
Anna Bridge 142:4eea097334d6 302 { \
Anna Bridge 142:4eea097334d6 303 true, /* Enable timer when init complete. */ \
Anna Bridge 142:4eea097334d6 304 false, /* Stop counter during debug halt. */ \
Anna Bridge 142:4eea097334d6 305 timerPrescale1, /* No prescaling. */ \
Anna Bridge 142:4eea097334d6 306 timerClkSelHFPerClk, /* Select HFPER clock. */ \
Anna Bridge 142:4eea097334d6 307 false, /* Not 2x count mode. */ \
Anna Bridge 142:4eea097334d6 308 false, /* No ATI. */ \
Anna Bridge 142:4eea097334d6 309 timerInputActionNone, /* No action on falling input edge. */ \
Anna Bridge 142:4eea097334d6 310 timerInputActionNone, /* No action on rising input edge. */ \
Anna Bridge 142:4eea097334d6 311 timerModeUp, /* Up-counting. */ \
Anna Bridge 142:4eea097334d6 312 false, /* Do not clear DMA requests when DMA channel is active. */ \
Anna Bridge 142:4eea097334d6 313 false, /* Select X2 quadrature decode mode (if used). */ \
Anna Bridge 142:4eea097334d6 314 false, /* Disable one shot. */ \
Anna Bridge 142:4eea097334d6 315 false /* Not started/stopped/reloaded by other timers. */ \
Anna Bridge 142:4eea097334d6 316 }
Anna Bridge 142:4eea097334d6 317 #else
Anna Bridge 142:4eea097334d6 318 #define TIMER_INIT_DEFAULT \
Anna Bridge 142:4eea097334d6 319 { \
Anna Bridge 142:4eea097334d6 320 true, /* Enable timer when init complete. */ \
Anna Bridge 142:4eea097334d6 321 false, /* Stop counter during debug halt. */ \
Anna Bridge 142:4eea097334d6 322 timerPrescale1, /* No prescaling. */ \
Anna Bridge 142:4eea097334d6 323 timerClkSelHFPerClk, /* Select HFPER clock. */ \
Anna Bridge 142:4eea097334d6 324 timerInputActionNone, /* No action on falling input edge. */ \
Anna Bridge 142:4eea097334d6 325 timerInputActionNone, /* No action on rising input edge. */ \
Anna Bridge 142:4eea097334d6 326 timerModeUp, /* Up-counting. */ \
Anna Bridge 142:4eea097334d6 327 false, /* Do not clear DMA requests when DMA channel is active. */ \
Anna Bridge 142:4eea097334d6 328 false, /* Select X2 quadrature decode mode (if used). */ \
Anna Bridge 142:4eea097334d6 329 false, /* Disable one shot. */ \
Anna Bridge 142:4eea097334d6 330 false /* Not started/stopped/reloaded by other timers. */ \
Anna Bridge 142:4eea097334d6 331 }
Anna Bridge 142:4eea097334d6 332 #endif
Anna Bridge 142:4eea097334d6 333
Anna Bridge 142:4eea097334d6 334 /** TIMER compare/capture initialization structure. */
Anna Bridge 142:4eea097334d6 335 typedef struct
Anna Bridge 142:4eea097334d6 336 {
Anna Bridge 142:4eea097334d6 337 /** Input capture event control. */
Anna Bridge 142:4eea097334d6 338 TIMER_Event_TypeDef eventCtrl;
Anna Bridge 142:4eea097334d6 339
Anna Bridge 142:4eea097334d6 340 /** Input capture edge select. */
Anna Bridge 142:4eea097334d6 341 TIMER_Edge_TypeDef edge;
Anna Bridge 142:4eea097334d6 342
Anna Bridge 142:4eea097334d6 343 /**
Anna Bridge 142:4eea097334d6 344 * Peripheral reflex system trigger selection. Only applicable if @p prsInput
Anna Bridge 142:4eea097334d6 345 * is enabled.
Anna Bridge 142:4eea097334d6 346 */
Anna Bridge 142:4eea097334d6 347 TIMER_PRSSEL_TypeDef prsSel;
Anna Bridge 142:4eea097334d6 348
Anna Bridge 142:4eea097334d6 349 /** Counter underflow output action. */
Anna Bridge 142:4eea097334d6 350 TIMER_OutputAction_TypeDef cufoa;
Anna Bridge 142:4eea097334d6 351
Anna Bridge 142:4eea097334d6 352 /** Counter overflow output action. */
Anna Bridge 142:4eea097334d6 353 TIMER_OutputAction_TypeDef cofoa;
Anna Bridge 142:4eea097334d6 354
Anna Bridge 142:4eea097334d6 355 /** Counter match output action. */
Anna Bridge 142:4eea097334d6 356 TIMER_OutputAction_TypeDef cmoa;
Anna Bridge 142:4eea097334d6 357
Anna Bridge 142:4eea097334d6 358 /** Compare/capture channel mode. */
Anna Bridge 142:4eea097334d6 359 TIMER_CCMode_TypeDef mode;
Anna Bridge 142:4eea097334d6 360
Anna Bridge 142:4eea097334d6 361 /** Enable digital filter. */
Anna Bridge 142:4eea097334d6 362 bool filter;
Anna Bridge 142:4eea097334d6 363
Anna Bridge 142:4eea097334d6 364 /** Select TIMERnCCx (false) or PRS input (true). */
Anna Bridge 142:4eea097334d6 365 bool prsInput;
Anna Bridge 142:4eea097334d6 366
Anna Bridge 142:4eea097334d6 367 /**
Anna Bridge 142:4eea097334d6 368 * Compare output initial state. Only used in Output Compare and PWM mode.
Anna Bridge 142:4eea097334d6 369 * When true, the compare/PWM output is set high when the counter is
Anna Bridge 142:4eea097334d6 370 * disabled. When counting resumes, this value will represent the initial
Anna Bridge 142:4eea097334d6 371 * value for the compare/PWM output. If the bit is cleared, the output
Anna Bridge 142:4eea097334d6 372 * will be cleared when the counter is disabled.
Anna Bridge 142:4eea097334d6 373 */
Anna Bridge 142:4eea097334d6 374 bool coist;
Anna Bridge 142:4eea097334d6 375
Anna Bridge 142:4eea097334d6 376 /** Invert output from compare/capture channel. */
Anna Bridge 142:4eea097334d6 377 bool outInvert;
Anna Bridge 142:4eea097334d6 378 } TIMER_InitCC_TypeDef;
Anna Bridge 142:4eea097334d6 379
Anna Bridge 142:4eea097334d6 380 /** Default config for TIMER compare/capture init structure. */
Anna Bridge 142:4eea097334d6 381 #define TIMER_INITCC_DEFAULT \
Anna Bridge 142:4eea097334d6 382 { \
Anna Bridge 142:4eea097334d6 383 timerEventEveryEdge, /* Event on every capture. */ \
Anna Bridge 142:4eea097334d6 384 timerEdgeRising, /* Input capture edge on rising edge. */ \
Anna Bridge 142:4eea097334d6 385 timerPRSSELCh0, /* Not used by default, select PRS channel 0. */ \
Anna Bridge 142:4eea097334d6 386 timerOutputActionNone, /* No action on underflow. */ \
Anna Bridge 142:4eea097334d6 387 timerOutputActionNone, /* No action on overflow. */ \
Anna Bridge 142:4eea097334d6 388 timerOutputActionNone, /* No action on match. */ \
Anna Bridge 142:4eea097334d6 389 timerCCModeOff, /* Disable compare/capture channel. */ \
Anna Bridge 142:4eea097334d6 390 false, /* Disable filter. */ \
Anna Bridge 142:4eea097334d6 391 false, /* Select TIMERnCCx input. */ \
Anna Bridge 142:4eea097334d6 392 false, /* Clear output when counter disabled. */ \
Anna Bridge 142:4eea097334d6 393 false /* Do not invert output. */ \
Anna Bridge 142:4eea097334d6 394 }
Anna Bridge 142:4eea097334d6 395
Anna Bridge 142:4eea097334d6 396 #if defined(_TIMER_DTCTRL_MASK)
Anna Bridge 142:4eea097334d6 397 /** TIMER Dead Time Insertion (DTI) initialization structure. */
Anna Bridge 142:4eea097334d6 398 typedef struct
Anna Bridge 142:4eea097334d6 399 {
Anna Bridge 142:4eea097334d6 400 /** Enable DTI or leave it disabled until @ref TIMER_EnableDTI() is called */
Anna Bridge 142:4eea097334d6 401 bool enable;
Anna Bridge 142:4eea097334d6 402
Anna Bridge 142:4eea097334d6 403 /** DTI Output Polarity */
Anna Bridge 142:4eea097334d6 404 bool activeLowOut;
Anna Bridge 142:4eea097334d6 405
Anna Bridge 142:4eea097334d6 406 /** DTI Complementary Output Invert */
Anna Bridge 142:4eea097334d6 407 bool invertComplementaryOut;
Anna Bridge 142:4eea097334d6 408
Anna Bridge 142:4eea097334d6 409 /** Enable Automatic Start-up functionality (when debugger exits) */
Anna Bridge 142:4eea097334d6 410 bool autoRestart;
Anna Bridge 142:4eea097334d6 411
Anna Bridge 142:4eea097334d6 412 /** Enable/disable PRS as DTI input. */
Anna Bridge 142:4eea097334d6 413 bool enablePrsSource;
Anna Bridge 142:4eea097334d6 414
Anna Bridge 142:4eea097334d6 415 /** Select which PRS channel as DTI input. Only valid if @p enablePrsSource
Anna Bridge 142:4eea097334d6 416 is enabled. */
Anna Bridge 142:4eea097334d6 417 TIMER_PRSSEL_TypeDef prsSel;
Anna Bridge 142:4eea097334d6 418
Anna Bridge 142:4eea097334d6 419 /** DTI prescaling factor, if HFPER clock used. */
Anna Bridge 142:4eea097334d6 420 TIMER_Prescale_TypeDef prescale;
Anna Bridge 142:4eea097334d6 421
Anna Bridge 142:4eea097334d6 422 /** DTI Rise Time */
Anna Bridge 142:4eea097334d6 423 unsigned int riseTime;
Anna Bridge 142:4eea097334d6 424
Anna Bridge 142:4eea097334d6 425 /** DTI Fall Time */
Anna Bridge 142:4eea097334d6 426 unsigned int fallTime;
Anna Bridge 142:4eea097334d6 427
Anna Bridge 142:4eea097334d6 428 /** DTI outputs enable bit mask, consisting of one bit per DTI
Anna Bridge 142:4eea097334d6 429 output signal, i.e. CC0, CC1, CC2, CDTI0, CDTI1 and CDTI2.
Anna Bridge 142:4eea097334d6 430 This value should consist of one or more TIMER_DTOGEN_DTOGnnnEN flags
Anna Bridge 142:4eea097334d6 431 (defined in \<part_name\>_timer.h) OR'ed together. */
Anna Bridge 142:4eea097334d6 432 uint32_t outputsEnableMask;
Anna Bridge 142:4eea097334d6 433
Anna Bridge 142:4eea097334d6 434 /** Enable core lockup as a fault source. */
Anna Bridge 142:4eea097334d6 435 bool enableFaultSourceCoreLockup;
Anna Bridge 142:4eea097334d6 436
Anna Bridge 142:4eea097334d6 437 /** Enable debugger as a fault source. */
Anna Bridge 142:4eea097334d6 438 bool enableFaultSourceDebugger;
Anna Bridge 142:4eea097334d6 439
Anna Bridge 142:4eea097334d6 440 /** Enable PRS fault source 0 (@p faultSourcePrsSel0) */
Anna Bridge 142:4eea097334d6 441 bool enableFaultSourcePrsSel0;
Anna Bridge 142:4eea097334d6 442
Anna Bridge 142:4eea097334d6 443 /** Select which PRS signal to be PRS fault source 0. */
Anna Bridge 142:4eea097334d6 444 TIMER_PRSSEL_TypeDef faultSourcePrsSel0;
Anna Bridge 142:4eea097334d6 445
Anna Bridge 142:4eea097334d6 446 /** Enable PRS fault source 1 (@p faultSourcePrsSel1) */
Anna Bridge 142:4eea097334d6 447 bool enableFaultSourcePrsSel1;
Anna Bridge 142:4eea097334d6 448
Anna Bridge 142:4eea097334d6 449 /** Select which PRS signal to be PRS fault source 1. */
Anna Bridge 142:4eea097334d6 450 TIMER_PRSSEL_TypeDef faultSourcePrsSel1;
Anna Bridge 142:4eea097334d6 451
Anna Bridge 142:4eea097334d6 452 /** Fault Action */
Anna Bridge 142:4eea097334d6 453 TIMER_DtiFaultAction_TypeDef faultAction;
Anna Bridge 142:4eea097334d6 454
Anna Bridge 142:4eea097334d6 455 } TIMER_InitDTI_TypeDef;
Anna Bridge 142:4eea097334d6 456
Anna Bridge 142:4eea097334d6 457
Anna Bridge 142:4eea097334d6 458 /** Default config for TIMER DTI init structure. */
Anna Bridge 142:4eea097334d6 459 #define TIMER_INITDTI_DEFAULT \
Anna Bridge 142:4eea097334d6 460 { \
Anna Bridge 142:4eea097334d6 461 true, /* Enable the DTI. */ \
Anna Bridge 142:4eea097334d6 462 false, /* CC[0|1|2] outputs are active high. */ \
Anna Bridge 142:4eea097334d6 463 false, /* CDTI[0|1|2] outputs are not inverted. */ \
Anna Bridge 142:4eea097334d6 464 false, /* No auto restart when debugger exits. */ \
Anna Bridge 142:4eea097334d6 465 false, /* No PRS source selected. */ \
Anna Bridge 142:4eea097334d6 466 timerPRSSELCh0, /* Not used by default, select PRS channel 0. */ \
Anna Bridge 142:4eea097334d6 467 timerPrescale1, /* No prescaling. */ \
Anna Bridge 142:4eea097334d6 468 0, /* No rise time. */ \
Anna Bridge 142:4eea097334d6 469 0, /* No fall time. */ \
Anna Bridge 142:4eea097334d6 470 TIMER_DTOGEN_DTOGCC0EN|TIMER_DTOGEN_DTOGCDTI0EN, /* Enable CC0 and CDTI0 */\
Anna Bridge 142:4eea097334d6 471 true, /* Enable core lockup as fault source */ \
Anna Bridge 142:4eea097334d6 472 true, /* Enable debugger as fault source */ \
Anna Bridge 142:4eea097334d6 473 false, /* Disable PRS fault source 0 */ \
Anna Bridge 142:4eea097334d6 474 timerPRSSELCh0, /* Not used by default, select PRS channel 0. */ \
Anna Bridge 142:4eea097334d6 475 false, /* Disable PRS fault source 1 */ \
Anna Bridge 142:4eea097334d6 476 timerPRSSELCh0, /* Not used by default, select PRS channel 0. */ \
Anna Bridge 142:4eea097334d6 477 timerDtiFaultActionInactive, /* No fault action. */ \
Anna Bridge 142:4eea097334d6 478 }
Anna Bridge 142:4eea097334d6 479 #endif /* _TIMER_DTCTRL_MASK */
Anna Bridge 142:4eea097334d6 480
Anna Bridge 142:4eea097334d6 481
Anna Bridge 142:4eea097334d6 482 /*******************************************************************************
Anna Bridge 142:4eea097334d6 483 ***************************** PROTOTYPES **********************************
Anna Bridge 142:4eea097334d6 484 ******************************************************************************/
Anna Bridge 142:4eea097334d6 485
Anna Bridge 142:4eea097334d6 486
Anna Bridge 142:4eea097334d6 487 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 488 * @brief
Anna Bridge 142:4eea097334d6 489 * Validate the TIMER register block pointer
Anna Bridge 142:4eea097334d6 490 *
Anna Bridge 142:4eea097334d6 491 * @param[in] ref
Anna Bridge 142:4eea097334d6 492 * Pointer to TIMER peripheral register block.
Anna Bridge 142:4eea097334d6 493 *
Anna Bridge 142:4eea097334d6 494 * @return
Anna Bridge 142:4eea097334d6 495 * true if ref points to a valid timer, false otherwise.
Anna Bridge 142:4eea097334d6 496 ******************************************************************************/
Anna Bridge 142:4eea097334d6 497 __STATIC_INLINE bool TIMER_Valid(const TIMER_TypeDef *ref)
Anna Bridge 142:4eea097334d6 498 {
Anna Bridge 142:4eea097334d6 499 return (ref == TIMER0)
Anna Bridge 142:4eea097334d6 500 #if defined(TIMER1)
Anna Bridge 142:4eea097334d6 501 || (ref == TIMER1)
Anna Bridge 142:4eea097334d6 502 #endif
Anna Bridge 142:4eea097334d6 503 #if defined(TIMER2)
Anna Bridge 142:4eea097334d6 504 || (ref == TIMER2)
Anna Bridge 142:4eea097334d6 505 #endif
Anna Bridge 142:4eea097334d6 506 #if defined(TIMER3)
Anna Bridge 142:4eea097334d6 507 || (ref == TIMER3)
Anna Bridge 142:4eea097334d6 508 #endif
Anna Bridge 142:4eea097334d6 509 #if defined(WTIMER0)
Anna Bridge 142:4eea097334d6 510 || (ref == WTIMER0)
Anna Bridge 142:4eea097334d6 511 #endif
Anna Bridge 142:4eea097334d6 512 #if defined(WTIMER1)
Anna Bridge 142:4eea097334d6 513 || (ref == WTIMER1)
Anna Bridge 142:4eea097334d6 514 #endif
Anna Bridge 142:4eea097334d6 515 ;
Anna Bridge 142:4eea097334d6 516 }
Anna Bridge 142:4eea097334d6 517
Anna Bridge 142:4eea097334d6 518 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 519 * @brief
Anna Bridge 142:4eea097334d6 520 * Get the Max count of the timer
Anna Bridge 142:4eea097334d6 521 *
Anna Bridge 142:4eea097334d6 522 * @param[in] timer
Anna Bridge 142:4eea097334d6 523 * Pointer to TIMER peripheral register block.
Anna Bridge 142:4eea097334d6 524 *
Anna Bridge 142:4eea097334d6 525 * @return
Anna Bridge 142:4eea097334d6 526 * The max count value of the timer. This is 0xFFFF for 16 bit timers
Anna Bridge 142:4eea097334d6 527 * and 0xFFFFFFFF for 32 bit timers.
Anna Bridge 142:4eea097334d6 528 ******************************************************************************/
Anna Bridge 142:4eea097334d6 529 __STATIC_INLINE uint32_t TIMER_MaxCount(const TIMER_TypeDef *ref)
Anna Bridge 142:4eea097334d6 530 {
Anna Bridge 142:4eea097334d6 531 #if defined(WTIMER_PRESENT)
Anna Bridge 142:4eea097334d6 532 if ((ref == WTIMER0)
Anna Bridge 142:4eea097334d6 533 #if defined(WTIMER1)
Anna Bridge 142:4eea097334d6 534 || (ref == WTIMER1)
Anna Bridge 142:4eea097334d6 535 #endif
Anna Bridge 142:4eea097334d6 536 )
Anna Bridge 142:4eea097334d6 537 {
Anna Bridge 142:4eea097334d6 538 return 0xFFFFFFFFUL;
Anna Bridge 142:4eea097334d6 539 }
Anna Bridge 142:4eea097334d6 540 #else
Anna Bridge 142:4eea097334d6 541 (void) ref;
Anna Bridge 142:4eea097334d6 542 #endif
Anna Bridge 142:4eea097334d6 543 return 0xFFFFUL;
Anna Bridge 142:4eea097334d6 544 }
Anna Bridge 142:4eea097334d6 545
Anna Bridge 142:4eea097334d6 546 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 547 * @brief
Anna Bridge 142:4eea097334d6 548 * Get capture value for compare/capture channel when operating in capture
Anna Bridge 142:4eea097334d6 549 * mode.
Anna Bridge 142:4eea097334d6 550 *
Anna Bridge 142:4eea097334d6 551 * @param[in] timer
Anna Bridge 142:4eea097334d6 552 * Pointer to TIMER peripheral register block.
Anna Bridge 142:4eea097334d6 553 *
Anna Bridge 142:4eea097334d6 554 * @param[in] ch
Anna Bridge 142:4eea097334d6 555 * Compare/capture channel to access.
Anna Bridge 142:4eea097334d6 556 *
Anna Bridge 142:4eea097334d6 557 * @return
Anna Bridge 142:4eea097334d6 558 * Current capture value.
Anna Bridge 142:4eea097334d6 559 ******************************************************************************/
Anna Bridge 142:4eea097334d6 560 __STATIC_INLINE uint32_t TIMER_CaptureGet(TIMER_TypeDef *timer, unsigned int ch)
Anna Bridge 142:4eea097334d6 561 {
Anna Bridge 142:4eea097334d6 562 return timer->CC[ch].CCV;
Anna Bridge 142:4eea097334d6 563 }
Anna Bridge 142:4eea097334d6 564
Anna Bridge 142:4eea097334d6 565
Anna Bridge 142:4eea097334d6 566 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 567 * @brief
Anna Bridge 142:4eea097334d6 568 * Set compare value buffer for compare/capture channel when operating in
Anna Bridge 142:4eea097334d6 569 * compare or PWM mode.
Anna Bridge 142:4eea097334d6 570 *
Anna Bridge 142:4eea097334d6 571 * @details
Anna Bridge 142:4eea097334d6 572 * The compare value buffer holds the value which will be written to
Anna Bridge 142:4eea097334d6 573 * TIMERn_CCx_CCV on an update event if the buffer has been updated since
Anna Bridge 142:4eea097334d6 574 * the last event.
Anna Bridge 142:4eea097334d6 575 *
Anna Bridge 142:4eea097334d6 576 * @param[in] timer
Anna Bridge 142:4eea097334d6 577 * Pointer to TIMER peripheral register block.
Anna Bridge 142:4eea097334d6 578 *
Anna Bridge 142:4eea097334d6 579 * @param[in] ch
Anna Bridge 142:4eea097334d6 580 * Compare/capture channel to access.
Anna Bridge 142:4eea097334d6 581 *
Anna Bridge 142:4eea097334d6 582 * @param[in] val
Anna Bridge 142:4eea097334d6 583 * Value to set in compare value buffer register.
Anna Bridge 142:4eea097334d6 584 ******************************************************************************/
Anna Bridge 142:4eea097334d6 585 __STATIC_INLINE void TIMER_CompareBufSet(TIMER_TypeDef *timer,
Anna Bridge 142:4eea097334d6 586 unsigned int ch,
Anna Bridge 142:4eea097334d6 587 uint32_t val)
Anna Bridge 142:4eea097334d6 588 {
Anna Bridge 142:4eea097334d6 589 EFM_ASSERT(val <= TIMER_MaxCount(timer));
Anna Bridge 142:4eea097334d6 590 timer->CC[ch].CCVB = val;
Anna Bridge 142:4eea097334d6 591 }
Anna Bridge 142:4eea097334d6 592
Anna Bridge 142:4eea097334d6 593
Anna Bridge 142:4eea097334d6 594 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 595 * @brief
Anna Bridge 142:4eea097334d6 596 * Set compare value for compare/capture channel when operating in compare
Anna Bridge 142:4eea097334d6 597 * or PWM mode.
Anna Bridge 142:4eea097334d6 598 *
Anna Bridge 142:4eea097334d6 599 * @param[in] timer
Anna Bridge 142:4eea097334d6 600 * Pointer to TIMER peripheral register block.
Anna Bridge 142:4eea097334d6 601 *
Anna Bridge 142:4eea097334d6 602 * @param[in] ch
Anna Bridge 142:4eea097334d6 603 * Compare/capture channel to access.
Anna Bridge 142:4eea097334d6 604 *
Anna Bridge 142:4eea097334d6 605 * @param[in] val
Anna Bridge 142:4eea097334d6 606 * Value to set in compare value register.
Anna Bridge 142:4eea097334d6 607 ******************************************************************************/
Anna Bridge 142:4eea097334d6 608 __STATIC_INLINE void TIMER_CompareSet(TIMER_TypeDef *timer,
Anna Bridge 142:4eea097334d6 609 unsigned int ch,
Anna Bridge 142:4eea097334d6 610 uint32_t val)
Anna Bridge 142:4eea097334d6 611 {
Anna Bridge 142:4eea097334d6 612 EFM_ASSERT(val <= TIMER_MaxCount(timer));
Anna Bridge 142:4eea097334d6 613 timer->CC[ch].CCV = val;
Anna Bridge 142:4eea097334d6 614 }
Anna Bridge 142:4eea097334d6 615
Anna Bridge 142:4eea097334d6 616
Anna Bridge 142:4eea097334d6 617 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 618 * @brief
Anna Bridge 142:4eea097334d6 619 * Get TIMER counter value.
Anna Bridge 142:4eea097334d6 620 *
Anna Bridge 142:4eea097334d6 621 * @param[in] timer
Anna Bridge 142:4eea097334d6 622 * Pointer to TIMER peripheral register block.
Anna Bridge 142:4eea097334d6 623 *
Anna Bridge 142:4eea097334d6 624 * @return
Anna Bridge 142:4eea097334d6 625 * Current TIMER counter value.
Anna Bridge 142:4eea097334d6 626 ******************************************************************************/
Anna Bridge 142:4eea097334d6 627 __STATIC_INLINE uint32_t TIMER_CounterGet(TIMER_TypeDef *timer)
Anna Bridge 142:4eea097334d6 628 {
Anna Bridge 142:4eea097334d6 629 return timer->CNT;
Anna Bridge 142:4eea097334d6 630 }
Anna Bridge 142:4eea097334d6 631
Anna Bridge 142:4eea097334d6 632
Anna Bridge 142:4eea097334d6 633 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 634 * @brief
Anna Bridge 142:4eea097334d6 635 * Set TIMER counter value.
Anna Bridge 142:4eea097334d6 636 *
Anna Bridge 142:4eea097334d6 637 * @param[in] timer
Anna Bridge 142:4eea097334d6 638 * Pointer to TIMER peripheral register block.
Anna Bridge 142:4eea097334d6 639 *
Anna Bridge 142:4eea097334d6 640 * @param[in] val
Anna Bridge 142:4eea097334d6 641 * Value to set counter to.
Anna Bridge 142:4eea097334d6 642 ******************************************************************************/
Anna Bridge 142:4eea097334d6 643 __STATIC_INLINE void TIMER_CounterSet(TIMER_TypeDef *timer, uint32_t val)
Anna Bridge 142:4eea097334d6 644 {
Anna Bridge 142:4eea097334d6 645 EFM_ASSERT(val <= TIMER_MaxCount(timer));
Anna Bridge 142:4eea097334d6 646 timer->CNT = val;
Anna Bridge 142:4eea097334d6 647 }
Anna Bridge 142:4eea097334d6 648
Anna Bridge 142:4eea097334d6 649
Anna Bridge 142:4eea097334d6 650 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 651 * @brief
Anna Bridge 142:4eea097334d6 652 * Start/stop TIMER.
Anna Bridge 142:4eea097334d6 653 *
Anna Bridge 142:4eea097334d6 654 * @param[in] timer
Anna Bridge 142:4eea097334d6 655 * Pointer to TIMER peripheral register block.
Anna Bridge 142:4eea097334d6 656 *
Anna Bridge 142:4eea097334d6 657 * @param[in] enable
Anna Bridge 142:4eea097334d6 658 * true to enable counting, false to disable.
Anna Bridge 142:4eea097334d6 659 ******************************************************************************/
Anna Bridge 142:4eea097334d6 660 __STATIC_INLINE void TIMER_Enable(TIMER_TypeDef *timer, bool enable)
Anna Bridge 142:4eea097334d6 661 {
Anna Bridge 142:4eea097334d6 662 EFM_ASSERT(TIMER_REF_VALID(timer));
Anna Bridge 142:4eea097334d6 663
Anna Bridge 142:4eea097334d6 664 if (enable)
Anna Bridge 142:4eea097334d6 665 {
Anna Bridge 142:4eea097334d6 666 timer->CMD = TIMER_CMD_START;
Anna Bridge 142:4eea097334d6 667 }
Anna Bridge 142:4eea097334d6 668 else
Anna Bridge 142:4eea097334d6 669 {
Anna Bridge 142:4eea097334d6 670 timer->CMD = TIMER_CMD_STOP;
Anna Bridge 142:4eea097334d6 671 }
Anna Bridge 142:4eea097334d6 672 }
Anna Bridge 142:4eea097334d6 673
Anna Bridge 142:4eea097334d6 674
Anna Bridge 142:4eea097334d6 675 void TIMER_Init(TIMER_TypeDef *timer, const TIMER_Init_TypeDef *init);
Anna Bridge 142:4eea097334d6 676 void TIMER_InitCC(TIMER_TypeDef *timer,
Anna Bridge 142:4eea097334d6 677 unsigned int ch,
Anna Bridge 142:4eea097334d6 678 const TIMER_InitCC_TypeDef *init);
Anna Bridge 142:4eea097334d6 679
Anna Bridge 142:4eea097334d6 680 #if defined(_TIMER_DTCTRL_MASK)
Anna Bridge 142:4eea097334d6 681 void TIMER_InitDTI(TIMER_TypeDef *timer, const TIMER_InitDTI_TypeDef *init);
Anna Bridge 142:4eea097334d6 682
Anna Bridge 142:4eea097334d6 683 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 684 * @brief
Anna Bridge 142:4eea097334d6 685 * Enable or disable DTI unit.
Anna Bridge 142:4eea097334d6 686 *
Anna Bridge 142:4eea097334d6 687 * @param[in] timer
Anna Bridge 142:4eea097334d6 688 * Pointer to TIMER peripheral register block.
Anna Bridge 142:4eea097334d6 689 *
Anna Bridge 142:4eea097334d6 690 * @param[in] enable
Anna Bridge 142:4eea097334d6 691 * true to enable DTI unit, false to disable.
Anna Bridge 142:4eea097334d6 692 ******************************************************************************/
Anna Bridge 142:4eea097334d6 693 __STATIC_INLINE void TIMER_EnableDTI(TIMER_TypeDef *timer, bool enable)
Anna Bridge 142:4eea097334d6 694 {
Anna Bridge 142:4eea097334d6 695 EFM_ASSERT(TIMER0 == timer);
Anna Bridge 142:4eea097334d6 696
Anna Bridge 142:4eea097334d6 697 if (enable)
Anna Bridge 142:4eea097334d6 698 {
Anna Bridge 142:4eea097334d6 699 timer->DTCTRL |= TIMER_DTCTRL_DTEN;
Anna Bridge 142:4eea097334d6 700 }
Anna Bridge 142:4eea097334d6 701 else
Anna Bridge 142:4eea097334d6 702 {
Anna Bridge 142:4eea097334d6 703 timer->DTCTRL &= ~TIMER_DTCTRL_DTEN;
Anna Bridge 142:4eea097334d6 704 }
Anna Bridge 142:4eea097334d6 705 }
Anna Bridge 142:4eea097334d6 706
Anna Bridge 142:4eea097334d6 707
Anna Bridge 142:4eea097334d6 708 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 709 * @brief
Anna Bridge 142:4eea097334d6 710 * Get DTI fault source flags status.
Anna Bridge 142:4eea097334d6 711 *
Anna Bridge 142:4eea097334d6 712 * @note
Anna Bridge 142:4eea097334d6 713 * The event bits are not cleared by the use of this function.
Anna Bridge 142:4eea097334d6 714 *
Anna Bridge 142:4eea097334d6 715 * @param[in] timer
Anna Bridge 142:4eea097334d6 716 * Pointer to TIMER peripheral register block.
Anna Bridge 142:4eea097334d6 717 *
Anna Bridge 142:4eea097334d6 718 * @return
Anna Bridge 142:4eea097334d6 719 * Status of the DTI fault source flags. Returns one or more valid
Anna Bridge 142:4eea097334d6 720 * DTI fault source flags (TIMER_DTFAULT_nnn) OR'ed together.
Anna Bridge 142:4eea097334d6 721 ******************************************************************************/
Anna Bridge 142:4eea097334d6 722 __STATIC_INLINE uint32_t TIMER_GetDTIFault(TIMER_TypeDef *timer)
Anna Bridge 142:4eea097334d6 723 {
Anna Bridge 142:4eea097334d6 724 EFM_ASSERT(TIMER0 == timer);
Anna Bridge 142:4eea097334d6 725 return timer->DTFAULT;
Anna Bridge 142:4eea097334d6 726 }
Anna Bridge 142:4eea097334d6 727
Anna Bridge 142:4eea097334d6 728
Anna Bridge 142:4eea097334d6 729 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 730 * @brief
Anna Bridge 142:4eea097334d6 731 * Clear DTI fault source flags.
Anna Bridge 142:4eea097334d6 732 *
Anna Bridge 142:4eea097334d6 733 * @param[in] timer
Anna Bridge 142:4eea097334d6 734 * Pointer to TIMER peripheral register block.
Anna Bridge 142:4eea097334d6 735 *
Anna Bridge 142:4eea097334d6 736 * @param[in] flags
Anna Bridge 142:4eea097334d6 737 * DTI fault source(s) to clear. Use one or more valid DTI fault
Anna Bridge 142:4eea097334d6 738 * source flags (TIMER_DTFAULT_nnn) OR'ed together.
Anna Bridge 142:4eea097334d6 739 ******************************************************************************/
Anna Bridge 142:4eea097334d6 740 __STATIC_INLINE void TIMER_ClearDTIFault(TIMER_TypeDef *timer, uint32_t flags)
Anna Bridge 142:4eea097334d6 741
Anna Bridge 142:4eea097334d6 742 {
Anna Bridge 142:4eea097334d6 743 EFM_ASSERT(TIMER0 == timer);
Anna Bridge 142:4eea097334d6 744 timer->DTFAULTC = flags;
Anna Bridge 142:4eea097334d6 745 }
Anna Bridge 142:4eea097334d6 746 #endif /* _TIMER_DTCTRL_MASK */
Anna Bridge 142:4eea097334d6 747
Anna Bridge 142:4eea097334d6 748
Anna Bridge 142:4eea097334d6 749 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 750 * @brief
Anna Bridge 142:4eea097334d6 751 * Clear one or more pending TIMER interrupts.
Anna Bridge 142:4eea097334d6 752 *
Anna Bridge 142:4eea097334d6 753 * @param[in] timer
Anna Bridge 142:4eea097334d6 754 * Pointer to TIMER peripheral register block.
Anna Bridge 142:4eea097334d6 755 *
Anna Bridge 142:4eea097334d6 756 * @param[in] flags
Anna Bridge 142:4eea097334d6 757 * Pending TIMER interrupt source(s) to clear. Use one or more valid
Anna Bridge 142:4eea097334d6 758 * interrupt flags for the TIMER module (TIMER_IF_nnn) OR'ed together.
Anna Bridge 142:4eea097334d6 759 ******************************************************************************/
Anna Bridge 142:4eea097334d6 760 __STATIC_INLINE void TIMER_IntClear(TIMER_TypeDef *timer, uint32_t flags)
Anna Bridge 142:4eea097334d6 761 {
Anna Bridge 142:4eea097334d6 762 timer->IFC = flags;
Anna Bridge 142:4eea097334d6 763 }
Anna Bridge 142:4eea097334d6 764
Anna Bridge 142:4eea097334d6 765
Anna Bridge 142:4eea097334d6 766 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 767 * @brief
Anna Bridge 142:4eea097334d6 768 * Disable one or more TIMER interrupts.
Anna Bridge 142:4eea097334d6 769 *
Anna Bridge 142:4eea097334d6 770 * @param[in] timer
Anna Bridge 142:4eea097334d6 771 * Pointer to TIMER peripheral register block.
Anna Bridge 142:4eea097334d6 772 *
Anna Bridge 142:4eea097334d6 773 * @param[in] flags
Anna Bridge 142:4eea097334d6 774 * TIMER interrupt source(s) to disable. Use one or more valid
Anna Bridge 142:4eea097334d6 775 * interrupt flags for the TIMER module (TIMER_IF_nnn) OR'ed together.
Anna Bridge 142:4eea097334d6 776 ******************************************************************************/
Anna Bridge 142:4eea097334d6 777 __STATIC_INLINE void TIMER_IntDisable(TIMER_TypeDef *timer, uint32_t flags)
Anna Bridge 142:4eea097334d6 778 {
Anna Bridge 142:4eea097334d6 779 timer->IEN &= ~flags;
Anna Bridge 142:4eea097334d6 780 }
Anna Bridge 142:4eea097334d6 781
Anna Bridge 142:4eea097334d6 782
Anna Bridge 142:4eea097334d6 783 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 784 * @brief
Anna Bridge 142:4eea097334d6 785 * Enable one or more TIMER interrupts.
Anna Bridge 142:4eea097334d6 786 *
Anna Bridge 142:4eea097334d6 787 * @note
Anna Bridge 142:4eea097334d6 788 * Depending on the use, a pending interrupt may already be set prior to
Anna Bridge 142:4eea097334d6 789 * enabling the interrupt. Consider using TIMER_IntClear() prior to enabling
Anna Bridge 142:4eea097334d6 790 * if such a pending interrupt should be ignored.
Anna Bridge 142:4eea097334d6 791 *
Anna Bridge 142:4eea097334d6 792 * @param[in] timer
Anna Bridge 142:4eea097334d6 793 * Pointer to TIMER peripheral register block.
Anna Bridge 142:4eea097334d6 794 *
Anna Bridge 142:4eea097334d6 795 * @param[in] flags
Anna Bridge 142:4eea097334d6 796 * TIMER interrupt source(s) to enable. Use one or more valid
Anna Bridge 142:4eea097334d6 797 * interrupt flags for the TIMER module (TIMER_IF_nnn) OR'ed together.
Anna Bridge 142:4eea097334d6 798 ******************************************************************************/
Anna Bridge 142:4eea097334d6 799 __STATIC_INLINE void TIMER_IntEnable(TIMER_TypeDef *timer, uint32_t flags)
Anna Bridge 142:4eea097334d6 800 {
Anna Bridge 142:4eea097334d6 801 timer->IEN |= flags;
Anna Bridge 142:4eea097334d6 802 }
Anna Bridge 142:4eea097334d6 803
Anna Bridge 142:4eea097334d6 804
Anna Bridge 142:4eea097334d6 805 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 806 * @brief
Anna Bridge 142:4eea097334d6 807 * Get pending TIMER interrupt flags.
Anna Bridge 142:4eea097334d6 808 *
Anna Bridge 142:4eea097334d6 809 * @note
Anna Bridge 142:4eea097334d6 810 * The event bits are not cleared by the use of this function.
Anna Bridge 142:4eea097334d6 811 *
Anna Bridge 142:4eea097334d6 812 * @param[in] timer
Anna Bridge 142:4eea097334d6 813 * Pointer to TIMER peripheral register block.
Anna Bridge 142:4eea097334d6 814 *
Anna Bridge 142:4eea097334d6 815 * @return
Anna Bridge 142:4eea097334d6 816 * TIMER interrupt source(s) pending. Returns one or more valid
Anna Bridge 142:4eea097334d6 817 * interrupt flags for the TIMER module (TIMER_IF_nnn) OR'ed together.
Anna Bridge 142:4eea097334d6 818 ******************************************************************************/
Anna Bridge 142:4eea097334d6 819 __STATIC_INLINE uint32_t TIMER_IntGet(TIMER_TypeDef *timer)
Anna Bridge 142:4eea097334d6 820 {
Anna Bridge 142:4eea097334d6 821 return timer->IF;
Anna Bridge 142:4eea097334d6 822 }
Anna Bridge 142:4eea097334d6 823
Anna Bridge 142:4eea097334d6 824
Anna Bridge 142:4eea097334d6 825 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 826 * @brief
Anna Bridge 142:4eea097334d6 827 * Get enabled and pending TIMER interrupt flags.
Anna Bridge 142:4eea097334d6 828 * Useful for handling more interrupt sources in the same interrupt handler.
Anna Bridge 142:4eea097334d6 829 *
Anna Bridge 142:4eea097334d6 830 * @param[in] timer
Anna Bridge 142:4eea097334d6 831 * Pointer to TIMER peripheral register block.
Anna Bridge 142:4eea097334d6 832 *
Anna Bridge 142:4eea097334d6 833 * @note
Anna Bridge 142:4eea097334d6 834 * Interrupt flags are not cleared by the use of this function.
Anna Bridge 142:4eea097334d6 835 *
Anna Bridge 142:4eea097334d6 836 * @return
Anna Bridge 142:4eea097334d6 837 * Pending and enabled TIMER interrupt sources.
Anna Bridge 142:4eea097334d6 838 * The return value is the bitwise AND combination of
Anna Bridge 142:4eea097334d6 839 * - the OR combination of enabled interrupt sources in TIMERx_IEN_nnn
Anna Bridge 142:4eea097334d6 840 * register (TIMERx_IEN_nnn) and
Anna Bridge 142:4eea097334d6 841 * - the OR combination of valid interrupt flags of the TIMER module
Anna Bridge 142:4eea097334d6 842 * (TIMERx_IF_nnn).
Anna Bridge 142:4eea097334d6 843 ******************************************************************************/
Anna Bridge 142:4eea097334d6 844 __STATIC_INLINE uint32_t TIMER_IntGetEnabled(TIMER_TypeDef *timer)
Anna Bridge 142:4eea097334d6 845 {
Anna Bridge 142:4eea097334d6 846 uint32_t ien;
Anna Bridge 142:4eea097334d6 847
Anna Bridge 142:4eea097334d6 848 /* Store TIMER->IEN in temporary variable in order to define explicit order
Anna Bridge 142:4eea097334d6 849 * of volatile accesses. */
Anna Bridge 142:4eea097334d6 850 ien = timer->IEN;
Anna Bridge 142:4eea097334d6 851
Anna Bridge 142:4eea097334d6 852 /* Bitwise AND of pending and enabled interrupts */
Anna Bridge 142:4eea097334d6 853 return timer->IF & ien;
Anna Bridge 142:4eea097334d6 854 }
Anna Bridge 142:4eea097334d6 855
Anna Bridge 142:4eea097334d6 856
Anna Bridge 142:4eea097334d6 857 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 858 * @brief
Anna Bridge 142:4eea097334d6 859 * Set one or more pending TIMER interrupts from SW.
Anna Bridge 142:4eea097334d6 860 *
Anna Bridge 142:4eea097334d6 861 * @param[in] timer
Anna Bridge 142:4eea097334d6 862 * Pointer to TIMER peripheral register block.
Anna Bridge 142:4eea097334d6 863 *
Anna Bridge 142:4eea097334d6 864 * @param[in] flags
Anna Bridge 142:4eea097334d6 865 * TIMER interrupt source(s) to set to pending. Use one or more valid
Anna Bridge 142:4eea097334d6 866 * interrupt flags for the TIMER module (TIMER_IF_nnn) OR'ed together.
Anna Bridge 142:4eea097334d6 867 ******************************************************************************/
Anna Bridge 142:4eea097334d6 868 __STATIC_INLINE void TIMER_IntSet(TIMER_TypeDef *timer, uint32_t flags)
Anna Bridge 142:4eea097334d6 869 {
Anna Bridge 142:4eea097334d6 870 timer->IFS = flags;
Anna Bridge 142:4eea097334d6 871 }
Anna Bridge 142:4eea097334d6 872
Anna Bridge 142:4eea097334d6 873 #if defined(_TIMER_DTLOCK_LOCKKEY_LOCK)
Anna Bridge 142:4eea097334d6 874 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 875 * @brief
Anna Bridge 142:4eea097334d6 876 * Lock some of the TIMER registers in order to protect them from being
Anna Bridge 142:4eea097334d6 877 * modified.
Anna Bridge 142:4eea097334d6 878 *
Anna Bridge 142:4eea097334d6 879 * @details
Anna Bridge 142:4eea097334d6 880 * Please refer to the reference manual for TIMER registers that will be
Anna Bridge 142:4eea097334d6 881 * locked.
Anna Bridge 142:4eea097334d6 882 *
Anna Bridge 142:4eea097334d6 883 * @note
Anna Bridge 142:4eea097334d6 884 * If locking the TIMER registers, they must be unlocked prior to using any
Anna Bridge 142:4eea097334d6 885 * TIMER API functions modifying TIMER registers protected by the lock.
Anna Bridge 142:4eea097334d6 886 *
Anna Bridge 142:4eea097334d6 887 * @param[in] timer
Anna Bridge 142:4eea097334d6 888 * Pointer to TIMER peripheral register block.
Anna Bridge 142:4eea097334d6 889 ******************************************************************************/
Anna Bridge 142:4eea097334d6 890 __STATIC_INLINE void TIMER_Lock(TIMER_TypeDef *timer)
Anna Bridge 142:4eea097334d6 891 {
Anna Bridge 142:4eea097334d6 892 EFM_ASSERT(TIMER0 == timer);
Anna Bridge 142:4eea097334d6 893
Anna Bridge 142:4eea097334d6 894 timer->DTLOCK = TIMER_DTLOCK_LOCKKEY_LOCK;
Anna Bridge 142:4eea097334d6 895 }
Anna Bridge 142:4eea097334d6 896 #endif
Anna Bridge 142:4eea097334d6 897
Anna Bridge 142:4eea097334d6 898 void TIMER_Reset(TIMER_TypeDef *timer);
Anna Bridge 142:4eea097334d6 899
Anna Bridge 142:4eea097334d6 900 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 901 * @brief
Anna Bridge 142:4eea097334d6 902 * Set top value buffer for timer.
Anna Bridge 142:4eea097334d6 903 *
Anna Bridge 142:4eea097334d6 904 * @details
Anna Bridge 142:4eea097334d6 905 * When the top value buffer register is updated, the value is loaded into
Anna Bridge 142:4eea097334d6 906 * the top value register at the next wrap around. This feature is useful
Anna Bridge 142:4eea097334d6 907 * in order to update the top value safely when the timer is running.
Anna Bridge 142:4eea097334d6 908 *
Anna Bridge 142:4eea097334d6 909 * @param[in] timer
Anna Bridge 142:4eea097334d6 910 * Pointer to TIMER peripheral register block.
Anna Bridge 142:4eea097334d6 911 *
Anna Bridge 142:4eea097334d6 912 * @param[in] val
Anna Bridge 142:4eea097334d6 913 * Value to set in top value buffer register.
Anna Bridge 142:4eea097334d6 914 ******************************************************************************/
Anna Bridge 142:4eea097334d6 915 __STATIC_INLINE void TIMER_TopBufSet(TIMER_TypeDef *timer, uint32_t val)
Anna Bridge 142:4eea097334d6 916 {
Anna Bridge 142:4eea097334d6 917 EFM_ASSERT(val <= TIMER_MaxCount(timer));
Anna Bridge 142:4eea097334d6 918 timer->TOPB = val;
Anna Bridge 142:4eea097334d6 919 }
Anna Bridge 142:4eea097334d6 920
Anna Bridge 142:4eea097334d6 921
Anna Bridge 142:4eea097334d6 922 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 923 * @brief
Anna Bridge 142:4eea097334d6 924 * Get top value setting for timer.
Anna Bridge 142:4eea097334d6 925 *
Anna Bridge 142:4eea097334d6 926 * @param[in] timer
Anna Bridge 142:4eea097334d6 927 * Pointer to TIMER peripheral register block.
Anna Bridge 142:4eea097334d6 928 *
Anna Bridge 142:4eea097334d6 929 * @return
Anna Bridge 142:4eea097334d6 930 * Current top value.
Anna Bridge 142:4eea097334d6 931 ******************************************************************************/
Anna Bridge 142:4eea097334d6 932 __STATIC_INLINE uint32_t TIMER_TopGet(TIMER_TypeDef *timer)
Anna Bridge 142:4eea097334d6 933 {
Anna Bridge 142:4eea097334d6 934 return timer->TOP;
Anna Bridge 142:4eea097334d6 935 }
Anna Bridge 142:4eea097334d6 936
Anna Bridge 142:4eea097334d6 937
Anna Bridge 142:4eea097334d6 938 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 939 * @brief
Anna Bridge 142:4eea097334d6 940 * Set top value for timer.
Anna Bridge 142:4eea097334d6 941 *
Anna Bridge 142:4eea097334d6 942 * @param[in] timer
Anna Bridge 142:4eea097334d6 943 * Pointer to TIMER peripheral register block.
Anna Bridge 142:4eea097334d6 944 *
Anna Bridge 142:4eea097334d6 945 * @param[in] val
Anna Bridge 142:4eea097334d6 946 * Value to set in top value register.
Anna Bridge 142:4eea097334d6 947 ******************************************************************************/
Anna Bridge 142:4eea097334d6 948 __STATIC_INLINE void TIMER_TopSet(TIMER_TypeDef *timer, uint32_t val)
Anna Bridge 142:4eea097334d6 949 {
Anna Bridge 142:4eea097334d6 950 EFM_ASSERT(val <= TIMER_MaxCount(timer));
Anna Bridge 142:4eea097334d6 951 timer->TOP = val;
Anna Bridge 142:4eea097334d6 952 }
Anna Bridge 142:4eea097334d6 953
Anna Bridge 142:4eea097334d6 954
Anna Bridge 142:4eea097334d6 955 #if defined(TIMER_DTLOCK_LOCKKEY_UNLOCK)
Anna Bridge 142:4eea097334d6 956 /***************************************************************************//**
Anna Bridge 142:4eea097334d6 957 * @brief
Anna Bridge 142:4eea097334d6 958 * Unlock the TIMER so that writing to locked registers again is possible.
Anna Bridge 142:4eea097334d6 959 *
Anna Bridge 142:4eea097334d6 960 * @param[in] timer
Anna Bridge 142:4eea097334d6 961 * Pointer to TIMER peripheral register block.
Anna Bridge 142:4eea097334d6 962 ******************************************************************************/
Anna Bridge 142:4eea097334d6 963 __STATIC_INLINE void TIMER_Unlock(TIMER_TypeDef *timer)
Anna Bridge 142:4eea097334d6 964 {
Anna Bridge 142:4eea097334d6 965 EFM_ASSERT(TIMER0 == timer);
Anna Bridge 142:4eea097334d6 966
Anna Bridge 142:4eea097334d6 967 timer->DTLOCK = TIMER_DTLOCK_LOCKKEY_UNLOCK;
Anna Bridge 142:4eea097334d6 968 }
Anna Bridge 142:4eea097334d6 969 #endif
Anna Bridge 142:4eea097334d6 970
Anna Bridge 142:4eea097334d6 971 /** @} (end addtogroup TIMER) */
Anna Bridge 142:4eea097334d6 972 /** @} (end addtogroup emlib) */
Anna Bridge 142:4eea097334d6 973
Anna Bridge 142:4eea097334d6 974 #ifdef __cplusplus
Anna Bridge 142:4eea097334d6 975 }
Anna Bridge 142:4eea097334d6 976 #endif
Anna Bridge 142:4eea097334d6 977
Anna Bridge 142:4eea097334d6 978 #endif /* defined(TIMER_COUNT) && (TIMER_COUNT > 0) */
Anna Bridge 142:4eea097334d6 979 #endif /* EM_TIMER_H */