]> rtime.felk.cvut.cz Git - arc.git/blobdiff - arch/ppc/mpc55xx/drivers/Adc_560x.c
Updated after mcaltest run
[arc.git] / arch / ppc / mpc55xx / drivers / Adc_560x.c
index ba0fd25bc4df13370b1a162196073957d463252b..953ac7b4a7010f02fb624aae484db172c6c3200d 100644 (file)
@@ -104,6 +104,7 @@ static const Adc_ConfigType * Adc_GetControllerConfigPtrFromGroupId(Adc_GroupTyp
 void Adc_DeInit ()\r
 {\r
   volatile struct ADC_tag *hwPtr;\r
+  boolean okToClear = TRUE;\r
 \r
   for (int configId = 0; configId < ADC_ARC_CTRL_CONFIG_CNT; configId++) {\r
          hwPtr = GET_HW_CONTROLLER(AdcGlobalConfigPtr[configId].hwConfigPtr->hwUnitId);\r
@@ -114,7 +115,7 @@ void Adc_DeInit ()
                for(Adc_GroupType group = (Adc_GroupType)0; group < AdcConfigPtr->nbrOfGroups; group++)\r
                {\r
                  /* Set group status to idle. */\r
-                 AdcConfigPtr->groupConfigPtr[group/NOF_GROUP_PER_CONTROLLER/NOF_GROUP_PER_CONTROLLER].status->groupStatus = ADC_IDLE;\r
+                 AdcConfigPtr->groupConfigPtr[group].status->groupStatus = ADC_IDLE;\r
                }\r
 \r
                /* Disable DMA transfer*/\r
@@ -127,10 +128,19 @@ void Adc_DeInit ()
                /* Disable all interrupt*/\r
                hwPtr->IMR.R = 0;\r
          }\r
+         else\r
+         {\r
+               /* Not ok to change adcState if any unit is running */\r
+           okToClear = FALSE;\r
+         }\r
        }\r
-       /* Clean internal status. */\r
-    AdcGlobalConfigPtr = (Adc_ConfigType *)NULL;\r
-       adcState = ADC_UNINIT;\r
+\r
+    if(okToClear)\r
+    {\r
+       /* Clean internal status. */\r
+       AdcGlobalConfigPtr = (Adc_ConfigType *)NULL;\r
+       adcState = ADC_UNINIT;\r
+    }\r
 }\r
 #endif\r
 \r
@@ -165,7 +175,7 @@ Std_ReturnType Adc_SetupResultBuffer (Adc_GroupType group, Adc_ValueGroupType *b
   /* Check for development errors. */\r
   if (E_OK == Adc_CheckSetupResultBuffer (adcState, AdcConfigPtr, group))\r
   {\r
-    AdcConfigPtr->groupConfigPtr[group/NOF_GROUP_PER_CONTROLLER/NOF_GROUP_PER_CONTROLLER].status->resultBufferPtr = bufferPtr;\r
+    AdcConfigPtr->groupConfigPtr[group%NOF_GROUP_PER_CONTROLLER].status->resultBufferPtr = bufferPtr;\r
     \r
     returnValue = E_OK;\r
   }\r
@@ -395,17 +405,17 @@ void Adc_Group0ConversionComplete (int unit)
        // Check which group is busy, only one is allowed to be busy at a time in a hw unit\r
        for (int group = 0; group < ADC_NBR_OF_GROUPS; group++)\r
        {\r
-         if((AdcConfigPtr->groupConfigPtr[group%NOF_GROUP_PER_CONTROLLER].status->groupStatus == ADC_BUSY) ||\r
-       (AdcConfigPtr->groupConfigPtr[group%NOF_GROUP_PER_CONTROLLER].status->groupStatus == ADC_COMPLETED))\r
+         if((AdcConfigPtr->groupConfigPtr[group].status->groupStatus == ADC_BUSY) ||\r
+       (AdcConfigPtr->groupConfigPtr[group].status->groupStatus == ADC_COMPLETED))\r
          {\r
 #if !defined (ADC_USES_DMA)\r
                /* Copy to result buffer */\r
-               for(uint8 index=0; index < AdcConfigPtr->groupConfigPtr[group%NOF_GROUP_PER_CONTROLLER].numberOfChannels; index++)\r
+               for(uint8 index=0; index < AdcConfigPtr->groupConfigPtr[group].numberOfChannels; index++)\r
                {\r
 #if defined(CFG_MPC5606S)\r
-                       AdcConfigPtr->groupConfigPtr[group%NOF_GROUP_PER_CONTROLLER].status->currResultBufPtr[index] = hwPtr->CDR[32+AdcConfigPtr->groupConfigPtr[group%NOF_GROUP_PER_CONTROLLER].channelList[index]].B.CDATA;\r
+                       AdcConfigPtr->groupConfigPtr[group].status->currResultBufPtr[index] = hwPtr->CDR[32+AdcConfigPtr->groupConfigPtr[group].channelList[index]].B.CDATA;\r
 #else\r
-                       AdcConfigPtr->groupConfigPtr[group%NOF_GROUP_PER_CONTROLLER].status->currResultBufPtr[index] = hwPtr->CDR[AdcConfigPtr->groupConfigPtr[group%NOF_GROUP_PER_CONTROLLER].channelList[index]].B.CDATA;\r
+                       AdcConfigPtr->groupConfigPtr[group].status->currResultBufPtr[index] = hwPtr->CDR[AdcConfigPtr->groupConfigPtr[group].channelList[index]].B.CDATA;\r
 #endif\r
                }\r
 #endif\r