analogIn with DMA

Dependents:   TDEMNucleo

Revision:
2:08779d8f1873
Parent:
1:4b275a292c9d
Child:
4:2844a210bd46
--- a/analoginDMA_api.c	Sat Jan 03 10:17:22 2015 +0000
+++ b/analoginDMA_api.c	Sat Jan 03 14:28:35 2015 +0000
@@ -36,6 +36,8 @@
 #include "PeripheralPins.h"
 
 ADC_HandleTypeDef AdcDMAHandle;
+DMA_InitTypeDef DMA_InitStructure; //Variable used to setup the DMA
+DMA_HandleTypeDef DMAHandle;
 
 int adcDMA_inited = 0;
 
@@ -63,20 +65,21 @@
         AdcDMAHandle.Init.ClockPrescaler        = ADC_CLOCKPRESCALER_PCLK_DIV2;
         AdcDMAHandle.Init.Resolution            = ADC_RESOLUTION12b;
         AdcDMAHandle.Init.ScanConvMode          = DISABLE;
-        AdcDMAHandle.Init.ContinuousConvMode    = DISABLE;
+        AdcDMAHandle.Init.ContinuousConvMode    = ENABLE;
         AdcDMAHandle.Init.DiscontinuousConvMode = DISABLE;
         AdcDMAHandle.Init.NbrOfDiscConversion   = 0;
         AdcDMAHandle.Init.ExternalTrigConvEdge  = ADC_EXTERNALTRIGCONVEDGE_NONE;
         AdcDMAHandle.Init.ExternalTrigConv      = ADC_EXTERNALTRIGCONV_T1_CC1;
         AdcDMAHandle.Init.DataAlign             = ADC_DATAALIGN_RIGHT;
         AdcDMAHandle.Init.NbrOfConversion       = 1;
-        AdcDMAHandle.Init.DMAContinuousRequests = DISABLE;
-        AdcDMAHandle.Init.EOCSelection          = DISABLE;
+        AdcDMAHandle.Init.DMAContinuousRequests = ENABLE;
+        AdcDMAHandle.Init.EOCSelection          = ENABLE;
         HAL_ADC_Init(&AdcDMAHandle);
+ 
     }
 }
 
-static inline uint16_t adc_read(analogin_t *obj)
+static inline uint16_t adc_read(analogin_t *obj,uint16_t* pData, uint32_t Length)
 {
     ADC_ChannelConfTypeDef sConfig;
 
@@ -142,27 +145,28 @@
 
     HAL_ADC_ConfigChannel(&AdcDMAHandle, &sConfig);
 
-    HAL_ADC_Start(&AdcDMAHandle); // Start conversion
+   // HAL_ADC_Start(&AdcDMAHandle); // Start conversion
+    HAL_ADC_Start_DMA(&AdcDMAHandle, (uint32_t*) pData, Length);
 
     // Wait end of conversion and get value
     if (HAL_ADC_PollForConversion(&AdcDMAHandle, 10) == HAL_OK) {
-        return (HAL_ADC_GetValue(&AdcDMAHandle));
+        return (HAL_OK);
     } else {
         return 0;
     }
 }
 
-uint16_t analogin_readdMA_u16(analogin_t *obj)
+uint16_t analogin_readdMA_u16(analogin_t *obj,uint16_t* pData, uint32_t Length)
 {
-    uint16_t value = adc_read(obj);
+    uint16_t value = adc_read(obj,pData, Length);
     // 12-bit to 16-bit conversion
     value = ((value << 4) & (uint16_t)0xFFF0) | ((value >> 8) & (uint16_t)0x000F);
     return value;
 }
 
-float analoginDMA_read(analogin_t *obj)
+float analoginDMA_read(analogin_t *obj,uint16_t* pData, uint32_t Length)
 {
-    uint16_t value = adc_read(obj);
+    uint16_t value = adc_read(obj, pData, Length);
     return (float)value * (1.0f / (float)0xFFF); // 12 bits range
 }