Gunar Kroeger / Mbed OS AcusticLocator
Revision:
0:61544337ff5e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/AnalogInDma.cpp	Thu May 03 20:39:50 2018 +0000
@@ -0,0 +1,104 @@
+#include "AnalogInDma.h"
+
+
+AnalogInDma::AnalogInDma()
+{
+}
+AnalogInDma::~AnalogInDma()
+{
+	
+}
+bool AnalogInDma::init()
+{
+	MX_DMA_Init();
+	if(!MX_ADC1_Init())
+		return false;
+	return true;
+}
+
+bool AnalogInDma::start(uint32_t* pData, uint32_t Length)
+{
+	if (HAL_ADC_Start_DMA(&hadc1, pData, Length) != HAL_OK)
+		return false;
+	return true;
+}
+
+/* ADC1 init function */
+bool AnalogInDma::MX_ADC1_Init()
+{
+	ADC_MultiModeTypeDef multimode;
+	ADC_ChannelConfTypeDef sConfig;
+
+	/**Common config 
+	*/
+	hadc1.Instance = ADC1;
+	hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
+	hadc1.Init.Resolution = ADC_RESOLUTION_12B;
+	hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
+	hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
+	hadc1.Init.EOCSelection = ADC_EOC_SEQ_CONV;
+	hadc1.Init.LowPowerAutoWait = DISABLE;
+	hadc1.Init.ContinuousConvMode = ENABLE;
+	hadc1.Init.NbrOfConversion = 4;
+	hadc1.Init.DiscontinuousConvMode = DISABLE;
+	hadc1.Init.NbrOfDiscConversion = 1;
+	hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
+	hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
+	hadc1.Init.DMAContinuousRequests = ENABLE;
+	hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
+	hadc1.Init.OversamplingMode = DISABLE;
+	if (HAL_ADC_Init(&hadc1) != HAL_OK)
+		return false;
+
+	/**Configure the ADC multi-mode 
+	*/
+	multimode.Mode = ADC_MODE_INDEPENDENT;
+	if (HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode) != HAL_OK)
+		return false;
+
+	/**Configure Regular Channel 
+	*/
+	sConfig.Channel = ADC_CHANNEL_5;
+	sConfig.Rank = 1;
+	sConfig.SamplingTime = ADC_SAMPLETIME_247CYCLES_5;
+	sConfig.SingleDiff = ADC_SINGLE_ENDED;
+	sConfig.OffsetNumber = ADC_OFFSET_NONE;
+	sConfig.Offset = 0;
+	if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
+		return false;
+
+	/**Configure Regular Channel 
+	*/
+	sConfig.Channel = ADC_CHANNEL_6;
+	sConfig.Rank = 2;
+	if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
+		return false;
+
+	/**Configure Regular Channel 
+	*/
+	sConfig.Channel = ADC_CHANNEL_9;
+	sConfig.Rank = 3;
+	if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
+		return false;
+	/**Configure Regular Channel 
+	*/
+	sConfig.Channel = ADC_CHANNEL_15;
+	sConfig.Rank = 4;
+	if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
+		return false;
+	return true;
+}
+
+/** 
+* Enable DMA controller clock
+*/
+void AnalogInDma::MX_DMA_Init() 
+	{
+	/* DMA controller clock enable */
+	__HAL_RCC_DMA1_CLK_ENABLE();
+
+	/* DMA interrupt init */
+	/* DMA1_Channel1_IRQn interrupt configuration */
+	HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0);
+	HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);
+}
\ No newline at end of file