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_adc.c 2010-06-18
Michael J. Spencer 2:1df0b61d3b5a 5 *//**
Michael J. Spencer 2:1df0b61d3b5a 6 * @file lpc17xx_adc.c
Michael J. Spencer 2:1df0b61d3b5a 7 * @brief Contains all functions support for ADC firmware library on LPC17xx
Michael J. Spencer 2:1df0b61d3b5a 8 * @version 3.1
Michael J. Spencer 2:1df0b61d3b5a 9 * @date 26. July. 2011
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) 2011, 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 ADC
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_adc.h"
Michael J. Spencer 2:1df0b61d3b5a 35 #include "lpc17xx_clkpwr.h"
Michael J. Spencer 2:1df0b61d3b5a 36
Michael J. Spencer 2:1df0b61d3b5a 37 /* If this source file built with example, the LPC17xx FW library configuration
Michael J. Spencer 2:1df0b61d3b5a 38 * file in each example directory ("lpc17xx_libcfg.h") must be included,
Michael J. Spencer 2:1df0b61d3b5a 39 * otherwise the default FW library configuration file must be included instead
Michael J. Spencer 2:1df0b61d3b5a 40 */
Michael J. Spencer 2:1df0b61d3b5a 41 #ifdef __BUILD_WITH_EXAMPLE__
Michael J. Spencer 2:1df0b61d3b5a 42 #include "lpc17xx_libcfg.h"
Michael J. Spencer 2:1df0b61d3b5a 43 #else
Michael J. Spencer 2:1df0b61d3b5a 44 #include "lpc17xx_libcfg_default.h"
Michael J. Spencer 2:1df0b61d3b5a 45 #endif /* __BUILD_WITH_EXAMPLE__ */
Michael J. Spencer 2:1df0b61d3b5a 46
Michael J. Spencer 2:1df0b61d3b5a 47
Michael J. Spencer 2:1df0b61d3b5a 48 #ifdef _ADC
Michael J. Spencer 2:1df0b61d3b5a 49
Michael J. Spencer 2:1df0b61d3b5a 50 /* Public Functions ----------------------------------------------------------- */
Michael J. Spencer 2:1df0b61d3b5a 51 /** @addtogroup ADC_Public_Functions
Michael J. Spencer 2:1df0b61d3b5a 52 * @{
Michael J. Spencer 2:1df0b61d3b5a 53 */
Michael J. Spencer 2:1df0b61d3b5a 54
Michael J. Spencer 2:1df0b61d3b5a 55 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 56 * @brief Initial for ADC
Michael J. Spencer 2:1df0b61d3b5a 57 * + Set bit PCADC
Michael J. Spencer 2:1df0b61d3b5a 58 * + Set clock for ADC
Michael J. Spencer 2:1df0b61d3b5a 59 * + Set Clock Frequency
Michael J. Spencer 2:1df0b61d3b5a 60 * @param[in] ADCx pointer to LPC_ADC_TypeDef, should be: LPC_ADC
Michael J. Spencer 2:1df0b61d3b5a 61 * @param[in] rate ADC conversion rate, should be <=200KHz
Michael J. Spencer 2:1df0b61d3b5a 62 * @return None
Michael J. Spencer 2:1df0b61d3b5a 63 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 64 void ADC_Init(LPC_ADC_TypeDef *ADCx, uint32_t rate)
Michael J. Spencer 2:1df0b61d3b5a 65 {
Michael J. Spencer 2:1df0b61d3b5a 66 uint32_t ADCPClk, temp, tmp;
Michael J. Spencer 2:1df0b61d3b5a 67
Michael J. Spencer 2:1df0b61d3b5a 68 CHECK_PARAM(PARAM_ADCx(ADCx));
Michael J. Spencer 2:1df0b61d3b5a 69 CHECK_PARAM(PARAM_ADC_RATE(rate));
Michael J. Spencer 2:1df0b61d3b5a 70
Michael J. Spencer 2:1df0b61d3b5a 71 // Turn on power and clock
Michael J. Spencer 2:1df0b61d3b5a 72 CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCAD, ENABLE);
Michael J. Spencer 2:1df0b61d3b5a 73
Michael J. Spencer 2:1df0b61d3b5a 74 ADCx->ADCR = 0;
Michael J. Spencer 2:1df0b61d3b5a 75
Michael J. Spencer 2:1df0b61d3b5a 76 //Enable PDN bit
Michael J. Spencer 2:1df0b61d3b5a 77 tmp = ADC_CR_PDN;
Michael J. Spencer 2:1df0b61d3b5a 78 // Set clock frequency
Michael J. Spencer 2:1df0b61d3b5a 79 ADCPClk = CLKPWR_GetPCLK(CLKPWR_PCLKSEL_ADC);
Michael J. Spencer 2:1df0b61d3b5a 80 /* The APB clock (PCLK_ADC0) is divided by (CLKDIV+1) to produce the clock for
Michael J. Spencer 2:1df0b61d3b5a 81 * A/D converter, which should be less than or equal to 13MHz.
Michael J. Spencer 2:1df0b61d3b5a 82 * A fully conversion requires 65 of these clocks.
Michael J. Spencer 2:1df0b61d3b5a 83 * ADC clock = PCLK_ADC0 / (CLKDIV + 1);
Michael J. Spencer 2:1df0b61d3b5a 84 * ADC rate = ADC clock / 65;
Michael J. Spencer 2:1df0b61d3b5a 85 */
Michael J. Spencer 2:1df0b61d3b5a 86 temp = rate * 65;
Michael J. Spencer 2:1df0b61d3b5a 87 temp = (ADCPClk * 2 + temp)/(2 * temp) - 1; //get the round value by fomular: (2*A + B)/(2*B)
Michael J. Spencer 2:1df0b61d3b5a 88 tmp |= ADC_CR_CLKDIV(temp);
Michael J. Spencer 2:1df0b61d3b5a 89
Michael J. Spencer 2:1df0b61d3b5a 90 ADCx->ADCR = tmp;
Michael J. Spencer 2:1df0b61d3b5a 91 }
Michael J. Spencer 2:1df0b61d3b5a 92
Michael J. Spencer 2:1df0b61d3b5a 93
Michael J. Spencer 2:1df0b61d3b5a 94 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 95 * @brief Close ADC
Michael J. Spencer 2:1df0b61d3b5a 96 * @param[in] ADCx pointer to LPC_ADC_TypeDef, should be: LPC_ADC
Michael J. Spencer 2:1df0b61d3b5a 97 * @return None
Michael J. Spencer 2:1df0b61d3b5a 98 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 99 void ADC_DeInit(LPC_ADC_TypeDef *ADCx)
Michael J. Spencer 2:1df0b61d3b5a 100 {
Michael J. Spencer 2:1df0b61d3b5a 101 CHECK_PARAM(PARAM_ADCx(ADCx));
Michael J. Spencer 2:1df0b61d3b5a 102
Michael J. Spencer 2:1df0b61d3b5a 103 // Clear PDN bit
Michael J. Spencer 2:1df0b61d3b5a 104 ADCx->ADCR &= ~ADC_CR_PDN;
Michael J. Spencer 2:1df0b61d3b5a 105 // Turn on power and clock
Michael J. Spencer 2:1df0b61d3b5a 106 CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCAD, DISABLE);
Michael J. Spencer 2:1df0b61d3b5a 107 }
Michael J. Spencer 2:1df0b61d3b5a 108
Michael J. Spencer 2:1df0b61d3b5a 109
Michael J. Spencer 2:1df0b61d3b5a 110 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 111 * @brief Get Result conversion from A/D data register
Michael J. Spencer 2:1df0b61d3b5a 112 * @param[in] channel number which want to read back the result
Michael J. Spencer 2:1df0b61d3b5a 113 * @return Result of conversion
Michael J. Spencer 2:1df0b61d3b5a 114 *********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 115 uint32_t ADC_GetData(uint32_t channel)
Michael J. Spencer 2:1df0b61d3b5a 116 {
Michael J. Spencer 2:1df0b61d3b5a 117 uint32_t adc_value;
Michael J. Spencer 2:1df0b61d3b5a 118
Michael J. Spencer 2:1df0b61d3b5a 119 CHECK_PARAM(PARAM_ADC_CHANNEL_SELECTION(channel));
Michael J. Spencer 2:1df0b61d3b5a 120
Michael J. Spencer 2:1df0b61d3b5a 121 adc_value = *(const volatile uint32_t *)((&LPC_ADC->ADDR0) + channel);
Michael J. Spencer 2:1df0b61d3b5a 122 return ADC_GDR_RESULT(adc_value);
Michael J. Spencer 2:1df0b61d3b5a 123 }
Michael J. Spencer 2:1df0b61d3b5a 124
Michael J. Spencer 2:1df0b61d3b5a 125 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 126 * @brief Set start mode for ADC
Michael J. Spencer 2:1df0b61d3b5a 127 * @param[in] ADCx pointer to LPC_ADC_TypeDef, should be: LPC_ADC
Michael J. Spencer 2:1df0b61d3b5a 128 * @param[in] start_mode Start mode choose one of modes in
Michael J. Spencer 2:1df0b61d3b5a 129 * 'ADC_START_OPT' enumeration type definition, should be:
Michael J. Spencer 2:1df0b61d3b5a 130 * - ADC_START_CONTINUOUS
Michael J. Spencer 2:1df0b61d3b5a 131 * - ADC_START_NOW
Michael J. Spencer 2:1df0b61d3b5a 132 * - ADC_START_ON_EINT0
Michael J. Spencer 2:1df0b61d3b5a 133 * - ADC_START_ON_CAP01
Michael J. Spencer 2:1df0b61d3b5a 134 * - ADC_START_ON_MAT01
Michael J. Spencer 2:1df0b61d3b5a 135 * - ADC_START_ON_MAT03
Michael J. Spencer 2:1df0b61d3b5a 136 * - ADC_START_ON_MAT10
Michael J. Spencer 2:1df0b61d3b5a 137 * - ADC_START_ON_MAT11
Michael J. Spencer 2:1df0b61d3b5a 138 * @return None
Michael J. Spencer 2:1df0b61d3b5a 139 *********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 140 void ADC_StartCmd(LPC_ADC_TypeDef *ADCx, uint8_t start_mode)
Michael J. Spencer 2:1df0b61d3b5a 141 {
Michael J. Spencer 2:1df0b61d3b5a 142 CHECK_PARAM(PARAM_ADCx(ADCx));
Michael J. Spencer 2:1df0b61d3b5a 143 CHECK_PARAM(PARAM_ADC_START_OPT(start_mode));
Michael J. Spencer 2:1df0b61d3b5a 144
Michael J. Spencer 2:1df0b61d3b5a 145 ADCx->ADCR &= ~ADC_CR_START_MASK;
Michael J. Spencer 2:1df0b61d3b5a 146 ADCx->ADCR |=ADC_CR_START_MODE_SEL((uint32_t)start_mode);
Michael J. Spencer 2:1df0b61d3b5a 147 }
Michael J. Spencer 2:1df0b61d3b5a 148
Michael J. Spencer 2:1df0b61d3b5a 149
Michael J. Spencer 2:1df0b61d3b5a 150 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 151 * @brief ADC Burst mode setting
Michael J. Spencer 2:1df0b61d3b5a 152 * @param[in] ADCx pointer to LPC_ADC_TypeDef, should be: LPC_ADC
Michael J. Spencer 2:1df0b61d3b5a 153 * @param[in] NewState
Michael J. Spencer 2:1df0b61d3b5a 154 * - 1: Set Burst mode
Michael J. Spencer 2:1df0b61d3b5a 155 * - 0: reset Burst mode
Michael J. Spencer 2:1df0b61d3b5a 156 * @return None
Michael J. Spencer 2:1df0b61d3b5a 157 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 158 void ADC_BurstCmd(LPC_ADC_TypeDef *ADCx, FunctionalState NewState)
Michael J. Spencer 2:1df0b61d3b5a 159 {
Michael J. Spencer 2:1df0b61d3b5a 160 CHECK_PARAM(PARAM_ADCx(ADCx));
Michael J. Spencer 2:1df0b61d3b5a 161
Michael J. Spencer 2:1df0b61d3b5a 162 ADCx->ADCR &= ~ADC_CR_BURST;
Michael J. Spencer 2:1df0b61d3b5a 163 if (NewState){
Michael J. Spencer 2:1df0b61d3b5a 164 ADCx->ADCR |= ADC_CR_BURST;
Michael J. Spencer 2:1df0b61d3b5a 165 }
Michael J. Spencer 2:1df0b61d3b5a 166 }
Michael J. Spencer 2:1df0b61d3b5a 167
Michael J. Spencer 2:1df0b61d3b5a 168 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 169 * @brief Set AD conversion in power mode
Michael J. Spencer 2:1df0b61d3b5a 170 * @param[in] ADCx pointer to LPC_ADC_TypeDef, should be: LPC_ADC
Michael J. Spencer 2:1df0b61d3b5a 171 * @param[in] NewState
Michael J. Spencer 2:1df0b61d3b5a 172 * - 1: AD converter is optional
Michael J. Spencer 2:1df0b61d3b5a 173 * - 0: AD Converter is in power down mode
Michael J. Spencer 2:1df0b61d3b5a 174 * @return None
Michael J. Spencer 2:1df0b61d3b5a 175 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 176 void ADC_PowerdownCmd(LPC_ADC_TypeDef *ADCx, FunctionalState NewState)
Michael J. Spencer 2:1df0b61d3b5a 177 {
Michael J. Spencer 2:1df0b61d3b5a 178 CHECK_PARAM(PARAM_ADCx(ADCx));
Michael J. Spencer 2:1df0b61d3b5a 179
Michael J. Spencer 2:1df0b61d3b5a 180 ADCx->ADCR &= ~ADC_CR_PDN;
Michael J. Spencer 2:1df0b61d3b5a 181 if (NewState){
Michael J. Spencer 2:1df0b61d3b5a 182 ADCx->ADCR |= ADC_CR_PDN;
Michael J. Spencer 2:1df0b61d3b5a 183 }
Michael J. Spencer 2:1df0b61d3b5a 184 }
Michael J. Spencer 2:1df0b61d3b5a 185
Michael J. Spencer 2:1df0b61d3b5a 186 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 187 * @brief Set Edge start configuration
Michael J. Spencer 2:1df0b61d3b5a 188 * @param[in] ADCx pointer to LPC_ADC_TypeDef, should be: LPC_ADC
Michael J. Spencer 2:1df0b61d3b5a 189 * @param[in] EdgeOption is ADC_START_ON_RISING and ADC_START_ON_FALLING
Michael J. Spencer 2:1df0b61d3b5a 190 * 0:ADC_START_ON_RISING
Michael J. Spencer 2:1df0b61d3b5a 191 * 1:ADC_START_ON_FALLING
Michael J. Spencer 2:1df0b61d3b5a 192 * @return None
Michael J. Spencer 2:1df0b61d3b5a 193 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 194 void ADC_EdgeStartConfig(LPC_ADC_TypeDef *ADCx, uint8_t EdgeOption)
Michael J. Spencer 2:1df0b61d3b5a 195 {
Michael J. Spencer 2:1df0b61d3b5a 196 CHECK_PARAM(PARAM_ADCx(ADCx));
Michael J. Spencer 2:1df0b61d3b5a 197 CHECK_PARAM(PARAM_ADC_START_ON_EDGE_OPT(EdgeOption));
Michael J. Spencer 2:1df0b61d3b5a 198
Michael J. Spencer 2:1df0b61d3b5a 199 ADCx->ADCR &= ~ADC_CR_EDGE;
Michael J. Spencer 2:1df0b61d3b5a 200 if (EdgeOption){
Michael J. Spencer 2:1df0b61d3b5a 201 ADCx->ADCR |= ADC_CR_EDGE;
Michael J. Spencer 2:1df0b61d3b5a 202 }
Michael J. Spencer 2:1df0b61d3b5a 203 }
Michael J. Spencer 2:1df0b61d3b5a 204
Michael J. Spencer 2:1df0b61d3b5a 205 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 206 * @brief ADC interrupt configuration
Michael J. Spencer 2:1df0b61d3b5a 207 * @param[in] ADCx pointer to LPC_ADC_TypeDef, should be: LPC_ADC
Michael J. Spencer 2:1df0b61d3b5a 208 * @param[in] IntType: type of interrupt, should be:
Michael J. Spencer 2:1df0b61d3b5a 209 * - ADC_ADINTEN0: Interrupt channel 0
Michael J. Spencer 2:1df0b61d3b5a 210 * - ADC_ADINTEN1: Interrupt channel 1
Michael J. Spencer 2:1df0b61d3b5a 211 * ...
Michael J. Spencer 2:1df0b61d3b5a 212 * - ADC_ADINTEN7: Interrupt channel 7
Michael J. Spencer 2:1df0b61d3b5a 213 * - ADC_ADGINTEN: Individual channel/global flag done generate an interrupt
Michael J. Spencer 2:1df0b61d3b5a 214 * @param[in] NewState:
Michael J. Spencer 2:1df0b61d3b5a 215 * - SET : enable ADC interrupt
Michael J. Spencer 2:1df0b61d3b5a 216 * - RESET: disable ADC interrupt
Michael J. Spencer 2:1df0b61d3b5a 217 * @return None
Michael J. Spencer 2:1df0b61d3b5a 218 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 219 void ADC_IntConfig (LPC_ADC_TypeDef *ADCx, ADC_TYPE_INT_OPT IntType, FunctionalState NewState)
Michael J. Spencer 2:1df0b61d3b5a 220 {
Michael J. Spencer 2:1df0b61d3b5a 221 CHECK_PARAM(PARAM_ADCx(ADCx));
Michael J. Spencer 2:1df0b61d3b5a 222 CHECK_PARAM(PARAM_ADC_TYPE_INT_OPT(IntType));
Michael J. Spencer 2:1df0b61d3b5a 223
Michael J. Spencer 2:1df0b61d3b5a 224 ADCx->ADINTEN &= ~ADC_INTEN_CH(IntType);
Michael J. Spencer 2:1df0b61d3b5a 225 if (NewState){
Michael J. Spencer 2:1df0b61d3b5a 226 ADCx->ADINTEN |= ADC_INTEN_CH(IntType);
Michael J. Spencer 2:1df0b61d3b5a 227 }
Michael J. Spencer 2:1df0b61d3b5a 228 }
Michael J. Spencer 2:1df0b61d3b5a 229
Michael J. Spencer 2:1df0b61d3b5a 230 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 231 * @brief Enable/Disable ADC channel number
Michael J. Spencer 2:1df0b61d3b5a 232 * @param[in] ADCx pointer to LPC_ADC_TypeDef, should be: LPC_ADC
Michael J. Spencer 2:1df0b61d3b5a 233 * @param[in] Channel channel number
Michael J. Spencer 2:1df0b61d3b5a 234 * @param[in] NewState Enable or Disable
Michael J. Spencer 2:1df0b61d3b5a 235 *
Michael J. Spencer 2:1df0b61d3b5a 236 * @return None
Michael J. Spencer 2:1df0b61d3b5a 237 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 238 void ADC_ChannelCmd (LPC_ADC_TypeDef *ADCx, uint8_t Channel, FunctionalState NewState)
Michael J. Spencer 2:1df0b61d3b5a 239 {
Michael J. Spencer 2:1df0b61d3b5a 240 CHECK_PARAM(PARAM_ADCx(ADCx));
Michael J. Spencer 2:1df0b61d3b5a 241 CHECK_PARAM(PARAM_ADC_CHANNEL_SELECTION(Channel));
Michael J. Spencer 2:1df0b61d3b5a 242
Michael J. Spencer 2:1df0b61d3b5a 243 if (NewState == ENABLE) {
Michael J. Spencer 2:1df0b61d3b5a 244 ADCx->ADCR |= ADC_CR_CH_SEL(Channel);
Michael J. Spencer 2:1df0b61d3b5a 245 } else {
Michael J. Spencer 2:1df0b61d3b5a 246 ADCx->ADCR &= ~ADC_CR_CH_SEL(Channel);
Michael J. Spencer 2:1df0b61d3b5a 247 }
Michael J. Spencer 2:1df0b61d3b5a 248 }
Michael J. Spencer 2:1df0b61d3b5a 249
Michael J. Spencer 2:1df0b61d3b5a 250 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 251 * @brief Get ADC result
Michael J. Spencer 2:1df0b61d3b5a 252 * @param[in] ADCx pointer to LPC_ADC_TypeDef, should be: LPC_ADC
Michael J. Spencer 2:1df0b61d3b5a 253 * @param[in] channel: channel number, should be 0...7
Michael J. Spencer 2:1df0b61d3b5a 254 * @return Data conversion
Michael J. Spencer 2:1df0b61d3b5a 255 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 256 uint16_t ADC_ChannelGetData(LPC_ADC_TypeDef *ADCx, uint8_t channel)
Michael J. Spencer 2:1df0b61d3b5a 257 {
Michael J. Spencer 2:1df0b61d3b5a 258 uint32_t adc_value;
Michael J. Spencer 2:1df0b61d3b5a 259
Michael J. Spencer 2:1df0b61d3b5a 260 CHECK_PARAM(PARAM_ADCx(ADCx));
Michael J. Spencer 2:1df0b61d3b5a 261 CHECK_PARAM(PARAM_ADC_CHANNEL_SELECTION(channel));
Michael J. Spencer 2:1df0b61d3b5a 262
Michael J. Spencer 2:1df0b61d3b5a 263 adc_value = *(const volatile uint32_t *) ((&ADCx->ADDR0) + channel);
Michael J. Spencer 2:1df0b61d3b5a 264 return ADC_DR_RESULT(adc_value);
Michael J. Spencer 2:1df0b61d3b5a 265 }
Michael J. Spencer 2:1df0b61d3b5a 266
Michael J. Spencer 2:1df0b61d3b5a 267 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 268 * @brief Get ADC Chanel status from ADC data register
Michael J. Spencer 2:1df0b61d3b5a 269 * @param[in] ADCx pointer to LPC_ADC_TypeDef, should be: LPC_ADC
Michael J. Spencer 2:1df0b61d3b5a 270 * @param[in] channel: channel number, should be 0..7
Michael J. Spencer 2:1df0b61d3b5a 271 * @param[in] StatusType
Michael J. Spencer 2:1df0b61d3b5a 272 * 0:Burst status
Michael J. Spencer 2:1df0b61d3b5a 273 * 1:Done status
Michael J. Spencer 2:1df0b61d3b5a 274 * @return SET / RESET
Michael J. Spencer 2:1df0b61d3b5a 275 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 276 FlagStatus ADC_ChannelGetStatus(LPC_ADC_TypeDef *ADCx, uint8_t channel, uint32_t StatusType)
Michael J. Spencer 2:1df0b61d3b5a 277 {
Michael J. Spencer 2:1df0b61d3b5a 278 uint32_t temp;
Michael J. Spencer 2:1df0b61d3b5a 279
Michael J. Spencer 2:1df0b61d3b5a 280 CHECK_PARAM(PARAM_ADCx(ADCx));
Michael J. Spencer 2:1df0b61d3b5a 281 CHECK_PARAM(PARAM_ADC_CHANNEL_SELECTION(channel));
Michael J. Spencer 2:1df0b61d3b5a 282 CHECK_PARAM(PARAM_ADC_DATA_STATUS(StatusType));
Michael J. Spencer 2:1df0b61d3b5a 283
Michael J. Spencer 2:1df0b61d3b5a 284 temp = *(const volatile uint32_t *) ((&ADCx->ADDR0) + channel);
Michael J. Spencer 2:1df0b61d3b5a 285 if (StatusType) {
Michael J. Spencer 2:1df0b61d3b5a 286 temp &= ADC_DR_DONE_FLAG;
Michael J. Spencer 2:1df0b61d3b5a 287 }else{
Michael J. Spencer 2:1df0b61d3b5a 288 temp &= ADC_DR_OVERRUN_FLAG;
Michael J. Spencer 2:1df0b61d3b5a 289 }
Michael J. Spencer 2:1df0b61d3b5a 290 if (temp) {
Michael J. Spencer 2:1df0b61d3b5a 291 return SET;
Michael J. Spencer 2:1df0b61d3b5a 292 } else {
Michael J. Spencer 2:1df0b61d3b5a 293 return RESET;
Michael J. Spencer 2:1df0b61d3b5a 294 }
Michael J. Spencer 2:1df0b61d3b5a 295
Michael J. Spencer 2:1df0b61d3b5a 296 }
Michael J. Spencer 2:1df0b61d3b5a 297
Michael J. Spencer 2:1df0b61d3b5a 298 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 299 * @brief Get ADC Data from AD Global register
Michael J. Spencer 2:1df0b61d3b5a 300 * @param[in] ADCx pointer to LPC_ADC_TypeDef, should be: LPC_ADC
Michael J. Spencer 2:1df0b61d3b5a 301 * @return Result of conversion
Michael J. Spencer 2:1df0b61d3b5a 302 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 303 uint32_t ADC_GlobalGetData(LPC_ADC_TypeDef *ADCx)
Michael J. Spencer 2:1df0b61d3b5a 304 {
Michael J. Spencer 2:1df0b61d3b5a 305 CHECK_PARAM(PARAM_ADCx(ADCx));
Michael J. Spencer 2:1df0b61d3b5a 306
Michael J. Spencer 2:1df0b61d3b5a 307 return ((uint32_t)(ADCx->ADGDR));
Michael J. Spencer 2:1df0b61d3b5a 308 }
Michael J. Spencer 2:1df0b61d3b5a 309
Michael J. Spencer 2:1df0b61d3b5a 310 /*********************************************************************//**
Michael J. Spencer 2:1df0b61d3b5a 311 * @brief Get ADC Chanel status from AD global data register
Michael J. Spencer 2:1df0b61d3b5a 312 * @param[in] ADCx pointer to LPC_ADC_TypeDef, should be: LPC_ADC
Michael J. Spencer 2:1df0b61d3b5a 313 * @param[in] StatusType
Michael J. Spencer 2:1df0b61d3b5a 314 * 0:Burst status
Michael J. Spencer 2:1df0b61d3b5a 315 * 1:Done status
Michael J. Spencer 2:1df0b61d3b5a 316 * @return SET / RESET
Michael J. Spencer 2:1df0b61d3b5a 317 **********************************************************************/
Michael J. Spencer 2:1df0b61d3b5a 318 FlagStatus ADC_GlobalGetStatus(LPC_ADC_TypeDef *ADCx, uint32_t StatusType)
Michael J. Spencer 2:1df0b61d3b5a 319 {
Michael J. Spencer 2:1df0b61d3b5a 320 uint32_t temp;
Michael J. Spencer 2:1df0b61d3b5a 321
Michael J. Spencer 2:1df0b61d3b5a 322 CHECK_PARAM(PARAM_ADCx(ADCx));
Michael J. Spencer 2:1df0b61d3b5a 323 CHECK_PARAM(PARAM_ADC_DATA_STATUS(StatusType));
Michael J. Spencer 2:1df0b61d3b5a 324
Michael J. Spencer 2:1df0b61d3b5a 325 temp = ADCx->ADGDR;
Michael J. Spencer 2:1df0b61d3b5a 326 if (StatusType){
Michael J. Spencer 2:1df0b61d3b5a 327 temp &= ADC_DR_DONE_FLAG;
Michael J. Spencer 2:1df0b61d3b5a 328 }else{
Michael J. Spencer 2:1df0b61d3b5a 329 temp &= ADC_DR_OVERRUN_FLAG;
Michael J. Spencer 2:1df0b61d3b5a 330 }
Michael J. Spencer 2:1df0b61d3b5a 331 if (temp){
Michael J. Spencer 2:1df0b61d3b5a 332 return SET;
Michael J. Spencer 2:1df0b61d3b5a 333 }else{
Michael J. Spencer 2:1df0b61d3b5a 334 return RESET;
Michael J. Spencer 2:1df0b61d3b5a 335 }
Michael J. Spencer 2:1df0b61d3b5a 336 }
Michael J. Spencer 2:1df0b61d3b5a 337
Michael J. Spencer 2:1df0b61d3b5a 338 /**
Michael J. Spencer 2:1df0b61d3b5a 339 * @}
Michael J. Spencer 2:1df0b61d3b5a 340 */
Michael J. Spencer 2:1df0b61d3b5a 341
Michael J. Spencer 2:1df0b61d3b5a 342 #endif /* _ADC */
Michael J. Spencer 2:1df0b61d3b5a 343
Michael J. Spencer 2:1df0b61d3b5a 344 /**
Michael J. Spencer 2:1df0b61d3b5a 345 * @}
Michael J. Spencer 2:1df0b61d3b5a 346 */
Michael J. Spencer 2:1df0b61d3b5a 347
Michael J. Spencer 2:1df0b61d3b5a 348 /* --------------------------------- End Of File ------------------------------ */
Michael J. Spencer 2:1df0b61d3b5a 349
Michael J. Spencer 2:1df0b61d3b5a 350 #endif /* __LPC17XX__ */