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