\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
#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
.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
.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
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
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
/* 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
/* 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
/* 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
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
/* 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
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
/* 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