/** * @brief Get ADC Data from AD Global register * @param[in] ADCx pointer to ADC * @param[in] channel channel number * @return Result of conversion * *********************************************************************/ uint16_t ADC_GlobalGetData(ADC_TypeDef *ADCx, uint8_t channel) { CHECK_PARAM(PARAM_ADCx(ADCx)); CHECK_PARAM(PARAM_ADC_CHANNEL_SELECTION(channel)); //ADCx->ADGDR &= ~ADC_GDR_CH_MASK; //ADCx->ADGDR |= ADC_GDR_CH(channel); return (uint16_t)(ADC_GDR_RESULT(ADCx->ADGDR)); }
/*********************************************************************//** * @brief Get ADC result * @param[in] channel channel number * @return Data conversion * ************************************************************************/ uint16_t ADC_ChannelGetData(uint8_t channel) { uint32_t adc_value; CHECK_PARAM(PARAM_ADC_CHANNEL_SELECTION(channel)); adc_value = *(uint32_t *) ((&LPC_ADC->DR[0]) + channel); return ADC_DR_RESULT(adc_value); }
/** * @brief Get Result conversion from A/D data register * @param[in] channel number which want to read back the result * @return Result of conversion *********************************************************************/ uint32_t ADC_GetData(uint32_t channel) { uint32_t adc_value; CHECK_PARAM(PARAM_ADC_CHANNEL_SELECTION(channel)); adc_value = *(uint32_t *)((&ADC->ADDR0) + channel); return ADC_GDR_RESULT(adc_value); }
/** * @brief Get ADC result * @param[in] ADCx pointer to ADC * @param[in] channel channel number * @return Data conversion * *********************************************************************/ uint16_t ADC_ChannelGetData(ADC_TypeDef *ADCx, uint8_t channel) { uint32_t adc_value; CHECK_PARAM(PARAM_ADCx(ADCx)); CHECK_PARAM(PARAM_ADC_CHANNEL_SELECTION(channel)); adc_value = *(uint32_t *) ((&ADCx->ADDR0) + channel); return ADC_DR_RESULT(adc_value); }
/*********************************************************************//** * @brief Enable/Disable ADC channel number * @param[in] Channel channel number * @param[in] NewState Enable or Disable * * @return None * ************************************************************************/ void ADC_ChannelCmd (uint8_t Channel, FunctionalState NewState) { CHECK_PARAM(PARAM_ADC_CHANNEL_SELECTION(Channel)); if (NewState == ENABLE) { LPC_ADC->CR |= ADC_CR_CH_SEL(Channel); } else { LPC_ADC->CR &= ~ADC_CR_CH_SEL(Channel); } }
/** * @brief Enable/Disable ADC channel number * @param[in] ADCx pointer to ADC * @param[in] Channel channel number * @param[in] NewState Enable or Disable * * @return None * *********************************************************************/ void ADC_ChannelCmd (ADC_TypeDef *ADCx, uint8_t Channel, FunctionalState NewState) { CHECK_PARAM(PARAM_ADCx(ADCx)); CHECK_PARAM(PARAM_ADC_CHANNEL_SELECTION(Channel)); if (NewState == ENABLE) { ADCx->ADCR |= ADC_CR_CH_SEL(Channel); } else { ADCx->ADCR &= ~ADC_CR_CH_SEL(Channel); } }
/*********************************************************************//** * @brief Enable/Disable ADC channel number * @param[in] ADCx pointer to LPC_ADC_TypeDef, should be: LPC_ADC * @param[in] Channel channel number * @param[in] NewState Enable or Disable * * @return None **********************************************************************/ void ADC_ChannelCmd (LPC_ADC_TypeDef *ADCx, uint8_t Channel, FunctionalState NewState) { CHECK_PARAM(PARAM_ADCx(ADCx)); CHECK_PARAM(PARAM_ADC_CHANNEL_SELECTION(Channel)); if (NewState == ENABLE) { ADCx->ADCR |= ADC_CR_CH_SEL(Channel); } else { if (ADCx->ADCR & ADC_CR_START_MASK) //need to stop START bits before disable channel ADCx->ADCR &= ~ADC_CR_START_MASK; ADCx->ADCR &= ~ADC_CR_CH_SEL(Channel); } }
/********************************************************************//** * @brief Init ADC AD input pins, pins assign: * AD0 - PIO0_11 * AD1 - PIO1_0 * AD2 - PIO1_1 * AD3 - PIO1_2 * AD4 - PIO1_3 * AD5 - PIO1_4 * AD6 - PIO1_10 * AD7 - PIO1_11 * NOTE:AD0,AD1,AD2,AD3,AD4 are multiplexed with JTAG pins(SW) * * @param[in] * @param[in] Channel channel number * * @return None *********************************************************************/ void ADC_PinsInit(uint8_t channel) { uint32_t pin; CHECK_PARAM(PARAM_ADC_CHANNEL_SELECTION(channel)); // alexk: CHECK_PARAM(PARAM_ADMODE(mod)); /* Set AD function */ switch(channel) { case 0: /* AD Channel 0: PIO0_11 */ IOCON_SetPinFunc(IOCON_PIO0_11, PIO0_11_FUN_AD0); pin = IOCON_PIO0_11; break; case 1: /* AD Channel 1: PIO1_0 */ IOCON_SetPinFunc(IOCON_PIO1_0, PIO1_0_FUN_AD1); pin = IOCON_PIO1_0; break; case 2: /* AD Channel 2: PIO1_1 */ IOCON_SetPinFunc(IOCON_PIO1_1, PIO1_1_FUN_AD2); pin = IOCON_PIO1_1; break; case 3: /* AD Channel 3: PIO1_2 */ IOCON_SetPinFunc(IOCON_PIO1_2, PIO1_2_FUN_AD3); pin = IOCON_PIO1_2; break; case 4: /* AD Channel 4: PIO1_3 */ IOCON_SetPinFunc(IOCON_PIO1_3, PIO1_3_FUN_AD4); pin = IOCON_PIO1_3; break; case 5: /* AD Channel 5: PIO1_4 */ IOCON_SetPinFunc(IOCON_PIO1_4, PIO1_4_FUN_AD5); pin = IOCON_PIO1_4; break; case 6: /* AD Channel 6: PIO1_10 */ IOCON_SetPinFunc(IOCON_PIO1_10, PIO1_10_FUN_AD6); pin = IOCON_PIO1_10; break; case 7: /* AD Channel 7: PIO1_11 */ IOCON_SetPinFunc(IOCON_PIO1_11, PIO1_11_FUN_AD7); pin = IOCON_PIO1_11; break; default: return; }; *(uint32_t *)((uint32_t)&(LPC_IOCON->PIO2_6) + pin) &= ~ADC_PINS_MODE_MASK; }
/*********************************************************************//** * @brief Get ADC Chanel status from ADC data register * @param[in] channel channel number * @param[in] StatusType * 0:Burst status * 1:Done status * @return SET / RESET * ************************************************************************/ FlagStatus ADC_ChannelGetStatus(uint8_t channel, uint32_t StatusType) { uint32_t temp; CHECK_PARAM(PARAM_ADC_CHANNEL_SELECTION(channel)); CHECK_PARAM(PARAM_ADC_DATA_STATUS(StatusType)); temp = *(uint32_t *) ((&LPC_ADC->DR[0]) + channel); if (StatusType) { temp &= ADC_DR_DONE_FLAG; }else{ temp &= ADC_DR_OVERRUN_FLAG; } if (temp) { return SET; } else { return RESET; } }
/*********************************************************************//** * @brief Get ADC Chanel status from ADC data register * @param[in] ADCx pointer to LPC_ADC_TypeDef, should be: LPC_ADC * @param[in] channel: channel number, should be 0..7 * @param[in] StatusType * 0:Burst status * 1:Done status * @return SET / RESET **********************************************************************/ FlagStatus ADC_ChannelGetStatus(LPC_ADC_TypeDef *ADCx, uint8_t channel, uint32_t StatusType) { uint32_t temp; CHECK_PARAM(PARAM_ADCx(ADCx)); CHECK_PARAM(PARAM_ADC_CHANNEL_SELECTION(channel)); CHECK_PARAM(PARAM_ADC_DATA_STATUS(StatusType)); temp = *((&ADCx->ADDR0) + channel); if (StatusType) { temp &= ADC_DR_DONE_FLAG; }else{ temp &= ADC_DR_OVERRUN_FLAG; } if (temp) { return SET; } else { return RESET; } }