NXP's driver library for LPC17xx, ported to mbed's online compiler. Not tested! I had to fix a lot of warings and found a couple of pretty obvious bugs, so the chances are there are more. Original: http://ics.nxp.com/support/documents/microcontrollers/zip/lpc17xx.cmsis.driver.library.zip
source/lpc17xx_adc.c@0:1063a091a062, 2010-02-17 (annotated)
- Committer:
- igorsk
- Date:
- Wed Feb 17 16:22:39 2010 +0000
- Revision:
- 0:1063a091a062
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
igorsk | 0:1063a091a062 | 1 | /** |
igorsk | 0:1063a091a062 | 2 | * @file : lpc17xx_adc.c |
igorsk | 0:1063a091a062 | 3 | * @brief : Contains all functions support for ADC firmware library on LPC17xx |
igorsk | 0:1063a091a062 | 4 | * @version : 1.0 |
igorsk | 0:1063a091a062 | 5 | * @date : 3. April. 2009 |
igorsk | 0:1063a091a062 | 6 | * @author : NgaDinh |
igorsk | 0:1063a091a062 | 7 | ************************************************************************** |
igorsk | 0:1063a091a062 | 8 | * Software that is described herein is for illustrative purposes only |
igorsk | 0:1063a091a062 | 9 | * which provides customers with programming information regarding the |
igorsk | 0:1063a091a062 | 10 | * products. This software is supplied "AS IS" without any warranties. |
igorsk | 0:1063a091a062 | 11 | * NXP Semiconductors assumes no responsibility or liability for the |
igorsk | 0:1063a091a062 | 12 | * use of the software, conveys no license or title under any patent, |
igorsk | 0:1063a091a062 | 13 | * copyright, or mask work right to the product. NXP Semiconductors |
igorsk | 0:1063a091a062 | 14 | * reserves the right to make changes in the software without |
igorsk | 0:1063a091a062 | 15 | * notification. NXP Semiconductors also make no representation or |
igorsk | 0:1063a091a062 | 16 | * warranty that such application will be suitable for the specified |
igorsk | 0:1063a091a062 | 17 | * use without further testing or modification. |
igorsk | 0:1063a091a062 | 18 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 19 | |
igorsk | 0:1063a091a062 | 20 | /* Peripheral group ----------------------------------------------------------- */ |
igorsk | 0:1063a091a062 | 21 | /** @addtogroup ADC |
igorsk | 0:1063a091a062 | 22 | * @{ |
igorsk | 0:1063a091a062 | 23 | */ |
igorsk | 0:1063a091a062 | 24 | |
igorsk | 0:1063a091a062 | 25 | /* Includes ------------------------------------------------------------------- */ |
igorsk | 0:1063a091a062 | 26 | #include "lpc17xx_adc.h" |
igorsk | 0:1063a091a062 | 27 | #include "lpc17xx_clkpwr.h" |
igorsk | 0:1063a091a062 | 28 | |
igorsk | 0:1063a091a062 | 29 | /* If this source file built with example, the LPC17xx FW library configuration |
igorsk | 0:1063a091a062 | 30 | * file in each example directory ("lpc17xx_libcfg.h") must be included, |
igorsk | 0:1063a091a062 | 31 | * otherwise the default FW library configuration file must be included instead |
igorsk | 0:1063a091a062 | 32 | */ |
igorsk | 0:1063a091a062 | 33 | #ifdef __BUILD_WITH_EXAMPLE__ |
igorsk | 0:1063a091a062 | 34 | #include "lpc17xx_libcfg.h" |
igorsk | 0:1063a091a062 | 35 | #else |
igorsk | 0:1063a091a062 | 36 | #include "lpc17xx_libcfg_default.h" |
igorsk | 0:1063a091a062 | 37 | #endif /* __BUILD_WITH_EXAMPLE__ */ |
igorsk | 0:1063a091a062 | 38 | |
igorsk | 0:1063a091a062 | 39 | |
igorsk | 0:1063a091a062 | 40 | #ifdef _ADC |
igorsk | 0:1063a091a062 | 41 | |
igorsk | 0:1063a091a062 | 42 | /* Public Functions ----------------------------------------------------------- */ |
igorsk | 0:1063a091a062 | 43 | /** @addtogroup ADC_Public_Functions |
igorsk | 0:1063a091a062 | 44 | * @{ |
igorsk | 0:1063a091a062 | 45 | */ |
igorsk | 0:1063a091a062 | 46 | |
igorsk | 0:1063a091a062 | 47 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 48 | * @brief Initial for ADC |
igorsk | 0:1063a091a062 | 49 | * - Set bit PCADC |
igorsk | 0:1063a091a062 | 50 | * - Set clock for ADC |
igorsk | 0:1063a091a062 | 51 | * - Set Clock Frequency |
igorsk | 0:1063a091a062 | 52 | * |
igorsk | 0:1063a091a062 | 53 | * @param[in] ADCx pointer to LPC_ADC_TypeDef |
igorsk | 0:1063a091a062 | 54 | * @param[in] ConvFreq Clock frequency |
igorsk | 0:1063a091a062 | 55 | * @return None |
igorsk | 0:1063a091a062 | 56 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 57 | void ADC_Init(LPC_ADC_TypeDef *ADCx, uint32_t ConvFreq) |
igorsk | 0:1063a091a062 | 58 | |
igorsk | 0:1063a091a062 | 59 | { |
igorsk | 0:1063a091a062 | 60 | uint32_t temp, tmp; |
igorsk | 0:1063a091a062 | 61 | |
igorsk | 0:1063a091a062 | 62 | CHECK_PARAM(PARAM_ADCx(ADCx)); |
igorsk | 0:1063a091a062 | 63 | CHECK_PARAM(PARAM_ADC_FREQUENCY(ConvFreq)); |
igorsk | 0:1063a091a062 | 64 | |
igorsk | 0:1063a091a062 | 65 | // Turn on power and clock |
igorsk | 0:1063a091a062 | 66 | CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCAD, ENABLE); |
igorsk | 0:1063a091a062 | 67 | // Set clock divider for ADC to 4 from CCLK as default |
igorsk | 0:1063a091a062 | 68 | // CLKPWR_SetPCLKDiv(CLKPWR_PCLKSEL_ADC,CLKPWR_PCLKSEL_CCLK_DIV_4); |
igorsk | 0:1063a091a062 | 69 | |
igorsk | 0:1063a091a062 | 70 | ADCx->ADCR = 0; |
igorsk | 0:1063a091a062 | 71 | |
igorsk | 0:1063a091a062 | 72 | //Enable PDN bit |
igorsk | 0:1063a091a062 | 73 | tmp = ADC_CR_PDN; |
igorsk | 0:1063a091a062 | 74 | // Set clock frequency |
igorsk | 0:1063a091a062 | 75 | temp = CLKPWR_GetPCLK(CLKPWR_PCLKSEL_ADC) ; |
igorsk | 0:1063a091a062 | 76 | temp = (temp /ConvFreq) - 1; |
igorsk | 0:1063a091a062 | 77 | tmp |= ADC_CR_CLKDIV(temp); |
igorsk | 0:1063a091a062 | 78 | |
igorsk | 0:1063a091a062 | 79 | ADCx->ADCR = tmp; |
igorsk | 0:1063a091a062 | 80 | } |
igorsk | 0:1063a091a062 | 81 | |
igorsk | 0:1063a091a062 | 82 | |
igorsk | 0:1063a091a062 | 83 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 84 | * @brief Close ADC |
igorsk | 0:1063a091a062 | 85 | * @param[in] ADCx pointer to ADC |
igorsk | 0:1063a091a062 | 86 | * @return None |
igorsk | 0:1063a091a062 | 87 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 88 | void ADC_DeInit(LPC_ADC_TypeDef *ADCx) |
igorsk | 0:1063a091a062 | 89 | { |
igorsk | 0:1063a091a062 | 90 | CHECK_PARAM(PARAM_ADCx(ADCx)); |
igorsk | 0:1063a091a062 | 91 | |
igorsk | 0:1063a091a062 | 92 | // Clear PDN bit |
igorsk | 0:1063a091a062 | 93 | ADCx->ADCR &= ~ADC_CR_PDN; |
igorsk | 0:1063a091a062 | 94 | // Turn on power and clock |
igorsk | 0:1063a091a062 | 95 | CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCAD, DISABLE); |
igorsk | 0:1063a091a062 | 96 | } |
igorsk | 0:1063a091a062 | 97 | |
igorsk | 0:1063a091a062 | 98 | |
igorsk | 0:1063a091a062 | 99 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 100 | * @brief Get Result conversion from A/D data register |
igorsk | 0:1063a091a062 | 101 | * @param[in] channel number which want to read back the result |
igorsk | 0:1063a091a062 | 102 | * @return Result of conversion |
igorsk | 0:1063a091a062 | 103 | *********************************************************************/ |
igorsk | 0:1063a091a062 | 104 | uint32_t ADC_GetData(uint32_t channel) |
igorsk | 0:1063a091a062 | 105 | { |
igorsk | 0:1063a091a062 | 106 | uint32_t adc_value; |
igorsk | 0:1063a091a062 | 107 | |
igorsk | 0:1063a091a062 | 108 | CHECK_PARAM(PARAM_ADC_CHANNEL_SELECTION(channel)); |
igorsk | 0:1063a091a062 | 109 | |
igorsk | 0:1063a091a062 | 110 | adc_value = *(uint32_t *)((&LPC_ADC->ADDR0) + channel); |
igorsk | 0:1063a091a062 | 111 | return ADC_GDR_RESULT(adc_value); |
igorsk | 0:1063a091a062 | 112 | } |
igorsk | 0:1063a091a062 | 113 | |
igorsk | 0:1063a091a062 | 114 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 115 | * @brief Set start mode for ADC |
igorsk | 0:1063a091a062 | 116 | * @param[in] ADCx pointer to LPC_ADC_TypeDef |
igorsk | 0:1063a091a062 | 117 | * @param[in] start_mode Start mode choose one of modes in |
igorsk | 0:1063a091a062 | 118 | * 'ADC_START_OPT' enumeration type definition |
igorsk | 0:1063a091a062 | 119 | * @return None |
igorsk | 0:1063a091a062 | 120 | *********************************************************************/ |
igorsk | 0:1063a091a062 | 121 | void ADC_StartCmd(LPC_ADC_TypeDef *ADCx, uint8_t start_mode) |
igorsk | 0:1063a091a062 | 122 | { |
igorsk | 0:1063a091a062 | 123 | CHECK_PARAM(PARAM_ADCx(ADCx)); |
igorsk | 0:1063a091a062 | 124 | CHECK_PARAM(PARAM_ADC_START_OPT(start_mode)); |
igorsk | 0:1063a091a062 | 125 | |
igorsk | 0:1063a091a062 | 126 | ADCx->ADCR &= ~ADC_CR_START_MASK; |
igorsk | 0:1063a091a062 | 127 | ADCx->ADCR |=ADC_CR_START_MODE_SEL((uint32_t)start_mode); |
igorsk | 0:1063a091a062 | 128 | } |
igorsk | 0:1063a091a062 | 129 | |
igorsk | 0:1063a091a062 | 130 | |
igorsk | 0:1063a091a062 | 131 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 132 | * @brief ADC Burst mode setting |
igorsk | 0:1063a091a062 | 133 | * |
igorsk | 0:1063a091a062 | 134 | * @param[in] ADCx pointer to ADC |
igorsk | 0:1063a091a062 | 135 | * @param[in] NewState |
igorsk | 0:1063a091a062 | 136 | * - 1: Set Burst mode |
igorsk | 0:1063a091a062 | 137 | * - 0: reset Burst mode |
igorsk | 0:1063a091a062 | 138 | * @return None |
igorsk | 0:1063a091a062 | 139 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 140 | void ADC_BurstCmd(LPC_ADC_TypeDef *ADCx, FunctionalState NewState) |
igorsk | 0:1063a091a062 | 141 | { |
igorsk | 0:1063a091a062 | 142 | CHECK_PARAM(PARAM_ADCx(ADCx)); |
igorsk | 0:1063a091a062 | 143 | |
igorsk | 0:1063a091a062 | 144 | ADCx->ADCR &= ~ADC_CR_BURST; |
igorsk | 0:1063a091a062 | 145 | if (NewState){ |
igorsk | 0:1063a091a062 | 146 | ADCx->ADCR |= ADC_CR_BURST; |
igorsk | 0:1063a091a062 | 147 | } |
igorsk | 0:1063a091a062 | 148 | |
igorsk | 0:1063a091a062 | 149 | } |
igorsk | 0:1063a091a062 | 150 | |
igorsk | 0:1063a091a062 | 151 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 152 | * @brief Set AD conversion in power mode |
igorsk | 0:1063a091a062 | 153 | * |
igorsk | 0:1063a091a062 | 154 | * @param[in] ADCx pointer to ADC |
igorsk | 0:1063a091a062 | 155 | * @param[in] NewState |
igorsk | 0:1063a091a062 | 156 | * - 1: AD converter is optional |
igorsk | 0:1063a091a062 | 157 | * - 0: AD Converter is in power down mode |
igorsk | 0:1063a091a062 | 158 | * @return None |
igorsk | 0:1063a091a062 | 159 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 160 | void ADC_PowerdownCmd(LPC_ADC_TypeDef *ADCx, FunctionalState NewState) |
igorsk | 0:1063a091a062 | 161 | { |
igorsk | 0:1063a091a062 | 162 | CHECK_PARAM(PARAM_ADCx(ADCx)); |
igorsk | 0:1063a091a062 | 163 | |
igorsk | 0:1063a091a062 | 164 | ADCx->ADCR &= ~ADC_CR_PDN; |
igorsk | 0:1063a091a062 | 165 | if (NewState){ |
igorsk | 0:1063a091a062 | 166 | ADCx->ADCR |= ADC_CR_PDN; |
igorsk | 0:1063a091a062 | 167 | } |
igorsk | 0:1063a091a062 | 168 | } |
igorsk | 0:1063a091a062 | 169 | |
igorsk | 0:1063a091a062 | 170 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 171 | * @brief Set Edge start configuration |
igorsk | 0:1063a091a062 | 172 | * |
igorsk | 0:1063a091a062 | 173 | * @param[in] ADCx pointer to ADC |
igorsk | 0:1063a091a062 | 174 | * @param[in] EdgeOption is ADC_START_ON_RISING and ADC_START_ON_FALLING |
igorsk | 0:1063a091a062 | 175 | * 0:ADC_START_ON_RISING |
igorsk | 0:1063a091a062 | 176 | * 1:ADC_START_ON_FALLING |
igorsk | 0:1063a091a062 | 177 | * |
igorsk | 0:1063a091a062 | 178 | * @return None |
igorsk | 0:1063a091a062 | 179 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 180 | void ADC_EdgeStartConfig(LPC_ADC_TypeDef *ADCx, uint8_t EdgeOption) |
igorsk | 0:1063a091a062 | 181 | { |
igorsk | 0:1063a091a062 | 182 | CHECK_PARAM(PARAM_ADCx(ADCx)); |
igorsk | 0:1063a091a062 | 183 | CHECK_PARAM(PARAM_ADC_START_ON_EDGE_OPT(EdgeOption)); |
igorsk | 0:1063a091a062 | 184 | |
igorsk | 0:1063a091a062 | 185 | ADCx->ADCR &= ~ADC_CR_EDGE; |
igorsk | 0:1063a091a062 | 186 | if (EdgeOption){ |
igorsk | 0:1063a091a062 | 187 | ADCx->ADCR |= ADC_CR_EDGE; |
igorsk | 0:1063a091a062 | 188 | } |
igorsk | 0:1063a091a062 | 189 | } |
igorsk | 0:1063a091a062 | 190 | |
igorsk | 0:1063a091a062 | 191 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 192 | * @brief ADC interrupt configuration |
igorsk | 0:1063a091a062 | 193 | * @param[in] ADCx pointer to ADC |
igorsk | 0:1063a091a062 | 194 | * @param[in] IntType |
igorsk | 0:1063a091a062 | 195 | * @param[in] NewState: |
igorsk | 0:1063a091a062 | 196 | * - SET : enable ADC interrupt |
igorsk | 0:1063a091a062 | 197 | * - RESET: disable ADC interrupt |
igorsk | 0:1063a091a062 | 198 | * |
igorsk | 0:1063a091a062 | 199 | * @return None |
igorsk | 0:1063a091a062 | 200 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 201 | void ADC_IntConfig (LPC_ADC_TypeDef *ADCx, ADC_TYPE_INT_OPT IntType, FunctionalState NewState) |
igorsk | 0:1063a091a062 | 202 | { |
igorsk | 0:1063a091a062 | 203 | CHECK_PARAM(PARAM_ADCx(ADCx)); |
igorsk | 0:1063a091a062 | 204 | CHECK_PARAM(PARAM_ADC_TYPE_INT_OPT(IntType)); |
igorsk | 0:1063a091a062 | 205 | |
igorsk | 0:1063a091a062 | 206 | ADCx->ADINTEN &= ~ADC_INTEN_CH(IntType); |
igorsk | 0:1063a091a062 | 207 | if (NewState){ |
igorsk | 0:1063a091a062 | 208 | ADCx->ADINTEN |= ADC_INTEN_CH(IntType); |
igorsk | 0:1063a091a062 | 209 | } |
igorsk | 0:1063a091a062 | 210 | } |
igorsk | 0:1063a091a062 | 211 | |
igorsk | 0:1063a091a062 | 212 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 213 | * @brief Enable/Disable ADC channel number |
igorsk | 0:1063a091a062 | 214 | * @param[in] ADCx pointer to ADC |
igorsk | 0:1063a091a062 | 215 | * @param[in] Channel channel number |
igorsk | 0:1063a091a062 | 216 | * @param[in] NewState Enable or Disable |
igorsk | 0:1063a091a062 | 217 | * |
igorsk | 0:1063a091a062 | 218 | * @return None |
igorsk | 0:1063a091a062 | 219 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 220 | void ADC_ChannelCmd (LPC_ADC_TypeDef *ADCx, uint8_t Channel, FunctionalState NewState) |
igorsk | 0:1063a091a062 | 221 | { |
igorsk | 0:1063a091a062 | 222 | CHECK_PARAM(PARAM_ADCx(ADCx)); |
igorsk | 0:1063a091a062 | 223 | CHECK_PARAM(PARAM_ADC_CHANNEL_SELECTION(Channel)); |
igorsk | 0:1063a091a062 | 224 | |
igorsk | 0:1063a091a062 | 225 | if (NewState == ENABLE) { |
igorsk | 0:1063a091a062 | 226 | ADCx->ADCR |= ADC_CR_CH_SEL(Channel); |
igorsk | 0:1063a091a062 | 227 | } else { |
igorsk | 0:1063a091a062 | 228 | ADCx->ADCR &= ~ADC_CR_CH_SEL(Channel); |
igorsk | 0:1063a091a062 | 229 | } |
igorsk | 0:1063a091a062 | 230 | } |
igorsk | 0:1063a091a062 | 231 | |
igorsk | 0:1063a091a062 | 232 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 233 | * @brief Get ADC result |
igorsk | 0:1063a091a062 | 234 | * @param[in] ADCx pointer to ADC |
igorsk | 0:1063a091a062 | 235 | * @param[in] channel channel number |
igorsk | 0:1063a091a062 | 236 | * @return Data conversion |
igorsk | 0:1063a091a062 | 237 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 238 | uint16_t ADC_ChannelGetData(LPC_ADC_TypeDef *ADCx, uint8_t channel) |
igorsk | 0:1063a091a062 | 239 | { |
igorsk | 0:1063a091a062 | 240 | uint32_t adc_value; |
igorsk | 0:1063a091a062 | 241 | |
igorsk | 0:1063a091a062 | 242 | CHECK_PARAM(PARAM_ADCx(ADCx)); |
igorsk | 0:1063a091a062 | 243 | CHECK_PARAM(PARAM_ADC_CHANNEL_SELECTION(channel)); |
igorsk | 0:1063a091a062 | 244 | |
igorsk | 0:1063a091a062 | 245 | adc_value = *(uint32_t *) ((&ADCx->ADDR0) + channel); |
igorsk | 0:1063a091a062 | 246 | return ADC_DR_RESULT(adc_value); |
igorsk | 0:1063a091a062 | 247 | } |
igorsk | 0:1063a091a062 | 248 | |
igorsk | 0:1063a091a062 | 249 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 250 | * @brief Get ADC Chanel status from ADC data register |
igorsk | 0:1063a091a062 | 251 | * @param[in] ADCx pointer to ADC |
igorsk | 0:1063a091a062 | 252 | * @param[in] channel channel number |
igorsk | 0:1063a091a062 | 253 | * @param[in] StatusType |
igorsk | 0:1063a091a062 | 254 | * 0:Burst status |
igorsk | 0:1063a091a062 | 255 | * 1:Done status |
igorsk | 0:1063a091a062 | 256 | * @return SET / RESET |
igorsk | 0:1063a091a062 | 257 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 258 | FlagStatus ADC_ChannelGetStatus(LPC_ADC_TypeDef *ADCx, uint8_t channel, uint32_t StatusType) |
igorsk | 0:1063a091a062 | 259 | { |
igorsk | 0:1063a091a062 | 260 | uint32_t temp; |
igorsk | 0:1063a091a062 | 261 | |
igorsk | 0:1063a091a062 | 262 | CHECK_PARAM(PARAM_ADCx(ADCx)); |
igorsk | 0:1063a091a062 | 263 | CHECK_PARAM(PARAM_ADC_CHANNEL_SELECTION(channel)); |
igorsk | 0:1063a091a062 | 264 | CHECK_PARAM(PARAM_ADC_DATA_STATUS(StatusType)); |
igorsk | 0:1063a091a062 | 265 | |
igorsk | 0:1063a091a062 | 266 | temp = *(uint32_t *) ((&ADCx->ADDR0) + channel); |
igorsk | 0:1063a091a062 | 267 | if (StatusType) { |
igorsk | 0:1063a091a062 | 268 | temp &= ADC_DR_DONE_FLAG; |
igorsk | 0:1063a091a062 | 269 | }else{ |
igorsk | 0:1063a091a062 | 270 | temp &= ADC_DR_OVERRUN_FLAG; |
igorsk | 0:1063a091a062 | 271 | } |
igorsk | 0:1063a091a062 | 272 | if (temp) { |
igorsk | 0:1063a091a062 | 273 | return SET; |
igorsk | 0:1063a091a062 | 274 | } else { |
igorsk | 0:1063a091a062 | 275 | return RESET; |
igorsk | 0:1063a091a062 | 276 | } |
igorsk | 0:1063a091a062 | 277 | |
igorsk | 0:1063a091a062 | 278 | } |
igorsk | 0:1063a091a062 | 279 | |
igorsk | 0:1063a091a062 | 280 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 281 | * @brief Get ADC Data from AD Global register |
igorsk | 0:1063a091a062 | 282 | * @param[in] ADCx pointer to ADC |
igorsk | 0:1063a091a062 | 283 | * @param[in] channel channel number |
igorsk | 0:1063a091a062 | 284 | * @return Result of conversion |
igorsk | 0:1063a091a062 | 285 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 286 | uint16_t ADC_GlobalGetData(LPC_ADC_TypeDef *ADCx, uint8_t channel) |
igorsk | 0:1063a091a062 | 287 | { |
igorsk | 0:1063a091a062 | 288 | CHECK_PARAM(PARAM_ADCx(ADCx)); |
igorsk | 0:1063a091a062 | 289 | CHECK_PARAM(PARAM_ADC_CHANNEL_SELECTION(channel)); |
igorsk | 0:1063a091a062 | 290 | |
igorsk | 0:1063a091a062 | 291 | //ADCx->ADGDR &= ~ADC_GDR_CH_MASK; |
igorsk | 0:1063a091a062 | 292 | //ADCx->ADGDR |= ADC_GDR_CH(channel); |
igorsk | 0:1063a091a062 | 293 | return (uint16_t)(ADC_GDR_RESULT(ADCx->ADGDR)); |
igorsk | 0:1063a091a062 | 294 | } |
igorsk | 0:1063a091a062 | 295 | |
igorsk | 0:1063a091a062 | 296 | /*********************************************************************//** |
igorsk | 0:1063a091a062 | 297 | * @brief Get ADC Chanel status from AD global data register |
igorsk | 0:1063a091a062 | 298 | * @param[in] ADCx pointer to ADC |
igorsk | 0:1063a091a062 | 299 | * @param[in] StatusType |
igorsk | 0:1063a091a062 | 300 | * 0:Burst status |
igorsk | 0:1063a091a062 | 301 | * 1:Done status |
igorsk | 0:1063a091a062 | 302 | * @return SET / RESET |
igorsk | 0:1063a091a062 | 303 | **********************************************************************/ |
igorsk | 0:1063a091a062 | 304 | FlagStatus ADC_GlobalGetStatus(LPC_ADC_TypeDef *ADCx, uint32_t StatusType) |
igorsk | 0:1063a091a062 | 305 | { |
igorsk | 0:1063a091a062 | 306 | uint32_t temp; |
igorsk | 0:1063a091a062 | 307 | |
igorsk | 0:1063a091a062 | 308 | CHECK_PARAM(PARAM_ADCx(ADCx)); |
igorsk | 0:1063a091a062 | 309 | CHECK_PARAM(PARAM_ADC_DATA_STATUS(StatusType)); |
igorsk | 0:1063a091a062 | 310 | |
igorsk | 0:1063a091a062 | 311 | temp = ADCx->ADGDR; |
igorsk | 0:1063a091a062 | 312 | if (StatusType){ |
igorsk | 0:1063a091a062 | 313 | temp &= ADC_DR_DONE_FLAG; |
igorsk | 0:1063a091a062 | 314 | }else{ |
igorsk | 0:1063a091a062 | 315 | temp &= ADC_DR_OVERRUN_FLAG; |
igorsk | 0:1063a091a062 | 316 | } |
igorsk | 0:1063a091a062 | 317 | if (temp){ |
igorsk | 0:1063a091a062 | 318 | return SET; |
igorsk | 0:1063a091a062 | 319 | }else{ |
igorsk | 0:1063a091a062 | 320 | return RESET; |
igorsk | 0:1063a091a062 | 321 | } |
igorsk | 0:1063a091a062 | 322 | } |
igorsk | 0:1063a091a062 | 323 | |
igorsk | 0:1063a091a062 | 324 | /** |
igorsk | 0:1063a091a062 | 325 | * @} |
igorsk | 0:1063a091a062 | 326 | */ |
igorsk | 0:1063a091a062 | 327 | |
igorsk | 0:1063a091a062 | 328 | #endif /* _ADC */ |
igorsk | 0:1063a091a062 | 329 | |
igorsk | 0:1063a091a062 | 330 | /** |
igorsk | 0:1063a091a062 | 331 | * @} |
igorsk | 0:1063a091a062 | 332 | */ |
igorsk | 0:1063a091a062 | 333 | |
igorsk | 0:1063a091a062 | 334 | /* --------------------------------- End Of File ------------------------------ */ |
igorsk | 0:1063a091a062 | 335 |