Initial commit to GitHub.
Includes the Source (as an Eclipse project) and the Hardware files (including schematic, layout, gerbers, and bill of materials.)
The firmware is extremely incomplete. At this point the DDS chips work (with controlled phase relationship), the LCD (with fast-ish SPI, scrolling, and GFX, modified from Adafruit's library), the encoder knob, and LED work.
The ADC is capturing, but not in a usable way, but it's enough to feed the DSP code and see a nice pretty waterfall. Timers, interrupts, and DACs are not working yet.
2014-06-23 09:49:43 +10:00
|
|
|
#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++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-07-07 13:20:00 +10:00
|
|
|
void adcGetConversion()
|
Initial commit to GitHub.
Includes the Source (as an Eclipse project) and the Hardware files (including schematic, layout, gerbers, and bill of materials.)
The firmware is extremely incomplete. At this point the DDS chips work (with controlled phase relationship), the LCD (with fast-ish SPI, scrolling, and GFX, modified from Adafruit's library), the encoder knob, and LED work.
The ADC is capturing, but not in a usable way, but it's enough to feed the DSP code and see a nice pretty waterfall. Timers, interrupts, and DACs are not working yet.
2014-06-23 09:49:43 +10:00
|
|
|
{
|
|
|
|
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);
|
|
|
|
}
|
2014-07-07 13:20:00 +10:00
|
|
|
}
|
Initial commit to GitHub.
Includes the Source (as an Eclipse project) and the Hardware files (including schematic, layout, gerbers, and bill of materials.)
The firmware is extremely incomplete. At this point the DDS chips work (with controlled phase relationship), the LCD (with fast-ish SPI, scrolling, and GFX, modified from Adafruit's library), the encoder knob, and LED work.
The ADC is capturing, but not in a usable way, but it's enough to feed the DSP code and see a nice pretty waterfall. Timers, interrupts, and DACs are not working yet.
2014-06-23 09:49:43 +10:00
|
|
|
|
|
|
|
|
2014-07-07 13:20:00 +10:00
|
|
|
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++;
|
|
|
|
}
|
Initial commit to GitHub.
Includes the Source (as an Eclipse project) and the Hardware files (including schematic, layout, gerbers, and bill of materials.)
The firmware is extremely incomplete. At this point the DDS chips work (with controlled phase relationship), the LCD (with fast-ish SPI, scrolling, and GFX, modified from Adafruit's library), the encoder knob, and LED work.
The ADC is capturing, but not in a usable way, but it's enough to feed the DSP code and see a nice pretty waterfall. Timers, interrupts, and DACs are not working yet.
2014-06-23 09:49:43 +10:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//__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);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|