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
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
/* 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
/* 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
// 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