Fork of Smoothie to port to mbed non-LPC targets.

Dependencies:   mbed

Fork of Smoothie by Stéphane Cachat

Committer:
Michael J. Spencer
Date:
Fri Feb 28 18:52:52 2014 -0800
Revision:
2:1df0b61d3b5a
Update to latest Smoothie.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Michael J. Spencer 2:1df0b61d3b5a 1 #ifdef __LPC17XX__
Michael J. Spencer 2:1df0b61d3b5a 2
Michael J. Spencer 2:1df0b61d3b5a 3 /**********************************************************************
Michael J. Spencer 2:1df0b61d3b5a 4 * $Id$ lpc17xx_qei.c 2010-05-21
Michael J. Spencer 2:1df0b61d3b5a 5 *//**
Michael J. Spencer 2:1df0b61d3b5a 6 * @file lpc17xx_qei.c
Michael J. Spencer 2:1df0b61d3b5a 7 * @brief Contains all functions support for QEI firmware library on LPC17xx
Michael J. Spencer 2:1df0b61d3b5a 8 * @version 2.0
Michael J. Spencer 2:1df0b61d3b5a 9 * @date 21. May. 2010
Michael J. Spencer 2:1df0b61d3b5a 10 * @author NXP MCU SW Application Team
Michael J. Spencer 2:1df0b61d3b5a 11 *
Michael J. Spencer 2:1df0b61d3b5a 12 * Copyright(C) 2010, NXP Semiconductor
Michael J. Spencer 2:1df0b61d3b5a 13 * All rights reserved.
Michael J. Spencer 2:1df0b61d3b5a 14 *
Michael J. Spencer 2:1df0b61d3b5a 15 ***********************************************************************
Michael J. Spencer 2:1df0b61d3b5a 16 * Software that is described herein is for illustrative purposes only
Michael J. Spencer 2:1df0b61d3b5a 17 * which provides customers with programming information regarding the
Michael J. Spencer 2:1df0b61d3b5a 18 * products. This software is supplied "AS IS" without any warranties.
Michael J. Spencer 2:1df0b61d3b5a 19 * NXP Semiconductors assumes no responsibility or liability for the
Michael J. Spencer 2:1df0b61d3b5a 20 * use of the software, conveys no license or title under any patent,
Michael J. Spencer 2:1df0b61d3b5a 21 * copyright, or mask work right to the product. NXP Semiconductors
Michael J. Spencer 2:1df0b61d3b5a 22 * reserves the right to make changes in the software without
Michael J. Spencer 2:1df0b61d3b5a 23 * notification. NXP Semiconductors also make no representation or
Michael J. Spencer 2:1df0b61d3b5a 24 * warranty that such application will be suitable for the specified
Michael J. Spencer 2:1df0b61d3b5a 25 * use without further testing or modification.
Michael J. Spencer 2:1df0b61d3b5a 26 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 27
Michael J. Spencer 2:1df0b61d3b5a 28 /* Peripheral group ----------------------------------------------------------- */
Michael J. Spencer 2:1df0b61d3b5a 29 /** @addtogroup QEI
Michael J. Spencer 2:1df0b61d3b5a 30 * @{
Michael J. Spencer 2:1df0b61d3b5a 31 */
Michael J. Spencer 2:1df0b61d3b5a 32
Michael J. Spencer 2:1df0b61d3b5a 33 /* Includes ------------------------------------------------------------------- */
Michael J. Spencer 2:1df0b61d3b5a 34 #include "lpc17xx_qei.h"
Michael J. Spencer 2:1df0b61d3b5a 35 #include "lpc17xx_clkpwr.h"
Michael J. Spencer 2:1df0b61d3b5a 36
Michael J. Spencer 2:1df0b61d3b5a 37
Michael J. Spencer 2:1df0b61d3b5a 38 /* If this source file built with example, the LPC17xx FW library configuration
Michael J. Spencer 2:1df0b61d3b5a 39 * file in each example directory ("lpc17xx_libcfg.h") must be included,
Michael J. Spencer 2:1df0b61d3b5a 40 * otherwise the default FW library configuration file must be included instead
Michael J. Spencer 2:1df0b61d3b5a 41 */
Michael J. Spencer 2:1df0b61d3b5a 42 #ifdef __BUILD_WITH_EXAMPLE__
Michael J. Spencer 2:1df0b61d3b5a 43 #include "lpc17xx_libcfg.h"
Michael J. Spencer 2:1df0b61d3b5a 44 #else
Michael J. Spencer 2:1df0b61d3b5a 45 #include "lpc17xx_libcfg_default.h"
Michael J. Spencer 2:1df0b61d3b5a 46 #endif /* __BUILD_WITH_EXAMPLE__ */
Michael J. Spencer 2:1df0b61d3b5a 47
Michael J. Spencer 2:1df0b61d3b5a 48
Michael J. Spencer 2:1df0b61d3b5a 49 #ifdef _QEI
Michael J. Spencer 2:1df0b61d3b5a 50
Michael J. Spencer 2:1df0b61d3b5a 51 /* Private Types -------------------------------------------------------------- */
Michael J. Spencer 2:1df0b61d3b5a 52 /** @defgroup QEI_Private_Types QEI Private Types
Michael J. Spencer 2:1df0b61d3b5a 53 * @{
Michael J. Spencer 2:1df0b61d3b5a 54 */
Michael J. Spencer 2:1df0b61d3b5a 55
Michael J. Spencer 2:1df0b61d3b5a 56 /**
Michael J. Spencer 2:1df0b61d3b5a 57 * @brief QEI configuration union type definition
Michael J. Spencer 2:1df0b61d3b5a 58 */
Michael J. Spencer 2:1df0b61d3b5a 59 typedef union {
Michael J. Spencer 2:1df0b61d3b5a 60 QEI_CFG_Type bmQEIConfig;
Michael J. Spencer 2:1df0b61d3b5a 61 uint32_t ulQEIConfig;
Michael J. Spencer 2:1df0b61d3b5a 62 } QEI_CFGOPT_Type;
Michael J. Spencer 2:1df0b61d3b5a 63
Michael J. Spencer 2:1df0b61d3b5a 64 /**
Michael J. Spencer 2:1df0b61d3b5a 65 * @}
Michael J. Spencer 2:1df0b61d3b5a 66 */
Michael J. Spencer 2:1df0b61d3b5a 67
Michael J. Spencer 2:1df0b61d3b5a 68
Michael J. Spencer 2:1df0b61d3b5a 69 /* Public Functions ----------------------------------------------------------- */
Michael J. Spencer 2:1df0b61d3b5a 70 /** @addtogroup QEI_Public_Functions
Michael J. Spencer 2:1df0b61d3b5a 71 * @{
Michael J. Spencer 2:1df0b61d3b5a 72 */
Michael J. Spencer 2:1df0b61d3b5a 73
Michael J. Spencer 2:1df0b61d3b5a 74 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 75 * @brief Resets value for each type of QEI value, such as velocity,
Michael J. Spencer 2:1df0b61d3b5a 76 * counter, position, etc..
Michael J. Spencer 2:1df0b61d3b5a 77 * @param[in] QEIx QEI peripheral, should be LPC_QEI
Michael J. Spencer 2:1df0b61d3b5a 78 * @param[in] ulResetType QEI Reset Type, should be one of the following:
Michael J. Spencer 2:1df0b61d3b5a 79 * - QEI_RESET_POS: Reset Position Counter
Michael J. Spencer 2:1df0b61d3b5a 80 * - QEI_RESET_POSOnIDX: Reset Position Counter on Index signal
Michael J. Spencer 2:1df0b61d3b5a 81 * - QEI_RESET_VEL: Reset Velocity
Michael J. Spencer 2:1df0b61d3b5a 82 * - QEI_RESET_IDX: Reset Index Counter
Michael J. Spencer 2:1df0b61d3b5a 83 * @return None
Michael J. Spencer 2:1df0b61d3b5a 84 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 85 void QEI_Reset(LPC_QEI_TypeDef *QEIx, uint32_t ulResetType)
Michael J. Spencer 2:1df0b61d3b5a 86 {
Michael J. Spencer 2:1df0b61d3b5a 87 CHECK_PARAM(PARAM_QEIx(QEIx));
Michael J. Spencer 2:1df0b61d3b5a 88 CHECK_PARAM(PARAM_QEI_RESET(ulResetType));
Michael J. Spencer 2:1df0b61d3b5a 89
Michael J. Spencer 2:1df0b61d3b5a 90 QEIx->QEICON = ulResetType;
Michael J. Spencer 2:1df0b61d3b5a 91 }
Michael J. Spencer 2:1df0b61d3b5a 92
Michael J. Spencer 2:1df0b61d3b5a 93 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 94 * @brief Initializes the QEI peripheral according to the specified
Michael J. Spencer 2:1df0b61d3b5a 95 * parameters in the QEI_ConfigStruct.
Michael J. Spencer 2:1df0b61d3b5a 96 * @param[in] QEIx QEI peripheral, should be LPC_QEI
Michael J. Spencer 2:1df0b61d3b5a 97 * @param[in] QEI_ConfigStruct Pointer to a QEI_CFG_Type structure
Michael J. Spencer 2:1df0b61d3b5a 98 * that contains the configuration information for the
Michael J. Spencer 2:1df0b61d3b5a 99 * specified QEI peripheral
Michael J. Spencer 2:1df0b61d3b5a 100 * @return None
Michael J. Spencer 2:1df0b61d3b5a 101 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 102 void QEI_Init(LPC_QEI_TypeDef *QEIx, QEI_CFG_Type *QEI_ConfigStruct)
Michael J. Spencer 2:1df0b61d3b5a 103 {
Michael J. Spencer 2:1df0b61d3b5a 104
Michael J. Spencer 2:1df0b61d3b5a 105 CHECK_PARAM(PARAM_QEIx(QEIx));
Michael J. Spencer 2:1df0b61d3b5a 106 CHECK_PARAM(PARAM_QEI_DIRINV(QEI_ConfigStruct->DirectionInvert));
Michael J. Spencer 2:1df0b61d3b5a 107 CHECK_PARAM(PARAM_QEI_SIGNALMODE(QEI_ConfigStruct->SignalMode));
Michael J. Spencer 2:1df0b61d3b5a 108 CHECK_PARAM(PARAM_QEI_CAPMODE(QEI_ConfigStruct->CaptureMode));
Michael J. Spencer 2:1df0b61d3b5a 109 CHECK_PARAM(PARAM_QEI_INVINX(QEI_ConfigStruct->InvertIndex));
Michael J. Spencer 2:1df0b61d3b5a 110
Michael J. Spencer 2:1df0b61d3b5a 111 /* Set up clock and power for QEI module */
Michael J. Spencer 2:1df0b61d3b5a 112 CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCQEI, ENABLE);
Michael J. Spencer 2:1df0b61d3b5a 113
Michael J. Spencer 2:1df0b61d3b5a 114 /* As default, peripheral clock for QEI module
Michael J. Spencer 2:1df0b61d3b5a 115 * is set to FCCLK / 2 */
Michael J. Spencer 2:1df0b61d3b5a 116 CLKPWR_SetPCLKDiv(CLKPWR_PCLKSEL_QEI, CLKPWR_PCLKSEL_CCLK_DIV_1);
Michael J. Spencer 2:1df0b61d3b5a 117
Michael J. Spencer 2:1df0b61d3b5a 118 // Reset all remaining value in QEI peripheral
Michael J. Spencer 2:1df0b61d3b5a 119 QEIx->QEICON = QEI_CON_RESP | QEI_CON_RESV | QEI_CON_RESI;
Michael J. Spencer 2:1df0b61d3b5a 120 QEIx->QEIMAXPOS = 0x00;
Michael J. Spencer 2:1df0b61d3b5a 121 QEIx->CMPOS0 = 0x00;
Michael J. Spencer 2:1df0b61d3b5a 122 QEIx->CMPOS1 = 0x00;
Michael J. Spencer 2:1df0b61d3b5a 123 QEIx->CMPOS2 = 0x00;
Michael J. Spencer 2:1df0b61d3b5a 124 QEIx->INXCMP = 0x00;
Michael J. Spencer 2:1df0b61d3b5a 125 QEIx->QEILOAD = 0x00;
Michael J. Spencer 2:1df0b61d3b5a 126 QEIx->VELCOMP = 0x00;
Michael J. Spencer 2:1df0b61d3b5a 127 QEIx->FILTER = 0x00;
Michael J. Spencer 2:1df0b61d3b5a 128 // Disable all Interrupt
Michael J. Spencer 2:1df0b61d3b5a 129 QEIx->QEIIEC = QEI_IECLR_BITMASK;
Michael J. Spencer 2:1df0b61d3b5a 130 // Clear all Interrupt pending
Michael J. Spencer 2:1df0b61d3b5a 131 QEIx->QEICLR = QEI_INTCLR_BITMASK;
Michael J. Spencer 2:1df0b61d3b5a 132 // Set QEI configuration value corresponding to its setting up value
Michael J. Spencer 2:1df0b61d3b5a 133 QEIx->QEICONF = ((QEI_CFGOPT_Type *)QEI_ConfigStruct)->ulQEIConfig;
Michael J. Spencer 2:1df0b61d3b5a 134 }
Michael J. Spencer 2:1df0b61d3b5a 135
Michael J. Spencer 2:1df0b61d3b5a 136
Michael J. Spencer 2:1df0b61d3b5a 137 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 138 * @brief De-initializes the QEI peripheral registers to their
Michael J. Spencer 2:1df0b61d3b5a 139 * default reset values.
Michael J. Spencer 2:1df0b61d3b5a 140 * @param[in] QEIx QEI peripheral, should be LPC_QEI
Michael J. Spencer 2:1df0b61d3b5a 141 * @return None
Michael J. Spencer 2:1df0b61d3b5a 142 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 143 void QEI_DeInit(LPC_QEI_TypeDef *QEIx)
Michael J. Spencer 2:1df0b61d3b5a 144 {
Michael J. Spencer 2:1df0b61d3b5a 145 CHECK_PARAM(PARAM_QEIx(QEIx));
Michael J. Spencer 2:1df0b61d3b5a 146
Michael J. Spencer 2:1df0b61d3b5a 147 /* Turn off clock and power for QEI module */
Michael J. Spencer 2:1df0b61d3b5a 148 CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCQEI, DISABLE);
Michael J. Spencer 2:1df0b61d3b5a 149 }
Michael J. Spencer 2:1df0b61d3b5a 150
Michael J. Spencer 2:1df0b61d3b5a 151
Michael J. Spencer 2:1df0b61d3b5a 152 /*****************************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 153 * @brief Fills each QIE_InitStruct member with its default value:
Michael J. Spencer 2:1df0b61d3b5a 154 * - DirectionInvert = QEI_DIRINV_NONE
Michael J. Spencer 2:1df0b61d3b5a 155 * - SignalMode = QEI_SIGNALMODE_QUAD
Michael J. Spencer 2:1df0b61d3b5a 156 * - CaptureMode = QEI_CAPMODE_4X
Michael J. Spencer 2:1df0b61d3b5a 157 * - InvertIndex = QEI_INVINX_NONE
Michael J. Spencer 2:1df0b61d3b5a 158 * @param[in] QIE_InitStruct Pointer to a QEI_CFG_Type structure
Michael J. Spencer 2:1df0b61d3b5a 159 * which will be initialized.
Michael J. Spencer 2:1df0b61d3b5a 160 * @return None
Michael J. Spencer 2:1df0b61d3b5a 161 *******************************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 162 void QEI_ConfigStructInit(QEI_CFG_Type *QIE_InitStruct)
Michael J. Spencer 2:1df0b61d3b5a 163 {
Michael J. Spencer 2:1df0b61d3b5a 164 QIE_InitStruct->CaptureMode = QEI_CAPMODE_4X;
Michael J. Spencer 2:1df0b61d3b5a 165 QIE_InitStruct->DirectionInvert = QEI_DIRINV_NONE;
Michael J. Spencer 2:1df0b61d3b5a 166 QIE_InitStruct->InvertIndex = QEI_INVINX_NONE;
Michael J. Spencer 2:1df0b61d3b5a 167 QIE_InitStruct->SignalMode = QEI_SIGNALMODE_QUAD;
Michael J. Spencer 2:1df0b61d3b5a 168 }
Michael J. Spencer 2:1df0b61d3b5a 169
Michael J. Spencer 2:1df0b61d3b5a 170
Michael J. Spencer 2:1df0b61d3b5a 171 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 172 * @brief Check whether if specified flag status is set or not
Michael J. Spencer 2:1df0b61d3b5a 173 * @param[in] QEIx QEI peripheral, should be LPC_QEI
Michael J. Spencer 2:1df0b61d3b5a 174 * @param[in] ulFlagType Status Flag Type, should be one of the following:
Michael J. Spencer 2:1df0b61d3b5a 175 * - QEI_STATUS_DIR: Direction Status
Michael J. Spencer 2:1df0b61d3b5a 176 * @return New Status of this status flag (SET or RESET)
Michael J. Spencer 2:1df0b61d3b5a 177 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 178 FlagStatus QEI_GetStatus(LPC_QEI_TypeDef *QEIx, uint32_t ulFlagType)
Michael J. Spencer 2:1df0b61d3b5a 179 {
Michael J. Spencer 2:1df0b61d3b5a 180 CHECK_PARAM(PARAM_QEIx(QEIx));
Michael J. Spencer 2:1df0b61d3b5a 181 CHECK_PARAM(PARAM_QEI_STATUS(ulFlagType));
Michael J. Spencer 2:1df0b61d3b5a 182 return ((QEIx->QEISTAT & ulFlagType) ? SET : RESET);
Michael J. Spencer 2:1df0b61d3b5a 183 }
Michael J. Spencer 2:1df0b61d3b5a 184
Michael J. Spencer 2:1df0b61d3b5a 185 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 186 * @brief Get current position value in QEI peripheral
Michael J. Spencer 2:1df0b61d3b5a 187 * @param[in] QEIx QEI peripheral, should be LPC_QEI
Michael J. Spencer 2:1df0b61d3b5a 188 * @return Current position value of QEI peripheral
Michael J. Spencer 2:1df0b61d3b5a 189 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 190 uint32_t QEI_GetPosition(LPC_QEI_TypeDef *QEIx)
Michael J. Spencer 2:1df0b61d3b5a 191 {
Michael J. Spencer 2:1df0b61d3b5a 192 CHECK_PARAM(PARAM_QEIx(QEIx));
Michael J. Spencer 2:1df0b61d3b5a 193 return (QEIx->QEIPOS);
Michael J. Spencer 2:1df0b61d3b5a 194 }
Michael J. Spencer 2:1df0b61d3b5a 195
Michael J. Spencer 2:1df0b61d3b5a 196 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 197 * @brief Set max position value for QEI peripheral
Michael J. Spencer 2:1df0b61d3b5a 198 * @param[in] QEIx QEI peripheral, should be LPC_QEI
Michael J. Spencer 2:1df0b61d3b5a 199 * @param[in] ulMaxPos Max position value to set
Michael J. Spencer 2:1df0b61d3b5a 200 * @return None
Michael J. Spencer 2:1df0b61d3b5a 201 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 202 void QEI_SetMaxPosition(LPC_QEI_TypeDef *QEIx, uint32_t ulMaxPos)
Michael J. Spencer 2:1df0b61d3b5a 203 {
Michael J. Spencer 2:1df0b61d3b5a 204 CHECK_PARAM(PARAM_QEIx(QEIx));
Michael J. Spencer 2:1df0b61d3b5a 205 QEIx->QEIMAXPOS = ulMaxPos;
Michael J. Spencer 2:1df0b61d3b5a 206 }
Michael J. Spencer 2:1df0b61d3b5a 207
Michael J. Spencer 2:1df0b61d3b5a 208 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 209 * @brief Set position compare value for QEI peripheral
Michael J. Spencer 2:1df0b61d3b5a 210 * @param[in] QEIx QEI peripheral, should be LPC_QEI
Michael J. Spencer 2:1df0b61d3b5a 211 * @param[in] bPosCompCh Compare Position channel, should be:
Michael J. Spencer 2:1df0b61d3b5a 212 * - QEI_COMPPOS_CH_0: QEI compare position channel 0
Michael J. Spencer 2:1df0b61d3b5a 213 * - QEI_COMPPOS_CH_1: QEI compare position channel 1
Michael J. Spencer 2:1df0b61d3b5a 214 * - QEI_COMPPOS_CH_2: QEI compare position channel 2
Michael J. Spencer 2:1df0b61d3b5a 215 * @param[in] ulPosComp Compare Position value to set
Michael J. Spencer 2:1df0b61d3b5a 216 * @return None
Michael J. Spencer 2:1df0b61d3b5a 217 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 218 void QEI_SetPositionComp(LPC_QEI_TypeDef *QEIx, uint8_t bPosCompCh, uint32_t ulPosComp)
Michael J. Spencer 2:1df0b61d3b5a 219 {
Michael J. Spencer 2:1df0b61d3b5a 220 volatile uint32_t *tmp;
Michael J. Spencer 2:1df0b61d3b5a 221
Michael J. Spencer 2:1df0b61d3b5a 222 CHECK_PARAM(PARAM_QEIx(QEIx));
Michael J. Spencer 2:1df0b61d3b5a 223 CHECK_PARAM(PARAM_QEI_COMPPOS_CH(bPosCompCh));
Michael J. Spencer 2:1df0b61d3b5a 224 tmp = (volatile uint32_t *) (&(QEIx->CMPOS0) + bPosCompCh * 4);
Michael J. Spencer 2:1df0b61d3b5a 225 *tmp = ulPosComp;
Michael J. Spencer 2:1df0b61d3b5a 226
Michael J. Spencer 2:1df0b61d3b5a 227 }
Michael J. Spencer 2:1df0b61d3b5a 228
Michael J. Spencer 2:1df0b61d3b5a 229 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 230 * @brief Get current index counter of QEI peripheral
Michael J. Spencer 2:1df0b61d3b5a 231 * @param[in] QEIx QEI peripheral, should be LPC_QEI
Michael J. Spencer 2:1df0b61d3b5a 232 * @return Current value of QEI index counter
Michael J. Spencer 2:1df0b61d3b5a 233 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 234 uint32_t QEI_GetIndex(LPC_QEI_TypeDef *QEIx)
Michael J. Spencer 2:1df0b61d3b5a 235 {
Michael J. Spencer 2:1df0b61d3b5a 236 CHECK_PARAM(PARAM_QEIx(QEIx));
Michael J. Spencer 2:1df0b61d3b5a 237 return (QEIx->INXCNT);
Michael J. Spencer 2:1df0b61d3b5a 238 }
Michael J. Spencer 2:1df0b61d3b5a 239
Michael J. Spencer 2:1df0b61d3b5a 240 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 241 * @brief Set value for index compare in QEI peripheral
Michael J. Spencer 2:1df0b61d3b5a 242 * @param[in] QEIx QEI peripheral, should be LPC_QEI
Michael J. Spencer 2:1df0b61d3b5a 243 * @param[in] ulIndexComp Compare Index Value to set
Michael J. Spencer 2:1df0b61d3b5a 244 * @return None
Michael J. Spencer 2:1df0b61d3b5a 245 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 246 void QEI_SetIndexComp(LPC_QEI_TypeDef *QEIx, uint32_t ulIndexComp)
Michael J. Spencer 2:1df0b61d3b5a 247 {
Michael J. Spencer 2:1df0b61d3b5a 248 CHECK_PARAM(PARAM_QEIx(QEIx));
Michael J. Spencer 2:1df0b61d3b5a 249 QEIx->INXCMP = ulIndexComp;
Michael J. Spencer 2:1df0b61d3b5a 250 }
Michael J. Spencer 2:1df0b61d3b5a 251
Michael J. Spencer 2:1df0b61d3b5a 252 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 253 * @brief Set timer reload value for QEI peripheral. When the velocity timer is
Michael J. Spencer 2:1df0b61d3b5a 254 * over-flow, the value that set for Timer Reload register will be loaded
Michael J. Spencer 2:1df0b61d3b5a 255 * into the velocity timer for next period. The calculated velocity in RPM
Michael J. Spencer 2:1df0b61d3b5a 256 * therefore will be affect by this value.
Michael J. Spencer 2:1df0b61d3b5a 257 * @param[in] QEIx QEI peripheral, should be LPC_QEI
Michael J. Spencer 2:1df0b61d3b5a 258 * @param[in] QEIReloadStruct QEI reload structure
Michael J. Spencer 2:1df0b61d3b5a 259 * @return None
Michael J. Spencer 2:1df0b61d3b5a 260 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 261 void QEI_SetTimerReload(LPC_QEI_TypeDef *QEIx, QEI_RELOADCFG_Type *QEIReloadStruct)
Michael J. Spencer 2:1df0b61d3b5a 262 {
Michael J. Spencer 2:1df0b61d3b5a 263 uint64_t pclk;
Michael J. Spencer 2:1df0b61d3b5a 264
Michael J. Spencer 2:1df0b61d3b5a 265 CHECK_PARAM(PARAM_QEIx(QEIx));
Michael J. Spencer 2:1df0b61d3b5a 266 CHECK_PARAM(PARAM_QEI_TIMERRELOAD(QEIReloadStruct->ReloadOption));
Michael J. Spencer 2:1df0b61d3b5a 267
Michael J. Spencer 2:1df0b61d3b5a 268 if (QEIReloadStruct->ReloadOption == QEI_TIMERRELOAD_TICKVAL) {
Michael J. Spencer 2:1df0b61d3b5a 269 QEIx->QEILOAD = QEIReloadStruct->ReloadValue - 1;
Michael J. Spencer 2:1df0b61d3b5a 270 } else {
Michael J. Spencer 2:1df0b61d3b5a 271 pclk = (uint64_t)CLKPWR_GetPCLK(CLKPWR_PCLKSEL_QEI);
Michael J. Spencer 2:1df0b61d3b5a 272 pclk = (pclk /(1000000/QEIReloadStruct->ReloadValue)) - 1;
Michael J. Spencer 2:1df0b61d3b5a 273 QEIx->QEILOAD = (uint32_t)pclk;
Michael J. Spencer 2:1df0b61d3b5a 274 }
Michael J. Spencer 2:1df0b61d3b5a 275 }
Michael J. Spencer 2:1df0b61d3b5a 276
Michael J. Spencer 2:1df0b61d3b5a 277 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 278 * @brief Get current timer counter in QEI peripheral
Michael J. Spencer 2:1df0b61d3b5a 279 * @param[in] QEIx QEI peripheral, should be LPC_QEI
Michael J. Spencer 2:1df0b61d3b5a 280 * @return Current timer counter in QEI peripheral
Michael J. Spencer 2:1df0b61d3b5a 281 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 282 uint32_t QEI_GetTimer(LPC_QEI_TypeDef *QEIx)
Michael J. Spencer 2:1df0b61d3b5a 283 {
Michael J. Spencer 2:1df0b61d3b5a 284 CHECK_PARAM(PARAM_QEIx(QEIx));
Michael J. Spencer 2:1df0b61d3b5a 285 return (QEIx->QEITIME);
Michael J. Spencer 2:1df0b61d3b5a 286 }
Michael J. Spencer 2:1df0b61d3b5a 287
Michael J. Spencer 2:1df0b61d3b5a 288 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 289 * @brief Get current velocity pulse counter in current time period
Michael J. Spencer 2:1df0b61d3b5a 290 * @param[in] QEIx QEI peripheral, should be LPC_QEI
Michael J. Spencer 2:1df0b61d3b5a 291 * @return Current velocity pulse counter value
Michael J. Spencer 2:1df0b61d3b5a 292 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 293 uint32_t QEI_GetVelocity(LPC_QEI_TypeDef *QEIx)
Michael J. Spencer 2:1df0b61d3b5a 294 {
Michael J. Spencer 2:1df0b61d3b5a 295 CHECK_PARAM(PARAM_QEIx(QEIx));
Michael J. Spencer 2:1df0b61d3b5a 296 return (QEIx->QEIVEL);
Michael J. Spencer 2:1df0b61d3b5a 297 }
Michael J. Spencer 2:1df0b61d3b5a 298
Michael J. Spencer 2:1df0b61d3b5a 299 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 300 * @brief Get the most recently measured velocity of the QEI. When
Michael J. Spencer 2:1df0b61d3b5a 301 * the Velocity timer in QEI is over-flow, the current velocity
Michael J. Spencer 2:1df0b61d3b5a 302 * value will be loaded into Velocity Capture register.
Michael J. Spencer 2:1df0b61d3b5a 303 * @param[in] QEIx QEI peripheral, should be LPC_QEI
Michael J. Spencer 2:1df0b61d3b5a 304 * @return The most recently measured velocity value
Michael J. Spencer 2:1df0b61d3b5a 305 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 306 uint32_t QEI_GetVelocityCap(LPC_QEI_TypeDef *QEIx)
Michael J. Spencer 2:1df0b61d3b5a 307 {
Michael J. Spencer 2:1df0b61d3b5a 308 CHECK_PARAM(PARAM_QEIx(QEIx));
Michael J. Spencer 2:1df0b61d3b5a 309 return (QEIx->QEICAP);
Michael J. Spencer 2:1df0b61d3b5a 310 }
Michael J. Spencer 2:1df0b61d3b5a 311
Michael J. Spencer 2:1df0b61d3b5a 312 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 313 * @brief Set Velocity Compare value for QEI peripheral
Michael J. Spencer 2:1df0b61d3b5a 314 * @param[in] QEIx QEI peripheral, should be LPC_QEI
Michael J. Spencer 2:1df0b61d3b5a 315 * @param[in] ulVelComp Compare Velocity value to set
Michael J. Spencer 2:1df0b61d3b5a 316 * @return None
Michael J. Spencer 2:1df0b61d3b5a 317 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 318 void QEI_SetVelocityComp(LPC_QEI_TypeDef *QEIx, uint32_t ulVelComp)
Michael J. Spencer 2:1df0b61d3b5a 319 {
Michael J. Spencer 2:1df0b61d3b5a 320 CHECK_PARAM(PARAM_QEIx(QEIx));
Michael J. Spencer 2:1df0b61d3b5a 321 QEIx->VELCOMP = ulVelComp;
Michael J. Spencer 2:1df0b61d3b5a 322 }
Michael J. Spencer 2:1df0b61d3b5a 323
Michael J. Spencer 2:1df0b61d3b5a 324 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 325 * @brief Set value of sampling count for the digital filter in
Michael J. Spencer 2:1df0b61d3b5a 326 * QEI peripheral
Michael J. Spencer 2:1df0b61d3b5a 327 * @param[in] QEIx QEI peripheral, should be LPC_QEI
Michael J. Spencer 2:1df0b61d3b5a 328 * @param[in] ulSamplingPulse Value of sampling count to set
Michael J. Spencer 2:1df0b61d3b5a 329 * @return None
Michael J. Spencer 2:1df0b61d3b5a 330 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 331 void QEI_SetDigiFilter(LPC_QEI_TypeDef *QEIx, uint32_t ulSamplingPulse)
Michael J. Spencer 2:1df0b61d3b5a 332 {
Michael J. Spencer 2:1df0b61d3b5a 333 CHECK_PARAM(PARAM_QEIx(QEIx));
Michael J. Spencer 2:1df0b61d3b5a 334 QEIx->FILTER = ulSamplingPulse;
Michael J. Spencer 2:1df0b61d3b5a 335 }
Michael J. Spencer 2:1df0b61d3b5a 336
Michael J. Spencer 2:1df0b61d3b5a 337 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 338 * @brief Check whether if specified interrupt flag status in QEI
Michael J. Spencer 2:1df0b61d3b5a 339 * peripheral is set or not
Michael J. Spencer 2:1df0b61d3b5a 340 * @param[in] QEIx QEI peripheral, should be LPC_QEI
Michael J. Spencer 2:1df0b61d3b5a 341 * @param[in] ulIntType Interrupt Flag Status type, should be:
Michael J. Spencer 2:1df0b61d3b5a 342 - QEI_INTFLAG_INX_Int: index pulse was detected interrupt
Michael J. Spencer 2:1df0b61d3b5a 343 - QEI_INTFLAG_TIM_Int: Velocity timer over flow interrupt
Michael J. Spencer 2:1df0b61d3b5a 344 - QEI_INTFLAG_VELC_Int: Capture velocity is less than compare interrupt
Michael J. Spencer 2:1df0b61d3b5a 345 - QEI_INTFLAG_DIR_Int: Change of direction interrupt
Michael J. Spencer 2:1df0b61d3b5a 346 - QEI_INTFLAG_ERR_Int: An encoder phase error interrupt
Michael J. Spencer 2:1df0b61d3b5a 347 - QEI_INTFLAG_ENCLK_Int: An encoder clock pulse was detected interrupt
Michael J. Spencer 2:1df0b61d3b5a 348 - QEI_INTFLAG_POS0_Int: position 0 compare value is equal to the
Michael J. Spencer 2:1df0b61d3b5a 349 current position interrupt
Michael J. Spencer 2:1df0b61d3b5a 350 - QEI_INTFLAG_POS1_Int: position 1 compare value is equal to the
Michael J. Spencer 2:1df0b61d3b5a 351 current position interrupt
Michael J. Spencer 2:1df0b61d3b5a 352 - QEI_INTFLAG_POS2_Int: position 2 compare value is equal to the
Michael J. Spencer 2:1df0b61d3b5a 353 current position interrupt
Michael J. Spencer 2:1df0b61d3b5a 354 - QEI_INTFLAG_REV_Int: Index compare value is equal to the current
Michael J. Spencer 2:1df0b61d3b5a 355 index count interrupt
Michael J. Spencer 2:1df0b61d3b5a 356 - QEI_INTFLAG_POS0REV_Int: Combined position 0 and revolution count interrupt
Michael J. Spencer 2:1df0b61d3b5a 357 - QEI_INTFLAG_POS1REV_Int: Combined position 1 and revolution count interrupt
Michael J. Spencer 2:1df0b61d3b5a 358 - QEI_INTFLAG_POS2REV_Int: Combined position 2 and revolution count interrupt
Michael J. Spencer 2:1df0b61d3b5a 359 * @return New State of specified interrupt flag status (SET or RESET)
Michael J. Spencer 2:1df0b61d3b5a 360 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 361 FlagStatus QEI_GetIntStatus(LPC_QEI_TypeDef *QEIx, uint32_t ulIntType)
Michael J. Spencer 2:1df0b61d3b5a 362 {
Michael J. Spencer 2:1df0b61d3b5a 363 CHECK_PARAM(PARAM_QEIx(QEIx));
Michael J. Spencer 2:1df0b61d3b5a 364 CHECK_PARAM(PARAM_QEI_INTFLAG(ulIntType));
Michael J. Spencer 2:1df0b61d3b5a 365
Michael J. Spencer 2:1df0b61d3b5a 366 return((QEIx->QEIINTSTAT & ulIntType) ? SET : RESET);
Michael J. Spencer 2:1df0b61d3b5a 367 }
Michael J. Spencer 2:1df0b61d3b5a 368
Michael J. Spencer 2:1df0b61d3b5a 369 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 370 * @brief Enable/Disable specified interrupt in QEI peripheral
Michael J. Spencer 2:1df0b61d3b5a 371 * @param[in] QEIx QEI peripheral, should be LPC_QEI
Michael J. Spencer 2:1df0b61d3b5a 372 * @param[in] ulIntType Interrupt Flag Status type, should be:
Michael J. Spencer 2:1df0b61d3b5a 373 * - QEI_INTFLAG_INX_Int: index pulse was detected interrupt
Michael J. Spencer 2:1df0b61d3b5a 374 * - QEI_INTFLAG_TIM_Int: Velocity timer over flow interrupt
Michael J. Spencer 2:1df0b61d3b5a 375 * - QEI_INTFLAG_VELC_Int: Capture velocity is less than compare interrupt
Michael J. Spencer 2:1df0b61d3b5a 376 * - QEI_INTFLAG_DIR_Int: Change of direction interrupt
Michael J. Spencer 2:1df0b61d3b5a 377 * - QEI_INTFLAG_ERR_Int: An encoder phase error interrupt
Michael J. Spencer 2:1df0b61d3b5a 378 * - QEI_INTFLAG_ENCLK_Int: An encoder clock pulse was detected interrupt
Michael J. Spencer 2:1df0b61d3b5a 379 * - QEI_INTFLAG_POS0_Int: position 0 compare value is equal to the
Michael J. Spencer 2:1df0b61d3b5a 380 * current position interrupt
Michael J. Spencer 2:1df0b61d3b5a 381 * - QEI_INTFLAG_POS1_Int: position 1 compare value is equal to the
Michael J. Spencer 2:1df0b61d3b5a 382 * current position interrupt
Michael J. Spencer 2:1df0b61d3b5a 383 * - QEI_INTFLAG_POS2_Int: position 2 compare value is equal to the
Michael J. Spencer 2:1df0b61d3b5a 384 * current position interrupt
Michael J. Spencer 2:1df0b61d3b5a 385 * - QEI_INTFLAG_REV_Int: Index compare value is equal to the current
Michael J. Spencer 2:1df0b61d3b5a 386 * index count interrupt
Michael J. Spencer 2:1df0b61d3b5a 387 * - QEI_INTFLAG_POS0REV_Int: Combined position 0 and revolution count interrupt
Michael J. Spencer 2:1df0b61d3b5a 388 * - QEI_INTFLAG_POS1REV_Int: Combined position 1 and revolution count interrupt
Michael J. Spencer 2:1df0b61d3b5a 389 * - QEI_INTFLAG_POS2REV_Int: Combined position 2 and revolution count interrupt
Michael J. Spencer 2:1df0b61d3b5a 390 * @param[in] NewState New function state, should be:
Michael J. Spencer 2:1df0b61d3b5a 391 * - DISABLE
Michael J. Spencer 2:1df0b61d3b5a 392 * - ENABLE
Michael J. Spencer 2:1df0b61d3b5a 393 * @return None
Michael J. Spencer 2:1df0b61d3b5a 394 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 395 void QEI_IntCmd(LPC_QEI_TypeDef *QEIx, uint32_t ulIntType, FunctionalState NewState)
Michael J. Spencer 2:1df0b61d3b5a 396 {
Michael J. Spencer 2:1df0b61d3b5a 397 CHECK_PARAM(PARAM_QEIx(QEIx));
Michael J. Spencer 2:1df0b61d3b5a 398 CHECK_PARAM(PARAM_QEI_INTFLAG(ulIntType));
Michael J. Spencer 2:1df0b61d3b5a 399 CHECK_PARAM(PARAM_FUNCTIONALSTATE(NewState));
Michael J. Spencer 2:1df0b61d3b5a 400
Michael J. Spencer 2:1df0b61d3b5a 401 if (NewState == ENABLE) {
Michael J. Spencer 2:1df0b61d3b5a 402 QEIx->QEIIES = ulIntType;
Michael J. Spencer 2:1df0b61d3b5a 403 } else {
Michael J. Spencer 2:1df0b61d3b5a 404 QEIx->QEIIEC = ulIntType;
Michael J. Spencer 2:1df0b61d3b5a 405 }
Michael J. Spencer 2:1df0b61d3b5a 406 }
Michael J. Spencer 2:1df0b61d3b5a 407
Michael J. Spencer 2:1df0b61d3b5a 408
Michael J. Spencer 2:1df0b61d3b5a 409 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 410 * @brief Sets (forces) specified interrupt in QEI peripheral
Michael J. Spencer 2:1df0b61d3b5a 411 * @param[in] QEIx QEI peripheral, should be LPC_QEI
Michael J. Spencer 2:1df0b61d3b5a 412 * @param[in] ulIntType Interrupt Flag Status type, should be:
Michael J. Spencer 2:1df0b61d3b5a 413 - QEI_INTFLAG_INX_Int: index pulse was detected interrupt
Michael J. Spencer 2:1df0b61d3b5a 414 - QEI_INTFLAG_TIM_Int: Velocity timer over flow interrupt
Michael J. Spencer 2:1df0b61d3b5a 415 - QEI_INTFLAG_VELC_Int: Capture velocity is less than compare interrupt
Michael J. Spencer 2:1df0b61d3b5a 416 - QEI_INTFLAG_DIR_Int: Change of direction interrupt
Michael J. Spencer 2:1df0b61d3b5a 417 - QEI_INTFLAG_ERR_Int: An encoder phase error interrupt
Michael J. Spencer 2:1df0b61d3b5a 418 - QEI_INTFLAG_ENCLK_Int: An encoder clock pulse was detected interrupt
Michael J. Spencer 2:1df0b61d3b5a 419 - QEI_INTFLAG_POS0_Int: position 0 compare value is equal to the
Michael J. Spencer 2:1df0b61d3b5a 420 current position interrupt
Michael J. Spencer 2:1df0b61d3b5a 421 - QEI_INTFLAG_POS1_Int: position 1 compare value is equal to the
Michael J. Spencer 2:1df0b61d3b5a 422 current position interrupt
Michael J. Spencer 2:1df0b61d3b5a 423 - QEI_INTFLAG_POS2_Int: position 2 compare value is equal to the
Michael J. Spencer 2:1df0b61d3b5a 424 current position interrupt
Michael J. Spencer 2:1df0b61d3b5a 425 - QEI_INTFLAG_REV_Int: Index compare value is equal to the current
Michael J. Spencer 2:1df0b61d3b5a 426 index count interrupt
Michael J. Spencer 2:1df0b61d3b5a 427 - QEI_INTFLAG_POS0REV_Int: Combined position 0 and revolution count interrupt
Michael J. Spencer 2:1df0b61d3b5a 428 - QEI_INTFLAG_POS1REV_Int: Combined position 1 and revolution count interrupt
Michael J. Spencer 2:1df0b61d3b5a 429 - QEI_INTFLAG_POS2REV_Int: Combined position 2 and revolution count interrupt
Michael J. Spencer 2:1df0b61d3b5a 430 * @return None
Michael J. Spencer 2:1df0b61d3b5a 431 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 432 void QEI_IntSet(LPC_QEI_TypeDef *QEIx, uint32_t ulIntType)
Michael J. Spencer 2:1df0b61d3b5a 433 {
Michael J. Spencer 2:1df0b61d3b5a 434 CHECK_PARAM(PARAM_QEIx(QEIx));
Michael J. Spencer 2:1df0b61d3b5a 435 CHECK_PARAM(PARAM_QEI_INTFLAG(ulIntType));
Michael J. Spencer 2:1df0b61d3b5a 436
Michael J. Spencer 2:1df0b61d3b5a 437 QEIx->QEISET = ulIntType;
Michael J. Spencer 2:1df0b61d3b5a 438 }
Michael J. Spencer 2:1df0b61d3b5a 439
Michael J. Spencer 2:1df0b61d3b5a 440 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 441 * @brief Clear (force) specified interrupt (pending) in QEI peripheral
Michael J. Spencer 2:1df0b61d3b5a 442 * @param[in] QEIx QEI peripheral, should be LPC_QEI
Michael J. Spencer 2:1df0b61d3b5a 443 * @param[in] ulIntType Interrupt Flag Status type, should be:
Michael J. Spencer 2:1df0b61d3b5a 444 - QEI_INTFLAG_INX_Int: index pulse was detected interrupt
Michael J. Spencer 2:1df0b61d3b5a 445 - QEI_INTFLAG_TIM_Int: Velocity timer over flow interrupt
Michael J. Spencer 2:1df0b61d3b5a 446 - QEI_INTFLAG_VELC_Int: Capture velocity is less than compare interrupt
Michael J. Spencer 2:1df0b61d3b5a 447 - QEI_INTFLAG_DIR_Int: Change of direction interrupt
Michael J. Spencer 2:1df0b61d3b5a 448 - QEI_INTFLAG_ERR_Int: An encoder phase error interrupt
Michael J. Spencer 2:1df0b61d3b5a 449 - QEI_INTFLAG_ENCLK_Int: An encoder clock pulse was detected interrupt
Michael J. Spencer 2:1df0b61d3b5a 450 - QEI_INTFLAG_POS0_Int: position 0 compare value is equal to the
Michael J. Spencer 2:1df0b61d3b5a 451 current position interrupt
Michael J. Spencer 2:1df0b61d3b5a 452 - QEI_INTFLAG_POS1_Int: position 1 compare value is equal to the
Michael J. Spencer 2:1df0b61d3b5a 453 current position interrupt
Michael J. Spencer 2:1df0b61d3b5a 454 - QEI_INTFLAG_POS2_Int: position 2 compare value is equal to the
Michael J. Spencer 2:1df0b61d3b5a 455 current position interrupt
Michael J. Spencer 2:1df0b61d3b5a 456 - QEI_INTFLAG_REV_Int: Index compare value is equal to the current
Michael J. Spencer 2:1df0b61d3b5a 457 index count interrupt
Michael J. Spencer 2:1df0b61d3b5a 458 - QEI_INTFLAG_POS0REV_Int: Combined position 0 and revolution count interrupt
Michael J. Spencer 2:1df0b61d3b5a 459 - QEI_INTFLAG_POS1REV_Int: Combined position 1 and revolution count interrupt
Michael J. Spencer 2:1df0b61d3b5a 460 - QEI_INTFLAG_POS2REV_Int: Combined position 2 and revolution count interrupt
Michael J. Spencer 2:1df0b61d3b5a 461 * @return None
Michael J. Spencer 2:1df0b61d3b5a 462 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 463 void QEI_IntClear(LPC_QEI_TypeDef *QEIx, uint32_t ulIntType)
Michael J. Spencer 2:1df0b61d3b5a 464 {
Michael J. Spencer 2:1df0b61d3b5a 465 CHECK_PARAM(PARAM_QEIx(QEIx));
Michael J. Spencer 2:1df0b61d3b5a 466 CHECK_PARAM(PARAM_QEI_INTFLAG(ulIntType));
Michael J. Spencer 2:1df0b61d3b5a 467
Michael J. Spencer 2:1df0b61d3b5a 468 QEIx->QEICLR = ulIntType;
Michael J. Spencer 2:1df0b61d3b5a 469 }
Michael J. Spencer 2:1df0b61d3b5a 470
Michael J. Spencer 2:1df0b61d3b5a 471
Michael J. Spencer 2:1df0b61d3b5a 472 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 473 * @brief Calculates the actual velocity in RPM passed via velocity
Michael J. Spencer 2:1df0b61d3b5a 474 * capture value and Pulse Per Round (of the encoder) value
Michael J. Spencer 2:1df0b61d3b5a 475 * parameter input.
Michael J. Spencer 2:1df0b61d3b5a 476 * @param[in] QEIx QEI peripheral, should be LPC_QEI
Michael J. Spencer 2:1df0b61d3b5a 477 * @param[in] ulVelCapValue Velocity capture input value that can
Michael J. Spencer 2:1df0b61d3b5a 478 * be got from QEI_GetVelocityCap() function
Michael J. Spencer 2:1df0b61d3b5a 479 * @param[in] ulPPR Pulse per round of encoder
Michael J. Spencer 2:1df0b61d3b5a 480 * @return The actual value of velocity in RPM (Round per minute)
Michael J. Spencer 2:1df0b61d3b5a 481 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 482 uint32_t QEI_CalculateRPM(LPC_QEI_TypeDef *QEIx, uint32_t ulVelCapValue, uint32_t ulPPR)
Michael J. Spencer 2:1df0b61d3b5a 483 {
Michael J. Spencer 2:1df0b61d3b5a 484 uint64_t rpm, clock, Load, edges;
Michael J. Spencer 2:1df0b61d3b5a 485
Michael J. Spencer 2:1df0b61d3b5a 486 // Get current Clock rate for timer input
Michael J. Spencer 2:1df0b61d3b5a 487 clock = (uint64_t)CLKPWR_GetPCLK(CLKPWR_PCLKSEL_QEI);
Michael J. Spencer 2:1df0b61d3b5a 488 // Get Timer load value (velocity capture period)
Michael J. Spencer 2:1df0b61d3b5a 489 Load = (uint64_t)(QEIx->QEILOAD + 1);
Michael J. Spencer 2:1df0b61d3b5a 490 // Get Edge
Michael J. Spencer 2:1df0b61d3b5a 491 edges = (uint64_t)((QEIx->QEICONF & QEI_CONF_CAPMODE) ? 4 : 2);
Michael J. Spencer 2:1df0b61d3b5a 492 // Calculate RPM
Michael J. Spencer 2:1df0b61d3b5a 493 rpm = ((clock * ulVelCapValue * 60) / (Load * ulPPR * edges));
Michael J. Spencer 2:1df0b61d3b5a 494
Michael J. Spencer 2:1df0b61d3b5a 495 return (uint32_t)(rpm);
Michael J. Spencer 2:1df0b61d3b5a 496 }
Michael J. Spencer 2:1df0b61d3b5a 497
Michael J. Spencer 2:1df0b61d3b5a 498
Michael J. Spencer 2:1df0b61d3b5a 499 /**
Michael J. Spencer 2:1df0b61d3b5a 500 * @}
Michael J. Spencer 2:1df0b61d3b5a 501 */
Michael J. Spencer 2:1df0b61d3b5a 502
Michael J. Spencer 2:1df0b61d3b5a 503 #endif /* _QEI */
Michael J. Spencer 2:1df0b61d3b5a 504
Michael J. Spencer 2:1df0b61d3b5a 505 /**
Michael J. Spencer 2:1df0b61d3b5a 506 * @}
Michael J. Spencer 2:1df0b61d3b5a 507 */
Michael J. Spencer 2:1df0b61d3b5a 508
Michael J. Spencer 2:1df0b61d3b5a 509 /* --------------------------------- End Of File ------------------------------ */
Michael J. Spencer 2:1df0b61d3b5a 510
Michael J. Spencer 2:1df0b61d3b5a 511 #endif /* __LPC17XX__ */