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

Dependents:   hello SerialTestv11 SerialTestv12 Sierpinski ... more

mbed 2

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

Committer:
AnnaBridge
Date:
Wed Feb 20 20:53:29 2019 +0000
Revision:
172:65be27845400
Parent:
171:3a7713b1edbc
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 156:ff21514d8981 1 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 2 * @file em_pcnt.h
AnnaBridge 156:ff21514d8981 3 * @brief Pulse Counter (PCNT) peripheral API
Anna Bridge 160:5571c4ff569f 4 * @version 5.3.3
AnnaBridge 156:ff21514d8981 5 *******************************************************************************
Anna Bridge 160:5571c4ff569f 6 * # License
AnnaBridge 156:ff21514d8981 7 * <b>Copyright 2016 Silicon Laboratories, Inc. http://www.silabs.com</b>
AnnaBridge 156:ff21514d8981 8 *******************************************************************************
AnnaBridge 156:ff21514d8981 9 *
AnnaBridge 156:ff21514d8981 10 * Permission is granted to anyone to use this software for any purpose,
AnnaBridge 156:ff21514d8981 11 * including commercial applications, and to alter it and redistribute it
AnnaBridge 156:ff21514d8981 12 * freely, subject to the following restrictions:
AnnaBridge 156:ff21514d8981 13 *
AnnaBridge 156:ff21514d8981 14 * 1. The origin of this software must not be misrepresented; you must not
AnnaBridge 156:ff21514d8981 15 * claim that you wrote the original software.
AnnaBridge 156:ff21514d8981 16 * 2. Altered source versions must be plainly marked as such, and must not be
AnnaBridge 156:ff21514d8981 17 * misrepresented as being the original software.
AnnaBridge 156:ff21514d8981 18 * 3. This notice may not be removed or altered from any source distribution.
AnnaBridge 156:ff21514d8981 19 *
AnnaBridge 156:ff21514d8981 20 * DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Silicon Labs has no
AnnaBridge 156:ff21514d8981 21 * obligation to support this Software. Silicon Labs is providing the
AnnaBridge 156:ff21514d8981 22 * Software "AS IS", with no express or implied warranties of any kind,
AnnaBridge 156:ff21514d8981 23 * including, but not limited to, any implied warranties of merchantability
AnnaBridge 156:ff21514d8981 24 * or fitness for any particular purpose or warranties against infringement
AnnaBridge 156:ff21514d8981 25 * of any proprietary rights of a third party.
AnnaBridge 156:ff21514d8981 26 *
AnnaBridge 156:ff21514d8981 27 * Silicon Labs will not be liable for any consequential, incidental, or
AnnaBridge 156:ff21514d8981 28 * special damages, or any other relief, or for any claim by any third party,
AnnaBridge 156:ff21514d8981 29 * arising from your use of this Software.
AnnaBridge 156:ff21514d8981 30 *
AnnaBridge 156:ff21514d8981 31 ******************************************************************************/
AnnaBridge 156:ff21514d8981 32
AnnaBridge 156:ff21514d8981 33 #ifndef EM_PCNT_H
AnnaBridge 156:ff21514d8981 34 #define EM_PCNT_H
AnnaBridge 156:ff21514d8981 35
AnnaBridge 156:ff21514d8981 36 #include "em_device.h"
AnnaBridge 156:ff21514d8981 37 #if defined(PCNT_COUNT) && (PCNT_COUNT > 0)
AnnaBridge 156:ff21514d8981 38
AnnaBridge 156:ff21514d8981 39 #include <stdbool.h>
AnnaBridge 156:ff21514d8981 40
AnnaBridge 156:ff21514d8981 41 #ifdef __cplusplus
AnnaBridge 156:ff21514d8981 42 extern "C" {
AnnaBridge 156:ff21514d8981 43 #endif
AnnaBridge 156:ff21514d8981 44
AnnaBridge 156:ff21514d8981 45 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 46 * @addtogroup emlib
AnnaBridge 156:ff21514d8981 47 * @{
AnnaBridge 156:ff21514d8981 48 ******************************************************************************/
AnnaBridge 156:ff21514d8981 49
AnnaBridge 156:ff21514d8981 50 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 51 * @addtogroup PCNT
AnnaBridge 156:ff21514d8981 52 * @{
AnnaBridge 156:ff21514d8981 53 ******************************************************************************/
AnnaBridge 156:ff21514d8981 54
AnnaBridge 156:ff21514d8981 55 /*******************************************************************************
AnnaBridge 156:ff21514d8981 56 ******************************* DEFINES ***********************************
AnnaBridge 156:ff21514d8981 57 ******************************************************************************/
AnnaBridge 156:ff21514d8981 58 /** PCNT0 Counter register size. */
AnnaBridge 156:ff21514d8981 59 #if defined(_EFM32_GECKO_FAMILY)
AnnaBridge 156:ff21514d8981 60 #define PCNT0_CNT_SIZE (8) /* PCNT0 counter is 8 bits. */
AnnaBridge 156:ff21514d8981 61 #else
AnnaBridge 156:ff21514d8981 62 #define PCNT0_CNT_SIZE (16) /* PCNT0 counter is 16 bits. */
AnnaBridge 156:ff21514d8981 63 #endif
AnnaBridge 156:ff21514d8981 64
AnnaBridge 156:ff21514d8981 65 #ifdef PCNT1
AnnaBridge 156:ff21514d8981 66 /** PCNT1 Counter register size. */
AnnaBridge 156:ff21514d8981 67 #define PCNT1_CNT_SIZE (8) /* PCNT1 counter is 8 bits. */
AnnaBridge 156:ff21514d8981 68 #endif
AnnaBridge 156:ff21514d8981 69
AnnaBridge 156:ff21514d8981 70 #ifdef PCNT2
AnnaBridge 156:ff21514d8981 71 /** PCNT2 Counter register size. */
AnnaBridge 156:ff21514d8981 72 #define PCNT2_CNT_SIZE (8) /* PCNT2 counter is 8 bits. */
AnnaBridge 156:ff21514d8981 73 #endif
AnnaBridge 156:ff21514d8981 74
AnnaBridge 156:ff21514d8981 75 /*******************************************************************************
AnnaBridge 156:ff21514d8981 76 ******************************** ENUMS ************************************
AnnaBridge 156:ff21514d8981 77 ******************************************************************************/
AnnaBridge 156:ff21514d8981 78
AnnaBridge 156:ff21514d8981 79 /** Mode selection. */
Anna Bridge 160:5571c4ff569f 80 typedef enum {
AnnaBridge 156:ff21514d8981 81 /** Disable pulse counter. */
AnnaBridge 156:ff21514d8981 82 pcntModeDisable = _PCNT_CTRL_MODE_DISABLE,
AnnaBridge 156:ff21514d8981 83
AnnaBridge 156:ff21514d8981 84 /** Single input LFACLK oversampling mode (available in EM0-EM2). */
AnnaBridge 156:ff21514d8981 85 pcntModeOvsSingle = _PCNT_CTRL_MODE_OVSSINGLE,
AnnaBridge 156:ff21514d8981 86
AnnaBridge 156:ff21514d8981 87 /** Externally clocked single input counter mode (available in EM0-EM3). */
AnnaBridge 156:ff21514d8981 88 pcntModeExtSingle = _PCNT_CTRL_MODE_EXTCLKSINGLE,
AnnaBridge 156:ff21514d8981 89
AnnaBridge 156:ff21514d8981 90 /** Externally clocked quadrature decoder mode (available in EM0-EM3). */
AnnaBridge 156:ff21514d8981 91 pcntModeExtQuad = _PCNT_CTRL_MODE_EXTCLKQUAD,
AnnaBridge 156:ff21514d8981 92
AnnaBridge 156:ff21514d8981 93 #if defined(_PCNT_CTRL_MODE_OVSQUAD1X)
AnnaBridge 156:ff21514d8981 94 /** LFACLK oversampling quadrature decoder 1X mode (available in EM0-EM2). */
AnnaBridge 156:ff21514d8981 95 pcntModeOvsQuad1 = _PCNT_CTRL_MODE_OVSQUAD1X,
AnnaBridge 156:ff21514d8981 96
AnnaBridge 156:ff21514d8981 97 /** LFACLK oversampling quadrature decoder 2X mode (available in EM0-EM2). */
AnnaBridge 156:ff21514d8981 98 pcntModeOvsQuad2 = _PCNT_CTRL_MODE_OVSQUAD2X,
AnnaBridge 156:ff21514d8981 99
AnnaBridge 156:ff21514d8981 100 /** LFACLK oversampling quadrature decoder 4X mode (available in EM0-EM2). */
AnnaBridge 156:ff21514d8981 101 pcntModeOvsQuad4 = _PCNT_CTRL_MODE_OVSQUAD4X,
AnnaBridge 156:ff21514d8981 102 #endif
AnnaBridge 156:ff21514d8981 103 } PCNT_Mode_TypeDef;
AnnaBridge 156:ff21514d8981 104
AnnaBridge 156:ff21514d8981 105 #if defined(_PCNT_CTRL_CNTEV_MASK)
AnnaBridge 156:ff21514d8981 106 /** Counter event selection.
AnnaBridge 156:ff21514d8981 107 * Note: unshifted values are being used for enumeration because multiple
AnnaBridge 156:ff21514d8981 108 * configuration structure members use this type definition. */
Anna Bridge 160:5571c4ff569f 109 typedef enum {
AnnaBridge 156:ff21514d8981 110 /** Counts up on up-count and down on down-count events. */
AnnaBridge 156:ff21514d8981 111 pcntCntEventBoth = _PCNT_CTRL_CNTEV_BOTH,
AnnaBridge 156:ff21514d8981 112
AnnaBridge 156:ff21514d8981 113 /** Only counts up on up-count events. */
AnnaBridge 156:ff21514d8981 114 pcntCntEventUp = _PCNT_CTRL_CNTEV_UP,
AnnaBridge 156:ff21514d8981 115
AnnaBridge 156:ff21514d8981 116 /** Only counts down on down-count events. */
AnnaBridge 156:ff21514d8981 117 pcntCntEventDown = _PCNT_CTRL_CNTEV_DOWN,
AnnaBridge 156:ff21514d8981 118
AnnaBridge 156:ff21514d8981 119 /** Never counts. */
AnnaBridge 156:ff21514d8981 120 pcntCntEventNone = _PCNT_CTRL_CNTEV_NONE
AnnaBridge 156:ff21514d8981 121 } PCNT_CntEvent_TypeDef;
AnnaBridge 156:ff21514d8981 122 #endif
AnnaBridge 156:ff21514d8981 123
AnnaBridge 156:ff21514d8981 124 #if defined(_PCNT_INPUT_MASK)
AnnaBridge 156:ff21514d8981 125 /** PRS sources for @p s0PRS and @p s1PRS. */
Anna Bridge 160:5571c4ff569f 126 typedef enum {
AnnaBridge 156:ff21514d8981 127 pcntPRSCh0 = 0, /**< PRS channel 0. */
AnnaBridge 156:ff21514d8981 128 pcntPRSCh1 = 1, /**< PRS channel 1. */
AnnaBridge 156:ff21514d8981 129 pcntPRSCh2 = 2, /**< PRS channel 2. */
AnnaBridge 156:ff21514d8981 130 pcntPRSCh3 = 3, /**< PRS channel 3. */
AnnaBridge 156:ff21514d8981 131 #if defined(PCNT_INPUT_S0PRSSEL_PRSCH4)
AnnaBridge 156:ff21514d8981 132 pcntPRSCh4 = 4, /**< PRS channel 4. */
AnnaBridge 156:ff21514d8981 133 #endif
AnnaBridge 156:ff21514d8981 134 #if defined(PCNT_INPUT_S0PRSSEL_PRSCH5)
AnnaBridge 156:ff21514d8981 135 pcntPRSCh5 = 5, /**< PRS channel 5. */
AnnaBridge 156:ff21514d8981 136 #endif
AnnaBridge 156:ff21514d8981 137 #if defined(PCNT_INPUT_S0PRSSEL_PRSCH6)
AnnaBridge 156:ff21514d8981 138 pcntPRSCh6 = 6, /**< PRS channel 6. */
AnnaBridge 156:ff21514d8981 139 #endif
AnnaBridge 156:ff21514d8981 140 #if defined(PCNT_INPUT_S0PRSSEL_PRSCH7)
AnnaBridge 156:ff21514d8981 141 pcntPRSCh7 = 7, /**< PRS channel 7. */
AnnaBridge 156:ff21514d8981 142 #endif
AnnaBridge 156:ff21514d8981 143 #if defined(PCNT_INPUT_S0PRSSEL_PRSCH8)
AnnaBridge 156:ff21514d8981 144 pcntPRSCh8 = 8, /**< PRS channel 8. */
AnnaBridge 156:ff21514d8981 145 #endif
AnnaBridge 156:ff21514d8981 146 #if defined(PCNT_INPUT_S0PRSSEL_PRSCH9)
AnnaBridge 156:ff21514d8981 147 pcntPRSCh9 = 9, /**< PRS channel 9. */
AnnaBridge 156:ff21514d8981 148 #endif
AnnaBridge 156:ff21514d8981 149 #if defined(PCNT_INPUT_S0PRSSEL_PRSCH10)
AnnaBridge 156:ff21514d8981 150 pcntPRSCh10 = 10, /**< PRS channel 10. */
AnnaBridge 156:ff21514d8981 151 #endif
AnnaBridge 156:ff21514d8981 152 #if defined(PCNT_INPUT_S0PRSSEL_PRSCH11)
AnnaBridge 156:ff21514d8981 153 pcntPRSCh11 = 11 /**< PRS channel 11. */
AnnaBridge 156:ff21514d8981 154 #endif
AnnaBridge 156:ff21514d8981 155 } PCNT_PRSSel_TypeDef;
AnnaBridge 156:ff21514d8981 156
AnnaBridge 156:ff21514d8981 157 /** PRS inputs of PCNT. */
Anna Bridge 160:5571c4ff569f 158 typedef enum {
AnnaBridge 156:ff21514d8981 159 pcntPRSInputS0 = 0, /** PRS input 0. */
AnnaBridge 156:ff21514d8981 160 pcntPRSInputS1 = 1 /** PRS input 1. */
AnnaBridge 156:ff21514d8981 161 } PCNT_PRSInput_TypeDef;
AnnaBridge 156:ff21514d8981 162 #endif
AnnaBridge 156:ff21514d8981 163
AnnaBridge 156:ff21514d8981 164 /*******************************************************************************
AnnaBridge 156:ff21514d8981 165 ******************************* STRUCTS ***********************************
AnnaBridge 156:ff21514d8981 166 ******************************************************************************/
AnnaBridge 156:ff21514d8981 167
AnnaBridge 156:ff21514d8981 168 /** Init structure. */
Anna Bridge 160:5571c4ff569f 169 typedef struct {
AnnaBridge 156:ff21514d8981 170 /** Mode to operate in. */
AnnaBridge 156:ff21514d8981 171 PCNT_Mode_TypeDef mode;
AnnaBridge 156:ff21514d8981 172
AnnaBridge 156:ff21514d8981 173 /** Initial counter value (refer to reference manual for max value allowed).
AnnaBridge 156:ff21514d8981 174 * Only used for #pcntModeOvsSingle (and possibly #pcntModeDisable) modes.
AnnaBridge 156:ff21514d8981 175 * If using #pcntModeExtSingle or #pcntModeExtQuad modes, the counter
AnnaBridge 156:ff21514d8981 176 * value is reset to HW reset value. */
AnnaBridge 156:ff21514d8981 177 uint32_t counter;
AnnaBridge 156:ff21514d8981 178
AnnaBridge 156:ff21514d8981 179 /** Initial top value (refer to reference manual for max value allowed).
AnnaBridge 156:ff21514d8981 180 * Only used for #pcntModeOvsSingle (and possibly #pcntModeDisable) modes.
AnnaBridge 156:ff21514d8981 181 * If using #pcntModeExtSingle or #pcntModeExtQuad modes, the top
AnnaBridge 156:ff21514d8981 182 * value is reset to HW reset value. */
AnnaBridge 156:ff21514d8981 183 uint32_t top;
AnnaBridge 156:ff21514d8981 184
AnnaBridge 156:ff21514d8981 185 /** Polarity of incoming edge.
AnnaBridge 156:ff21514d8981 186 * @li #pcntModeExtSingle mode - if false, positive edges are counted,
AnnaBridge 156:ff21514d8981 187 * otherwise negative edges.
AnnaBridge 156:ff21514d8981 188 * @li #pcntModeExtQuad mode - if true, counting direction is inverted. */
AnnaBridge 156:ff21514d8981 189 bool negEdge;
AnnaBridge 156:ff21514d8981 190
AnnaBridge 156:ff21514d8981 191 /** Counting direction, only applicable for #pcntModeOvsSingle and
AnnaBridge 156:ff21514d8981 192 * #pcntModeExtSingle modes. */
AnnaBridge 156:ff21514d8981 193 bool countDown;
AnnaBridge 156:ff21514d8981 194
AnnaBridge 156:ff21514d8981 195 /** Enable filter, only available in #pcntModeOvs* modes. */
AnnaBridge 156:ff21514d8981 196 bool filter;
AnnaBridge 156:ff21514d8981 197
AnnaBridge 156:ff21514d8981 198 #if defined(PCNT_CTRL_HYST)
AnnaBridge 156:ff21514d8981 199 /** Set to true to enable hysteresis. When its enabled, the PCNT will always
AnnaBridge 156:ff21514d8981 200 * overflow and underflow to TOP/2. */
AnnaBridge 156:ff21514d8981 201 bool hyst;
AnnaBridge 156:ff21514d8981 202
AnnaBridge 156:ff21514d8981 203 /** Set to true to enable S1 to determine the direction of counting in
AnnaBridge 156:ff21514d8981 204 * OVSSINGLE or EXTCLKSINGLE modes. @n
AnnaBridge 156:ff21514d8981 205 * When S1 is high, the count direction is given by CNTDIR, and when S1 is
AnnaBridge 156:ff21514d8981 206 * low, the count direction is the opposite. */
AnnaBridge 156:ff21514d8981 207 bool s1CntDir;
AnnaBridge 156:ff21514d8981 208
AnnaBridge 156:ff21514d8981 209 /** Selects whether the regular counter responds to up-count events,
AnnaBridge 156:ff21514d8981 210 * down-count events, both or none. */
AnnaBridge 156:ff21514d8981 211 PCNT_CntEvent_TypeDef cntEvent;
AnnaBridge 156:ff21514d8981 212
AnnaBridge 156:ff21514d8981 213 /** Selects whether the auxiliary counter responds to up-count events,
AnnaBridge 156:ff21514d8981 214 * down-count events, both or none. */
AnnaBridge 156:ff21514d8981 215 PCNT_CntEvent_TypeDef auxCntEvent;
AnnaBridge 156:ff21514d8981 216
AnnaBridge 156:ff21514d8981 217 /** Select PRS channel as input to S0IN in PCNTx_INPUT register. */
AnnaBridge 156:ff21514d8981 218 PCNT_PRSSel_TypeDef s0PRS;
AnnaBridge 156:ff21514d8981 219
AnnaBridge 156:ff21514d8981 220 /** Select PRS channel as input to S1IN in PCNTx_INPUT register. */
AnnaBridge 156:ff21514d8981 221 PCNT_PRSSel_TypeDef s1PRS;
AnnaBridge 156:ff21514d8981 222 #endif
AnnaBridge 156:ff21514d8981 223 } PCNT_Init_TypeDef;
AnnaBridge 156:ff21514d8981 224
AnnaBridge 156:ff21514d8981 225 #if !defined(PCNT_CTRL_HYST)
AnnaBridge 156:ff21514d8981 226 /** Default config for PCNT init structure. */
AnnaBridge 156:ff21514d8981 227 #define PCNT_INIT_DEFAULT \
Anna Bridge 160:5571c4ff569f 228 { \
Anna Bridge 160:5571c4ff569f 229 pcntModeDisable, /* Disabled by default. */ \
Anna Bridge 160:5571c4ff569f 230 _PCNT_CNT_RESETVALUE, /* Default counter HW reset value. */ \
Anna Bridge 160:5571c4ff569f 231 _PCNT_TOP_RESETVALUE, /* Default counter HW reset value. */ \
Anna Bridge 160:5571c4ff569f 232 false, /* Use positive edge. */ \
Anna Bridge 160:5571c4ff569f 233 false, /* Up-counting. */ \
Anna Bridge 160:5571c4ff569f 234 false /* Filter disabled. */ \
Anna Bridge 160:5571c4ff569f 235 }
AnnaBridge 156:ff21514d8981 236 #else
AnnaBridge 156:ff21514d8981 237 /** Default config for PCNT init structure. */
AnnaBridge 156:ff21514d8981 238 #define PCNT_INIT_DEFAULT \
Anna Bridge 160:5571c4ff569f 239 { \
Anna Bridge 160:5571c4ff569f 240 pcntModeDisable, /* Disabled by default. */ \
Anna Bridge 160:5571c4ff569f 241 _PCNT_CNT_RESETVALUE, /* Default counter HW reset value. */ \
Anna Bridge 160:5571c4ff569f 242 _PCNT_TOP_RESETVALUE, /* Default counter HW reset value. */ \
Anna Bridge 160:5571c4ff569f 243 false, /* Use positive edge. */ \
Anna Bridge 160:5571c4ff569f 244 false, /* Up-counting. */ \
Anna Bridge 160:5571c4ff569f 245 false, /* Filter disabled. */ \
Anna Bridge 160:5571c4ff569f 246 false, /* Hysteresis disabled. */ \
Anna Bridge 160:5571c4ff569f 247 true, /* Counter direction is given by CNTDIR. */ \
Anna Bridge 160:5571c4ff569f 248 pcntCntEventUp, /* Regular counter counts up on upcount events. */ \
Anna Bridge 160:5571c4ff569f 249 pcntCntEventNone, /* Auxiliary counter doesn't respond to events. */ \
Anna Bridge 160:5571c4ff569f 250 pcntPRSCh0, /* PRS channel 0 selected as S0IN. */ \
Anna Bridge 160:5571c4ff569f 251 pcntPRSCh0 /* PRS channel 0 selected as S1IN. */ \
Anna Bridge 160:5571c4ff569f 252 }
AnnaBridge 156:ff21514d8981 253 #endif
AnnaBridge 156:ff21514d8981 254
AnnaBridge 156:ff21514d8981 255 #if defined(PCNT_OVSCFG_FILTLEN_DEFAULT)
AnnaBridge 156:ff21514d8981 256 /** Filter initialization structure */
Anna Bridge 160:5571c4ff569f 257 typedef struct {
AnnaBridge 156:ff21514d8981 258 /** Used only in OVSINGLE and OVSQUAD1X-4X modes. To use this, enable the filter through
AnnaBridge 156:ff21514d8981 259 * setting filter to true during PCNT_Init(). Filter length = (filtLen + 5) LFACLK cycles. */
AnnaBridge 156:ff21514d8981 260 uint8_t filtLen;
AnnaBridge 156:ff21514d8981 261
AnnaBridge 156:ff21514d8981 262 /** When set, removes flutter from Quaddecoder inputs S0IN and S1IN.
AnnaBridge 156:ff21514d8981 263 * Available only in OVSQUAD1X-4X modes. */
AnnaBridge 156:ff21514d8981 264 bool flutterrm;
AnnaBridge 156:ff21514d8981 265 } PCNT_Filter_TypeDef;
AnnaBridge 156:ff21514d8981 266 #endif
AnnaBridge 156:ff21514d8981 267
AnnaBridge 156:ff21514d8981 268 /** Default config for PCNT init structure. */
AnnaBridge 156:ff21514d8981 269 #if defined(PCNT_OVSCFG_FILTLEN_DEFAULT)
Anna Bridge 160:5571c4ff569f 270 #define PCNT_FILTER_DEFAULT \
Anna Bridge 160:5571c4ff569f 271 { \
Anna Bridge 160:5571c4ff569f 272 0, /* Default length is 5 LFACLK cycles */ \
Anna Bridge 160:5571c4ff569f 273 false /* No flutter removal */ \
Anna Bridge 160:5571c4ff569f 274 }
AnnaBridge 156:ff21514d8981 275 #endif
AnnaBridge 156:ff21514d8981 276
AnnaBridge 156:ff21514d8981 277 #if defined(PCNT_CTRL_TCCMODE_DEFAULT)
AnnaBridge 156:ff21514d8981 278
AnnaBridge 156:ff21514d8981 279 /** Modes for Triggered Compare and Clear module */
Anna Bridge 160:5571c4ff569f 280 typedef enum {
AnnaBridge 156:ff21514d8981 281 /** Triggered compare and clear not enabled. */
AnnaBridge 156:ff21514d8981 282 tccModeDisabled = _PCNT_CTRL_TCCMODE_DISABLED,
AnnaBridge 156:ff21514d8981 283
AnnaBridge 156:ff21514d8981 284 /** Compare and clear performed on each (optionally prescaled) LFA clock cycle. */
AnnaBridge 156:ff21514d8981 285 tccModeLFA = _PCNT_CTRL_TCCMODE_LFA,
AnnaBridge 156:ff21514d8981 286
AnnaBridge 156:ff21514d8981 287 /** Compare and clear performed on PRS edges. Polarity defined by prsPolarity. */
AnnaBridge 156:ff21514d8981 288 tccModePRS = _PCNT_CTRL_TCCMODE_PRS
AnnaBridge 156:ff21514d8981 289 } PCNT_TCCMode_TypeDef;
AnnaBridge 156:ff21514d8981 290
AnnaBridge 156:ff21514d8981 291 /** Prescaler values for LFA compare and clear events. Only has effect when TCC mode is LFA. */
Anna Bridge 160:5571c4ff569f 292 typedef enum {
AnnaBridge 156:ff21514d8981 293 /** Compare and clear event each LFA cycle. */
AnnaBridge 156:ff21514d8981 294 tccPrescDiv1 = _PCNT_CTRL_TCCPRESC_DIV1,
AnnaBridge 156:ff21514d8981 295
AnnaBridge 156:ff21514d8981 296 /** Compare and clear event every other LFA cycle. */
AnnaBridge 156:ff21514d8981 297 tccPrescDiv2 = _PCNT_CTRL_TCCPRESC_DIV2,
AnnaBridge 156:ff21514d8981 298
AnnaBridge 156:ff21514d8981 299 /** Compare and clear event every 4th LFA cycle. */
AnnaBridge 156:ff21514d8981 300 tccPrescDiv4 = _PCNT_CTRL_TCCPRESC_DIV4,
AnnaBridge 156:ff21514d8981 301
AnnaBridge 156:ff21514d8981 302 /** Compare and clear event every 8th LFA cycle. */
AnnaBridge 156:ff21514d8981 303 tccPrescDiv8 = _PCNT_CTRL_TCCPRESC_DIV8
AnnaBridge 156:ff21514d8981 304 } PCNT_TCCPresc_Typedef;
AnnaBridge 156:ff21514d8981 305
AnnaBridge 156:ff21514d8981 306 /** Compare modes for TCC module */
Anna Bridge 160:5571c4ff569f 307 typedef enum {
AnnaBridge 156:ff21514d8981 308 /** Compare match if PCNT_CNT is less than, or equal to PCNT_TOP. */
AnnaBridge 156:ff21514d8981 309 tccCompLTOE = _PCNT_CTRL_TCCCOMP_LTOE,
AnnaBridge 156:ff21514d8981 310
AnnaBridge 156:ff21514d8981 311 /** Compare match if PCNT_CNT is greater than or equal to PCNT_TOP. */
AnnaBridge 156:ff21514d8981 312 tccCompGTOE = _PCNT_CTRL_TCCCOMP_GTOE,
AnnaBridge 156:ff21514d8981 313
AnnaBridge 156:ff21514d8981 314 /** Compare match if PCNT_CNT is less than, or equal to PCNT_TOP[15:8]], and greater
AnnaBridge 156:ff21514d8981 315 * than, or equal to PCNT_TOP[7:0]. */
AnnaBridge 156:ff21514d8981 316 tccCompRange = _PCNT_CTRL_TCCCOMP_RANGE
AnnaBridge 156:ff21514d8981 317 } PCNT_TCCComp_Typedef;
AnnaBridge 156:ff21514d8981 318
AnnaBridge 156:ff21514d8981 319 /** TCC initialization structure */
Anna Bridge 160:5571c4ff569f 320 typedef struct {
AnnaBridge 156:ff21514d8981 321 /** Mode to operate in. */
AnnaBridge 156:ff21514d8981 322 PCNT_TCCMode_TypeDef mode;
AnnaBridge 156:ff21514d8981 323
AnnaBridge 156:ff21514d8981 324 /** Prescaler value for LFACLK in LFA mode */
AnnaBridge 156:ff21514d8981 325 PCNT_TCCPresc_Typedef prescaler;
AnnaBridge 156:ff21514d8981 326
AnnaBridge 156:ff21514d8981 327 /** Choose the event that will trigger a clear */
AnnaBridge 156:ff21514d8981 328 PCNT_TCCComp_Typedef compare;
AnnaBridge 156:ff21514d8981 329
AnnaBridge 156:ff21514d8981 330 /** PRS input to TCC module, either for gating the PCNT clock, triggering the TCC comparison, or both. */
AnnaBridge 156:ff21514d8981 331 PCNT_PRSSel_TypeDef tccPRS;
AnnaBridge 156:ff21514d8981 332
AnnaBridge 156:ff21514d8981 333 /** TCC PRS input polarity. @n
AnnaBridge 156:ff21514d8981 334 * False = Rising edge for comparison trigger, and PCNT clock gated when the PRS signal is high. @n
AnnaBridge 156:ff21514d8981 335 * True = Falling edge for comparison trigger, and PCNT clock gated when the PRS signal is low. */
AnnaBridge 156:ff21514d8981 336 bool prsPolarity;
AnnaBridge 156:ff21514d8981 337
AnnaBridge 156:ff21514d8981 338 /** Enable gating PCNT input clock through TCC PRS signal.
AnnaBridge 156:ff21514d8981 339 * Polarity selection is done through prsPolarity. */
AnnaBridge 156:ff21514d8981 340 bool prsGateEnable;
AnnaBridge 156:ff21514d8981 341 } PCNT_TCC_TypeDef;
AnnaBridge 156:ff21514d8981 342
Anna Bridge 160:5571c4ff569f 343 #define PCNT_TCC_DEFAULT \
Anna Bridge 160:5571c4ff569f 344 { \
Anna Bridge 160:5571c4ff569f 345 tccModeDisabled, /* Disabled by default */ \
Anna Bridge 160:5571c4ff569f 346 tccPrescDiv1, /* Do not prescale LFA clock in LFA mode */ \
Anna Bridge 160:5571c4ff569f 347 tccCompLTOE, /* Clear when CNT <= TOP */ \
Anna Bridge 160:5571c4ff569f 348 pcntPRSCh0, /* Select PRS channel 0 as input to TCC */ \
Anna Bridge 160:5571c4ff569f 349 false, /* PRS polarity is rising edge, and gate when 1 */ \
Anna Bridge 160:5571c4ff569f 350 false /* Do not gate the PCNT counter input */ \
Anna Bridge 160:5571c4ff569f 351 }
AnnaBridge 156:ff21514d8981 352
AnnaBridge 156:ff21514d8981 353 #endif
AnnaBridge 156:ff21514d8981 354 /* defined(PCNT_CTRL_TCCMODE_DEFAULT) */
AnnaBridge 156:ff21514d8981 355
AnnaBridge 156:ff21514d8981 356 /*******************************************************************************
AnnaBridge 156:ff21514d8981 357 ***************************** PROTOTYPES **********************************
AnnaBridge 156:ff21514d8981 358 ******************************************************************************/
AnnaBridge 156:ff21514d8981 359
AnnaBridge 156:ff21514d8981 360 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 361 * @brief
AnnaBridge 156:ff21514d8981 362 * Get pulse counter value.
AnnaBridge 156:ff21514d8981 363 *
AnnaBridge 156:ff21514d8981 364 * @param[in] pcnt
AnnaBridge 156:ff21514d8981 365 * Pointer to PCNT peripheral register block.
AnnaBridge 156:ff21514d8981 366 *
AnnaBridge 156:ff21514d8981 367 * @return
AnnaBridge 156:ff21514d8981 368 * Current pulse counter value.
AnnaBridge 156:ff21514d8981 369 ******************************************************************************/
AnnaBridge 156:ff21514d8981 370 __STATIC_INLINE uint32_t PCNT_CounterGet(PCNT_TypeDef *pcnt)
AnnaBridge 156:ff21514d8981 371 {
AnnaBridge 156:ff21514d8981 372 return pcnt->CNT;
AnnaBridge 156:ff21514d8981 373 }
AnnaBridge 156:ff21514d8981 374
AnnaBridge 156:ff21514d8981 375 #if defined(_PCNT_AUXCNT_MASK)
AnnaBridge 156:ff21514d8981 376 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 377 * @brief
AnnaBridge 156:ff21514d8981 378 * Get auxiliary counter value.
AnnaBridge 156:ff21514d8981 379 *
AnnaBridge 156:ff21514d8981 380 * @param[in] pcnt
AnnaBridge 156:ff21514d8981 381 * Pointer to PCNT peripheral register block.
AnnaBridge 156:ff21514d8981 382 *
AnnaBridge 156:ff21514d8981 383 * @return
AnnaBridge 156:ff21514d8981 384 * Current auxiliary counter value.
AnnaBridge 156:ff21514d8981 385 ******************************************************************************/
AnnaBridge 156:ff21514d8981 386 __STATIC_INLINE uint32_t PCNT_AuxCounterGet(PCNT_TypeDef *pcnt)
AnnaBridge 156:ff21514d8981 387 {
AnnaBridge 156:ff21514d8981 388 return pcnt->AUXCNT;
AnnaBridge 156:ff21514d8981 389 }
AnnaBridge 156:ff21514d8981 390 #endif
AnnaBridge 156:ff21514d8981 391
AnnaBridge 156:ff21514d8981 392 void PCNT_CounterReset(PCNT_TypeDef *pcnt);
AnnaBridge 156:ff21514d8981 393 void PCNT_CounterTopSet(PCNT_TypeDef *pcnt, uint32_t count, uint32_t top);
AnnaBridge 156:ff21514d8981 394
AnnaBridge 156:ff21514d8981 395 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 396 * @brief
AnnaBridge 156:ff21514d8981 397 * Set counter value.
AnnaBridge 156:ff21514d8981 398 *
AnnaBridge 156:ff21514d8981 399 * @details
AnnaBridge 156:ff21514d8981 400 * The pulse counter is disabled while changing counter value, and reenabled
AnnaBridge 156:ff21514d8981 401 * (if originally enabled) when counter value has been set.
AnnaBridge 156:ff21514d8981 402 *
AnnaBridge 156:ff21514d8981 403 * @note
AnnaBridge 156:ff21514d8981 404 * This function will stall until synchronization to low frequency domain is
AnnaBridge 156:ff21514d8981 405 * completed. For that reason, it should normally not be used when using
AnnaBridge 156:ff21514d8981 406 * an external clock to clock the PCNT module, since stall time may be
AnnaBridge 156:ff21514d8981 407 * undefined in that case. The counter should normally only be set when
AnnaBridge 156:ff21514d8981 408 * operating in (or about to enable) #pcntModeOvsSingle mode.
AnnaBridge 156:ff21514d8981 409 *
AnnaBridge 156:ff21514d8981 410 * @param[in] pcnt
AnnaBridge 156:ff21514d8981 411 * Pointer to PCNT peripheral register block.
AnnaBridge 156:ff21514d8981 412 *
AnnaBridge 156:ff21514d8981 413 * @param[in] count
AnnaBridge 156:ff21514d8981 414 * Value to set in counter register.
AnnaBridge 156:ff21514d8981 415 ******************************************************************************/
AnnaBridge 156:ff21514d8981 416 __STATIC_INLINE void PCNT_CounterSet(PCNT_TypeDef *pcnt, uint32_t count)
AnnaBridge 156:ff21514d8981 417 {
AnnaBridge 156:ff21514d8981 418 PCNT_CounterTopSet(pcnt, count, pcnt->TOP);
AnnaBridge 156:ff21514d8981 419 }
AnnaBridge 156:ff21514d8981 420
AnnaBridge 156:ff21514d8981 421 void PCNT_Enable(PCNT_TypeDef *pcnt, PCNT_Mode_TypeDef mode);
AnnaBridge 156:ff21514d8981 422 void PCNT_FreezeEnable(PCNT_TypeDef *pcnt, bool enable);
AnnaBridge 156:ff21514d8981 423 void PCNT_Init(PCNT_TypeDef *pcnt, const PCNT_Init_TypeDef *init);
AnnaBridge 156:ff21514d8981 424
AnnaBridge 156:ff21514d8981 425 #if defined(PCNT_OVSCFG_FILTLEN_DEFAULT)
AnnaBridge 156:ff21514d8981 426 void PCNT_FilterConfiguration(PCNT_TypeDef *pcnt, const PCNT_Filter_TypeDef *config, bool enable);
AnnaBridge 156:ff21514d8981 427 #endif
AnnaBridge 156:ff21514d8981 428
AnnaBridge 156:ff21514d8981 429 #if defined(_PCNT_INPUT_MASK)
AnnaBridge 156:ff21514d8981 430 void PCNT_PRSInputEnable(PCNT_TypeDef *pcnt,
AnnaBridge 156:ff21514d8981 431 PCNT_PRSInput_TypeDef prsInput,
AnnaBridge 156:ff21514d8981 432 bool enable);
AnnaBridge 156:ff21514d8981 433 #endif
AnnaBridge 156:ff21514d8981 434
AnnaBridge 156:ff21514d8981 435 #if defined(PCNT_CTRL_TCCMODE_DEFAULT)
AnnaBridge 156:ff21514d8981 436 void PCNT_TCCConfiguration(PCNT_TypeDef *pcnt, const PCNT_TCC_TypeDef *config);
AnnaBridge 156:ff21514d8981 437 #endif
AnnaBridge 156:ff21514d8981 438 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 439 * @brief
AnnaBridge 156:ff21514d8981 440 * Clear one or more pending PCNT interrupts.
AnnaBridge 156:ff21514d8981 441 *
AnnaBridge 156:ff21514d8981 442 * @param[in] pcnt
AnnaBridge 156:ff21514d8981 443 * Pointer to PCNT peripheral register block.
AnnaBridge 156:ff21514d8981 444 *
AnnaBridge 156:ff21514d8981 445 * @param[in] flags
AnnaBridge 156:ff21514d8981 446 * Pending PCNT interrupt source to clear. Use a bitwise logic OR combination
AnnaBridge 156:ff21514d8981 447 * of valid interrupt flags for the PCNT module (PCNT_IF_nnn).
AnnaBridge 156:ff21514d8981 448 ******************************************************************************/
AnnaBridge 156:ff21514d8981 449 __STATIC_INLINE void PCNT_IntClear(PCNT_TypeDef *pcnt, uint32_t flags)
AnnaBridge 156:ff21514d8981 450 {
AnnaBridge 156:ff21514d8981 451 pcnt->IFC = flags;
AnnaBridge 156:ff21514d8981 452 }
AnnaBridge 156:ff21514d8981 453
AnnaBridge 156:ff21514d8981 454 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 455 * @brief
AnnaBridge 156:ff21514d8981 456 * Disable one or more PCNT interrupts.
AnnaBridge 156:ff21514d8981 457 *
AnnaBridge 156:ff21514d8981 458 * @param[in] pcnt
AnnaBridge 156:ff21514d8981 459 * Pointer to PCNT peripheral register block.
AnnaBridge 156:ff21514d8981 460 *
AnnaBridge 156:ff21514d8981 461 * @param[in] flags
AnnaBridge 156:ff21514d8981 462 * PCNT interrupt sources to disable. Use a bitwise logic OR combination of
AnnaBridge 156:ff21514d8981 463 * valid interrupt flags for the PCNT module (PCNT_IF_nnn).
AnnaBridge 156:ff21514d8981 464 ******************************************************************************/
AnnaBridge 156:ff21514d8981 465 __STATIC_INLINE void PCNT_IntDisable(PCNT_TypeDef *pcnt, uint32_t flags)
AnnaBridge 156:ff21514d8981 466 {
AnnaBridge 156:ff21514d8981 467 pcnt->IEN &= ~flags;
AnnaBridge 156:ff21514d8981 468 }
AnnaBridge 156:ff21514d8981 469
AnnaBridge 156:ff21514d8981 470 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 471 * @brief
AnnaBridge 156:ff21514d8981 472 * Enable one or more PCNT interrupts.
AnnaBridge 156:ff21514d8981 473 *
AnnaBridge 156:ff21514d8981 474 * @note
AnnaBridge 156:ff21514d8981 475 * Depending on the use, a pending interrupt may already be set prior to
AnnaBridge 156:ff21514d8981 476 * enabling the interrupt. Consider using PCNT_IntClear() prior to enabling
AnnaBridge 156:ff21514d8981 477 * if such a pending interrupt should be ignored.
AnnaBridge 156:ff21514d8981 478 *
AnnaBridge 156:ff21514d8981 479 * @param[in] pcnt
AnnaBridge 156:ff21514d8981 480 * Pointer to PCNT peripheral register block.
AnnaBridge 156:ff21514d8981 481 *
AnnaBridge 156:ff21514d8981 482 * @param[in] flags
AnnaBridge 156:ff21514d8981 483 * PCNT interrupt sources to enable. Use a bitwise logic OR combination of
AnnaBridge 156:ff21514d8981 484 * valid interrupt flags for the PCNT module (PCNT_IF_nnn).
AnnaBridge 156:ff21514d8981 485 ******************************************************************************/
AnnaBridge 156:ff21514d8981 486 __STATIC_INLINE void PCNT_IntEnable(PCNT_TypeDef *pcnt, uint32_t flags)
AnnaBridge 156:ff21514d8981 487 {
AnnaBridge 156:ff21514d8981 488 pcnt->IEN |= flags;
AnnaBridge 156:ff21514d8981 489 }
AnnaBridge 156:ff21514d8981 490
AnnaBridge 156:ff21514d8981 491 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 492 * @brief
AnnaBridge 156:ff21514d8981 493 * Get pending PCNT interrupt flags.
AnnaBridge 156:ff21514d8981 494 *
AnnaBridge 156:ff21514d8981 495 * @note
AnnaBridge 156:ff21514d8981 496 * The event bits are not cleared by the use of this function.
AnnaBridge 156:ff21514d8981 497 *
AnnaBridge 156:ff21514d8981 498 * @param[in] pcnt
AnnaBridge 156:ff21514d8981 499 * Pointer to PCNT peripheral register block.
AnnaBridge 156:ff21514d8981 500 *
AnnaBridge 156:ff21514d8981 501 * @return
AnnaBridge 156:ff21514d8981 502 * PCNT interrupt sources pending. A bitwise logic OR combination of valid
AnnaBridge 156:ff21514d8981 503 * interrupt flags for the PCNT module (PCNT_IF_nnn).
AnnaBridge 156:ff21514d8981 504 ******************************************************************************/
AnnaBridge 156:ff21514d8981 505 __STATIC_INLINE uint32_t PCNT_IntGet(PCNT_TypeDef *pcnt)
AnnaBridge 156:ff21514d8981 506 {
AnnaBridge 156:ff21514d8981 507 return pcnt->IF;
AnnaBridge 156:ff21514d8981 508 }
AnnaBridge 156:ff21514d8981 509
AnnaBridge 156:ff21514d8981 510 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 511 * @brief
AnnaBridge 156:ff21514d8981 512 * Get enabled and pending PCNT interrupt flags.
AnnaBridge 156:ff21514d8981 513 *
AnnaBridge 156:ff21514d8981 514 * @details
AnnaBridge 156:ff21514d8981 515 * Useful for handling more interrupt sources in the same interrupt handler.
AnnaBridge 156:ff21514d8981 516 *
AnnaBridge 156:ff21514d8981 517 * @note
AnnaBridge 156:ff21514d8981 518 * The event bits are not cleared by the use of this function.
AnnaBridge 156:ff21514d8981 519 *
AnnaBridge 156:ff21514d8981 520 * @param[in] pcnt
AnnaBridge 156:ff21514d8981 521 * Pointer to PCNT peripheral register block.
AnnaBridge 156:ff21514d8981 522 *
AnnaBridge 156:ff21514d8981 523 * @return
AnnaBridge 156:ff21514d8981 524 * Pending and enabled PCNT interrupt sources.
AnnaBridge 156:ff21514d8981 525 * The return value is the bitwise AND combination of
AnnaBridge 156:ff21514d8981 526 * - the OR combination of enabled interrupt sources in PCNT_IEN_nnn
AnnaBridge 156:ff21514d8981 527 * register (PCNT_IEN_nnn) and
AnnaBridge 156:ff21514d8981 528 * - the OR combination of valid interrupt flags of the PCNT module
AnnaBridge 156:ff21514d8981 529 * (PCNT_IF_nnn).
AnnaBridge 156:ff21514d8981 530 ******************************************************************************/
AnnaBridge 156:ff21514d8981 531 __STATIC_INLINE uint32_t PCNT_IntGetEnabled(PCNT_TypeDef *pcnt)
AnnaBridge 156:ff21514d8981 532 {
AnnaBridge 156:ff21514d8981 533 uint32_t ien;
AnnaBridge 156:ff21514d8981 534
AnnaBridge 156:ff21514d8981 535 /* Store pcnt->IEN in temporary variable in order to define explicit order
AnnaBridge 156:ff21514d8981 536 * of volatile accesses. */
AnnaBridge 156:ff21514d8981 537 ien = pcnt->IEN;
AnnaBridge 156:ff21514d8981 538
AnnaBridge 156:ff21514d8981 539 /* Bitwise AND of pending and enabled interrupts */
AnnaBridge 156:ff21514d8981 540 return pcnt->IF & ien;
AnnaBridge 156:ff21514d8981 541 }
AnnaBridge 156:ff21514d8981 542
AnnaBridge 156:ff21514d8981 543 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 544 * @brief
AnnaBridge 156:ff21514d8981 545 * Set one or more pending PCNT interrupts from SW.
AnnaBridge 156:ff21514d8981 546 *
AnnaBridge 156:ff21514d8981 547 * @param[in] pcnt
AnnaBridge 156:ff21514d8981 548 * Pointer to PCNT peripheral register block.
AnnaBridge 156:ff21514d8981 549 *
AnnaBridge 156:ff21514d8981 550 * @param[in] flags
AnnaBridge 156:ff21514d8981 551 * PCNT interrupt sources to set to pending. Use a bitwise logic OR combination
AnnaBridge 156:ff21514d8981 552 * of valid interrupt flags for the PCNT module (PCNT_IF_nnn).
AnnaBridge 156:ff21514d8981 553 ******************************************************************************/
AnnaBridge 156:ff21514d8981 554 __STATIC_INLINE void PCNT_IntSet(PCNT_TypeDef *pcnt, uint32_t flags)
AnnaBridge 156:ff21514d8981 555 {
AnnaBridge 156:ff21514d8981 556 pcnt->IFS = flags;
AnnaBridge 156:ff21514d8981 557 }
AnnaBridge 156:ff21514d8981 558
AnnaBridge 156:ff21514d8981 559 void PCNT_Reset(PCNT_TypeDef *pcnt);
AnnaBridge 156:ff21514d8981 560
AnnaBridge 156:ff21514d8981 561 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 562 * @brief
AnnaBridge 156:ff21514d8981 563 * Get pulse counter top buffer value.
AnnaBridge 156:ff21514d8981 564 *
AnnaBridge 156:ff21514d8981 565 * @param[in] pcnt
AnnaBridge 156:ff21514d8981 566 * Pointer to PCNT peripheral register block.
AnnaBridge 156:ff21514d8981 567 *
AnnaBridge 156:ff21514d8981 568 * @return
AnnaBridge 156:ff21514d8981 569 * Current pulse counter top buffer value.
AnnaBridge 156:ff21514d8981 570 ******************************************************************************/
AnnaBridge 156:ff21514d8981 571 __STATIC_INLINE uint32_t PCNT_TopBufferGet(PCNT_TypeDef *pcnt)
AnnaBridge 156:ff21514d8981 572 {
AnnaBridge 156:ff21514d8981 573 return pcnt->TOPB;
AnnaBridge 156:ff21514d8981 574 }
AnnaBridge 156:ff21514d8981 575
AnnaBridge 156:ff21514d8981 576 void PCNT_TopBufferSet(PCNT_TypeDef *pcnt, uint32_t val);
AnnaBridge 156:ff21514d8981 577
AnnaBridge 156:ff21514d8981 578 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 579 * @brief
AnnaBridge 156:ff21514d8981 580 * Get pulse counter top value.
AnnaBridge 156:ff21514d8981 581 *
AnnaBridge 156:ff21514d8981 582 * @param[in] pcnt
AnnaBridge 156:ff21514d8981 583 * Pointer to PCNT peripheral register block.
AnnaBridge 156:ff21514d8981 584 *
AnnaBridge 156:ff21514d8981 585 * @return
AnnaBridge 156:ff21514d8981 586 * Current pulse counter top value.
AnnaBridge 156:ff21514d8981 587 ******************************************************************************/
AnnaBridge 156:ff21514d8981 588 __STATIC_INLINE uint32_t PCNT_TopGet(PCNT_TypeDef *pcnt)
AnnaBridge 156:ff21514d8981 589 {
AnnaBridge 156:ff21514d8981 590 return pcnt->TOP;
AnnaBridge 156:ff21514d8981 591 }
AnnaBridge 156:ff21514d8981 592
AnnaBridge 156:ff21514d8981 593 void PCNT_TopSet(PCNT_TypeDef *pcnt, uint32_t val);
AnnaBridge 156:ff21514d8981 594
AnnaBridge 156:ff21514d8981 595 /** @} (end addtogroup PCNT) */
AnnaBridge 156:ff21514d8981 596 /** @} (end addtogroup emlib) */
AnnaBridge 156:ff21514d8981 597
AnnaBridge 156:ff21514d8981 598 #ifdef __cplusplus
AnnaBridge 156:ff21514d8981 599 }
AnnaBridge 156:ff21514d8981 600 #endif
AnnaBridge 156:ff21514d8981 601
AnnaBridge 156:ff21514d8981 602 #endif /* defined(PCNT_COUNT) && (PCNT_COUNT > 0) */
AnnaBridge 156:ff21514d8981 603 #endif /* EM_PCNT_H */