int32_t drv_adc_read(uint32_t ulPin) { ADC_ChannelConfTypeDef sConfig; ADC_HandleTypeDef *hADCx; uint32_t ulValue = 0; uint32_t ulChannel; uint32_t adc_pin; adc_pin = analogPinToChannel(ulPin); ulChannel = g_Pin2PortMapArray[adc_pin].adc_channel; if(ulChannel == NO_ADC) return -1; hADCx = g_Pin2PortMapArray[adc_pin].ADCx; sConfig.Channel = ulChannel; sConfig.Rank = ADC_REGULAR_RANK_1; sConfig.SamplingTime = ADC_SAMPLETIME_41CYCLES_5; HAL_ADC_ConfigChannel(hADCx, &sConfig); HAL_ADC_Start(hADCx); HAL_ADC_PollForConversion(hADCx, 10); ulValue = HAL_ADC_GetValue(hADCx); return (int32_t)ulValue; }
uint8_t adcPinToChannelNum(uint8_t pin) { #if defined(__MK20DX128__) || defined(__MK20DX256__) // teensy 3, 3.1 #else #if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) if (pin >= 54) pin -= 54; // allow for channel or pin numbers #elif defined(__AVR_ATmega32U4__) if (pin >= 18) pin -= 18; // allow for channel or pin numbers pin = analogPinToChannel(pin); // moved from extra #if which was below in Arduino code, and redefined in mozzi_analog.h, with notes #elif defined(__AVR_ATmega1284__) if (pin >= 24) pin -= 24; // allow for channel or pin numbers #else if (pin >= 14) pin -= 14; // allow for channel or pin numbers #endif #endif return pin; }