PSDR/Source/src/adc.c
Michael Colton 7b1da77c21 Haven't committed in a while :o . Currently waterfall is disabled while I work on audio processing. I am capturing, FFT, filter, IFFT, and output. It seems to be working partly. I don't think I am doing things right yet.
Also, starting to implement the menu system. Oh, and fixed some indentation, so it looks like there was more changed to main() than there really was....
2014-07-06 21:20:00 -06:00

142 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_2;
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);
}