]> rtime.felk.cvut.cz Git - arc.git/commitdiff
Adc fixes for mpc55xx
authortojo <devnull@localhost>
Wed, 13 Jul 2011 12:54:18 +0000 (14:54 +0200)
committertojo <devnull@localhost>
Wed, 13 Jul 2011 12:54:18 +0000 (14:54 +0200)
arch/ppc/mpc55xx/drivers/Adc.c

index 8abbd96b7ed77380b36ebb5f52a639b9b0530e24..8c0a705fa384a62ed603fef79c6877bd044c6e18 100644 (file)
 \r
 \r
 \r
-/* Uncomment this only if you now what you are doing. This will make the mpc5606s driver use DMA.\r
+/* Uncomment this only if you know what you are doing. This will make the mpc5606s driver use DMA.\r
  * The DMA based ADC demands channels being sequential in a group i.e. 1,2,3 or 5,6,7 and NOT 1,3,7.\r
  * This also forbids the use of streamed buffers at the moment. Work is ongoing to correct DMA behaviour.\r
  */\r
 #define DONT_USE_DMA_IN_ADC_MPC5606S\r
 \r
+\r
+/* Are we gonna use Dma? */\r
+#if (  !defined(CFG_MPC5606S) || \\r
+      ( defined(CFG_MPC5606S) && defined(DONT_USE_DMA_IN_ADC_MPC5606S) ) )\r
+       #define ADC_USES_DMA\r
+#endif\r
+\r
+#if ( defined(ADC_USES_DMA) && !defined(USE_DMA) )\r
+       #error Adc is configured to use Dma but the module is not enabled.\r
+#endif\r
+\r
+\r
 #include <assert.h>\r
 #include <stdlib.h>\r
 //#include "System.h"\r
@@ -28,7 +40,7 @@
 #include "Modules.h"\r
 #include "Mcu.h"\r
 #include "Adc.h"\r
-#ifndef DONT_USE_DMA_IN_ADC_MPC5606S\r
+#if defined(ADC_USES_DMA)\r
 #include "Dma.h"\r
 #endif\r
 #include "Det.h"\r
@@ -146,7 +158,7 @@ const Dma_TcdType AdcCalibrationDMACommandConfig =
   .DMOD = 0,\r
   .DSIZE = DMA_TRANSFER_SIZE_32BITS,\r
   .SOFF = sizeof(Adc_CommandType),\r
-  .NBYTES = sizeof(Adc_CommandType),\r
+  .NBYTESu.B.NBYTES = sizeof(Adc_CommandType),\r
   .SLAST = 0,\r
   .DADDR = (vint32_t)&EQADC.CFPR[0].R,\r
   .CITERE_LINK = 0,\r
@@ -175,7 +187,7 @@ const Dma_TcdType AdcCalibrationDMAResultConfig =
   .DMOD = 0,\r
   .DSIZE = DMA_TRANSFER_SIZE_16BITS,\r
   .SOFF = 0,\r
-  .NBYTES = sizeof(Adc_ValueGroupType),\r
+  .NBYTESu.B.NBYTES = sizeof(Adc_ValueGroupType),\r
   .SLAST = 0,\r
   .DADDR = 0, /* Dynamic address, written later. */\r
   .CITERE_LINK = 0,\r
@@ -486,6 +498,12 @@ Std_ReturnType Adc_SetupResultBuffer (Adc_GroupType group, Adc_ValueGroupType *b
   if (E_OK == Adc_CheckSetupResultBuffer (group))\r
   {\r
     AdcConfigPtr->groupConfigPtr[group].status->resultBufferPtr = bufferPtr;\r
+\r
+#if defined(ADC_USES_DMA)\r
+    Dma_ConfigureDestinationAddress(\r
+               (uint32_t)AdcConfigPtr->groupConfigPtr[group].status->resultBufferPtr,\r
+               AdcConfigPtr->groupConfigPtr[group].dmaResultChannel);\r
+#endif\r
     \r
     returnValue = E_OK;\r
   }\r
@@ -496,6 +514,12 @@ Std_ReturnType Adc_SetupResultBuffer (Adc_GroupType group, Adc_ValueGroupType *b
 Adc_StreamNumSampleType Adc_GetStreamLastPointer(Adc_GroupType group, Adc_ValueGroupType** PtrToSamplePtr)\r
 {\r
        Adc_StreamNumSampleType nofSample = 0;\r
+       \r
+#if !defined(CFG_MPC5606S)\r
+\r
+       // Not implemented\r
+       \r
+#else\r
 \r
        /** @req ADC216 */\r
        /* Check for development errors. */\r
@@ -534,7 +558,7 @@ Adc_StreamNumSampleType Adc_GetStreamLastPointer(Adc_GroupType group, Adc_ValueG
                          /* Start continous conversion again */\r
                  currSampleCount[currGroupId] = 0;\r
 \r
-#ifndef DONT_USE_DMA_IN_ADC_MPC5606S\r
+#if defined(ADC_USES_DMA)\r
                          Dma_ConfigureChannel ((Dma_TcdType *)(AdcConfigPtr->groupConfigPtr[group].groupDMAResults), DMA_ADC_GROUP0_RESULT_CHANNEL);\r
                          Dma_ConfigureDestinationAddress((uint32_t)AdcConfigPtr->groupConfigPtr[group].status->resultBufferPtr, DMA_ADC_GROUP0_RESULT_CHANNEL);\r
                          Dma_StartChannel(DMA_ADC_GROUP0_RESULT_CHANNEL);\r
@@ -556,8 +580,11 @@ Adc_StreamNumSampleType Adc_GetStreamLastPointer(Adc_GroupType group, Adc_ValueG
                /* Some condition not met */\r
                *PtrToSamplePtr = NULL;\r
        }\r
+       \r
+#endif\r
 \r
        return nofSample;\r
+\r
 }\r
 \r
 #if (ADC_READ_GROUP_API == STD_ON)\r
@@ -607,7 +634,7 @@ Std_ReturnType Adc_ReadGroup (Adc_GroupType group, Adc_ValueGroupType *dataBuffe
                  /* Start continous conversion again */\r
           currSampleCount[currGroupId] = 0;\r
 \r
-#ifndef DONT_USE_DMA_IN_ADC_MPC5606S\r
+#if defined(ADC_USES_DMA)\r
              Dma_ConfigureChannel ((Dma_TcdType *)(AdcConfigPtr->groupConfigPtr[group].groupDMAResults), DMA_ADC_GROUP0_RESULT_CHANNEL);\r
           Dma_ConfigureDestinationAddress((uint32_t)AdcConfigPtr->groupConfigPtr[group].status->resultBufferPtr, DMA_ADC_GROUP0_RESULT_CHANNEL);\r
           Dma_StartChannel(DMA_ADC_GROUP0_RESULT_CHANNEL);\r
@@ -615,8 +642,10 @@ Std_ReturnType Adc_ReadGroup (Adc_GroupType group, Adc_ValueGroupType *dataBuffe
           currResultBufPtr[currGroupId] = AdcConfigPtr->groupConfigPtr[group].status->resultBufferPtr;\r
 #endif\r
 \r
+#if defined(CFG_MPC5606S)\r
                  ADC_0.IMR.B.MSKECH = 1;\r
                  ADC_0.MCR.B.NSTART=1;\r
+#endif\r
       }\r
       /** @req ADC329 */\r
       /** @req ADC331 */\r
@@ -1030,7 +1059,7 @@ static void  Adc_ConfigureADC (const Adc_ConfigType *ConfigPtr)
   /* Power on ADC */\r
   ADC_0.MCR.B.PWDN = 0;\r
 \r
-#ifndef DONT_USE_DMA_IN_ADC_MPC5606S\r
+#if defined(ADC_USES_DMA)\r
   /* Enable DMA. */\r
   ADC_0.DMAE.B.DMAEN = 1;\r
 #endif\r
@@ -1058,7 +1087,7 @@ void Adc_StartGroupConversion (Adc_GroupType group)
       currSampleCount[group] = 0;\r
 \r
          currResultBufPtr[group] = AdcConfigPtr->groupConfigPtr[group].status->resultBufferPtr; /* Set current result buffer */\r
-#ifndef DONT_USE_DMA_IN_ADC_MPC5606S\r
+#if defined(ADC_USES_DMA)\r
          Dma_ConfigureChannel ((Dma_TcdType *)(AdcConfigPtr->groupConfigPtr[group].groupDMAResults), DMA_ADC_GROUP0_RESULT_CHANNEL);\r
          Dma_ConfigureDestinationAddress ((uint32_t)currResultBufPtr[group], DMA_ADC_GROUP0_RESULT_CHANNEL);\r
 #endif\r
@@ -1084,7 +1113,7 @@ void Adc_StartGroupConversion (Adc_GroupType group)
         /* Enable Normal conversion */\r
         ADC_0.NCMR[1].R = groupChannelIdMask;\r
 \r
-#ifndef DONT_USE_DMA_IN_ADC_MPC5606S\r
+#if defined(ADC_USES_DMA)\r
         ADC_0.DMAE.R = 0x01;\r
 \r
         /* Enable DMA Transfer */\r