PSDR/Source/src/adc.c

143 lines
3.8 KiB
C

#include "adc.h"
void initAdc()
{
uhADCxConvertedValue = 0;
uhADCxConvertedValue2 = 0;
adcConfigured = 0;
sampleIndex = 0;
sampleRun = 0;
wrongThings = 0;
__ADC1_CLK_ENABLE();
__ADC2_CLK_ENABLE();
__GPIOA_CLK_ENABLE(); //PA1 and PA2
__ADC_FORCE_RESET();
__ADC_RELEASE_RESET();
AdcHandle.Instance = ADCx;
AdcHandle.Init.ClockPrescaler = ADC_CLOCKPRESCALER_PCLK_DIV2;
AdcHandle.Init.Resolution = ADC_RESOLUTION12b;
AdcHandle.Init.ScanConvMode = DISABLE;
AdcHandle.Init.ContinuousConvMode = ENABLE;
AdcHandle.Init.DiscontinuousConvMode = DISABLE;
AdcHandle.Init.NbrOfDiscConversion = 0;
AdcHandle.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
AdcHandle.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T1_CC1;
AdcHandle.Init.DataAlign = ADC_DATAALIGN_RIGHT;
AdcHandle.Init.NbrOfConversion = 1;
AdcHandle.Init.DMAContinuousRequests = DISABLE;
AdcHandle.Init.EOCSelection = DISABLE;
if(HAL_ADC_Init(&AdcHandle) != HAL_OK)
{
/* Initiliazation Error */
//Error_Handler();
wrongThings++;
}
AdcHandle2.Instance = ADC2;
AdcHandle2.Init.ClockPrescaler = ADC_CLOCKPRESCALER_PCLK_DIV2;
AdcHandle2.Init.Resolution = ADC_RESOLUTION12b;
AdcHandle2.Init.ScanConvMode = DISABLE;
AdcHandle2.Init.ContinuousConvMode = ENABLE;
AdcHandle2.Init.DiscontinuousConvMode = DISABLE;
AdcHandle2.Init.NbrOfDiscConversion = 0;
AdcHandle2.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
AdcHandle2.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T1_CC1;
AdcHandle2.Init.DataAlign = ADC_DATAALIGN_RIGHT;
AdcHandle2.Init.NbrOfConversion = 1;
AdcHandle2.Init.DMAContinuousRequests = DISABLE;
AdcHandle2.Init.EOCSelection = DISABLE;
if(HAL_ADC_Init(&AdcHandle2) != HAL_OK)
{
/* Initiliazation Error */
//Error_Handler();
wrongThings++;
}
sConfig1.Channel = ADCx_CHANNEL;
sConfig1.Rank = 1;
sConfig1.SamplingTime = ADC_SAMPLETIME_3CYCLES;
sConfig1.Offset = 0;
sConfig2.Channel = ADC_CHANNEL_6;
sConfig2.Rank = 1;
sConfig2.SamplingTime = ADC_SAMPLETIME_3CYCLES;
sConfig2.Offset = 0;
if(HAL_ADC_ConfigChannel(&AdcHandle, &sConfig1) != HAL_OK)
{
/* Channel Configuration Error */
//Error_Handler();
wrongThings++;
}
if(HAL_ADC_ConfigChannel(&AdcHandle2, &sConfig2) != HAL_OK)
{
/* Channel Configuration Error */
//Error_Handler();
wrongThings++;
}
}
void adcGetConversion()
{
HAL_ADC_PollForConversion(&AdcHandle, 10);
HAL_ADC_PollForConversion(&AdcHandle2, 10);
/* Check if the continous conversion of regular channel is finished */
if(HAL_ADC_GetState(&AdcHandle) == HAL_ADC_STATE_EOC_REG && HAL_ADC_GetState(&AdcHandle2) == HAL_ADC_STATE_EOC_REG)
{
/*##-5- Get the converted value of regular channel ########################*/
uhADCxConvertedValue = HAL_ADC_GetValue(&AdcHandle);
uhADCxConvertedValue2 = HAL_ADC_GetValue(&AdcHandle2);
}
}
void adcStartConversion()
{
if(HAL_ADC_Start(&AdcHandle) != HAL_OK)
{
/* Start Conversation Error */
//Error_Handler();
wrongThings++;
}
if(HAL_ADC_Start(&AdcHandle2) != HAL_OK)
{
/* Start Conversation Error */
//Error_Handler();
wrongThings++;
}
}
//__IO uint16_t uhADCxConvertedValue = 0;
/**
* @brief Conversion complete callback in non blocking mode
* @param AdcHandle : AdcHandle handle
* @note This example shows a simple way to report end of conversion, and
* you can add your own implementation.
* @retval None
*/
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* AdcHandle)
{
/* Get the converted value of regular channel */
uhADCxConvertedValue = HAL_ADC_GetValue(AdcHandle);
}