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.
TARGET_TB_SENSE_12/TARGET_Silicon_Labs/TARGET_EFM32/emlib/inc/em_timer.h@142:4eea097334d6, 2017-05-10 (annotated)
- 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?
User | Revision | Line number | New 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 */ |