123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701 |
- #ifdef __cplusplus
- extern "C"{
- #endif
- #include "Adc.h"
- #include "Adc_Ipw.h"
- #include "Adc_Ipw_Irq.h"
- #include "Adc_Ipw_Types.h"
- #include "Mcal.h"
- #include "Det.h"
- #define ADC_VENDOR_ID_IPW_IRQ_C 43
- #define ADC_AR_RELEASE_MAJOR_VERSION_IPW_IRQ_C 4
- #define ADC_AR_RELEASE_MINOR_VERSION_IPW_IRQ_C 4
- #define ADC_AR_RELEASE_REVISION_VERSION_IPW_IRQ_C 0
- #define ADC_SW_MAJOR_VERSION_IPW_IRQ_C 1
- #define ADC_SW_MINOR_VERSION_IPW_IRQ_C 0
- #define ADC_SW_PATCH_VERSION_IPW_IRQ_C 0
- #if (ADC_VENDOR_ID_IPW_IRQ_C != ADC_VENDOR_ID)
- #error "Adc_Ipw_Irq.c and Adc.h have different vendor ids"
- #endif
- #if ((ADC_AR_RELEASE_MAJOR_VERSION_IPW_IRQ_C != ADC_AR_RELEASE_MAJOR_VERSION) || \
- (ADC_AR_RELEASE_MINOR_VERSION_IPW_IRQ_C != ADC_AR_RELEASE_MINOR_VERSION) || \
- (ADC_AR_RELEASE_REVISION_VERSION_IPW_IRQ_C != ADC_AR_RELEASE_REVISION_VERSION) \
- )
- #error "AutoSar Version Numbers of Adc_Ipw_Irq.c and Adc.h are different"
- #endif
- #if ((ADC_SW_MAJOR_VERSION_IPW_IRQ_C != ADC_SW_MAJOR_VERSION) || \
- (ADC_SW_MINOR_VERSION_IPW_IRQ_C != ADC_SW_MINOR_VERSION) || \
- (ADC_SW_PATCH_VERSION_IPW_IRQ_C != ADC_SW_PATCH_VERSION) \
- )
- #error "Software Version Numbers of Adc_Ipw_Irq.c and Adc.h are different"
- #endif
- #if (ADC_VENDOR_ID_IPW_IRQ_C != ADC_VENDOR_ID_IPW_H)
- #error "Adc_Ipw_Irq.c and Adc_Ipw.h have different vendor ids"
- #endif
- #if ((ADC_AR_RELEASE_MAJOR_VERSION_IPW_IRQ_C != ADC_AR_RELEASE_MAJOR_VERSION_IPW_H) || \
- (ADC_AR_RELEASE_MINOR_VERSION_IPW_IRQ_C != ADC_AR_RELEASE_MINOR_VERSION_IPW_H) || \
- (ADC_AR_RELEASE_REVISION_VERSION_IPW_IRQ_C != ADC_AR_RELEASE_REVISION_VERSION_IPW_H) \
- )
- #error "AutoSar Version Numbers of Adc_Ipw_Irq.c and Adc_Ipw.h are different"
- #endif
- #if ((ADC_SW_MAJOR_VERSION_IPW_IRQ_C != ADC_SW_MAJOR_VERSION_IPW_H) || \
- (ADC_SW_MINOR_VERSION_IPW_IRQ_C != ADC_SW_MINOR_VERSION_IPW_H) || \
- (ADC_SW_PATCH_VERSION_IPW_IRQ_C != ADC_SW_PATCH_VERSION_IPW_H) \
- )
- #error "Software Version Numbers of Adc_Ipw_Irq.c and Adc_Ipw.h are different"
- #endif
- #if (ADC_VENDOR_ID_IPW_IRQ_C != ADC_VENDOR_ID_IPW_IRQ_H)
- #error "Adc_Ipw_Irq.c and Adc_Ipw_Irq.h have different vendor ids"
- #endif
- #if ((ADC_AR_RELEASE_MAJOR_VERSION_IPW_IRQ_C != ADC_AR_RELEASE_MAJOR_VERSION_IPW_IRQ_H) || \
- (ADC_AR_RELEASE_MINOR_VERSION_IPW_IRQ_C != ADC_AR_RELEASE_MINOR_VERSION_IPW_IRQ_H) || \
- (ADC_AR_RELEASE_REVISION_VERSION_IPW_IRQ_C != ADC_AR_RELEASE_REVISION_VERSION_IPW_IRQ_H) \
- )
- #error "AutoSar Version Numbers of Adc_Ipw_Irq.c and Adc_Ipw_Irq.h are different"
- #endif
- #if ((ADC_SW_MAJOR_VERSION_IPW_IRQ_C != ADC_SW_MAJOR_VERSION_IPW_IRQ_H) || \
- (ADC_SW_MINOR_VERSION_IPW_IRQ_C != ADC_SW_MINOR_VERSION_IPW_IRQ_H) || \
- (ADC_SW_PATCH_VERSION_IPW_IRQ_C != ADC_SW_PATCH_VERSION_IPW_IRQ_H) \
- )
- #error "Software Version Numbers of Adc_Ipw_Irq.c and Adc_Ipw_Irq.h are different"
- #endif
- #if (ADC_VENDOR_ID_IPW_IRQ_C != ADC_VENDOR_ID_IPW_TYPES_H)
- #error "Adc_Ipw_Irq.c and Adc_Ipw_Types.h have different vendor ids"
- #endif
- #if ((ADC_AR_RELEASE_MAJOR_VERSION_IPW_IRQ_C != ADC_AR_RELEASE_MAJOR_VERSION_IPW_TYPES_H) || \
- (ADC_AR_RELEASE_MINOR_VERSION_IPW_IRQ_C != ADC_AR_RELEASE_MINOR_VERSION_IPW_TYPES_H) || \
- (ADC_AR_RELEASE_REVISION_VERSION_IPW_IRQ_C != ADC_AR_RELEASE_REVISION_VERSION_IPW_TYPES_H) \
- )
- #error "AutoSar Version Numbers of Adc_Ipw_Irq.c and Adc_Ipw_Types.h are different"
- #endif
- #if ((ADC_SW_MAJOR_VERSION_IPW_IRQ_C != ADC_SW_MAJOR_VERSION_IPW_TYPES_H) || \
- (ADC_SW_MINOR_VERSION_IPW_IRQ_C != ADC_SW_MINOR_VERSION_IPW_TYPES_H) || \
- (ADC_SW_PATCH_VERSION_IPW_IRQ_C != ADC_SW_PATCH_VERSION_IPW_TYPES_H) \
- )
- #error "Software Version Numbers of Adc_Ipw_Irq.c and Adc_Ipw_Types.h are different"
- #endif
- #ifndef DISABLE_MCAL_INTERMODULE_ASR_CHECK
- #if ((ADC_AR_RELEASE_MAJOR_VERSION_IPW_IRQ_C != MCAL_AR_RELEASE_MAJOR_VERSION) || \
- (ADC_AR_RELEASE_MINOR_VERSION_IPW_IRQ_C != MCAL_AR_RELEASE_MINOR_VERSION) \
- )
- #error "AutoSar Version Numbers of Adc_Ipw_Irq.c and Mcal.h are different"
- #endif
- #if ((ADC_AR_RELEASE_MAJOR_VERSION_IPW_IRQ_C != DET_AR_RELEASE_MAJOR_VERSION) || \
- (ADC_AR_RELEASE_MINOR_VERSION_IPW_IRQ_C != DET_AR_RELEASE_MINOR_VERSION) \
- )
- #error "AutoSar Version Numbers of Adc_Ipw_Irq.c and Det.h are different"
- #endif
- #endif
- #define ADC_IPW_PREV_CHANNEL_INDEX(x) ((((x) % ADC_MAX_CHAN_COUNT) == 0U) ? ((x) - ADC_MAX_CHAN_COUNT) : ((Adc_ChannelIndexType)((x)-((x) % ADC_MAX_CHAN_COUNT))))
- #define ADC_START_SEC_VAR_CLEARED_UNSPECIFIED
- #include "Adc_MemMap.h"
- #if (ADC_SETCHANNEL_API == STD_ON)
- extern Adc_RuntimeGroupChannelType Adc_aRuntimeGroupChannel[ADC_MAX_GROUPS];
- #endif
- #define ADC_STOP_SEC_VAR_CLEARED_UNSPECIFIED
- #include "Adc_MemMap.h"
- #define ADC_START_SEC_CODE
- #include "Adc_MemMap.h"
- #if ((defined(ADC_UNIT_0_ISR_USED)) || (defined(ADC_UNIT_1_ISR_USED)) || \
- (defined(ADC_DMA_SUPPORTED)) \
- )
- #if (ADC_GRP_NOTIF_CAPABILITY == STD_ON)
- static inline void Adc_Ipw_CallNotification
- (
- Adc_GroupType Group,
- uint32 u32CoreId
- );
- #endif
- #if (ADC_OPTIMIZE_ONESHOT_HW_TRIGGER == STD_OFF)
- static inline void Adc_Ipw_UpdateQueue
- (
- Adc_HwUnitType Unit,
- uint32 u32CoreId
- );
- #endif
- #if (ADC_ENABLE_INITIAL_NOTIFICATION == STD_ON)
- static inline void Adc_Ipw_CallExtraNotification
- (
- Adc_GroupType Group,
- uint32 u32CoreId
- );
- #endif
- static inline Std_ReturnType Adc_Ipw_CheckConversionChannels
- (
- Adc_HwUnitType Unit,
- Adc_GroupType Group,
- Adc_StreamNumSampleType GroupSamples,
- uint32 u32CoreId
- );
- #if (ADC_ENABLE_LIMIT_CHECK == STD_ON)
- static inline void Adc_Ipw_HandleConversionCheckFail
- (
- Adc_HwUnitType Unit,
- Adc_GroupType Group,
- const Adc_GroupConfigurationType * GroupPtr,
- uint32 u32CoreId
- );
- #endif
- #if (ADC_OPTIMIZE_ONESHOT_HW_TRIGGER == STD_OFF)
- static inline void Adc_Ipw_RestartConversion
- (
- Adc_HwUnitType Unit,
- Adc_GroupType Group,
- uint32 u32CoreId
- );
- static inline void Adc_Ipw_UpdateSoftwareGroupState
- (
- Adc_HwUnitType Unit,
- Adc_GroupType Group,
- Adc_StreamNumSampleType GroupSamples,
- uint32 u32CoreId
- );
- #if (ADC_HW_TRIGGER_API == STD_ON)
- #ifdef ADC_DMA_SUPPORTED
- static inline void Adc_Ipw_CheckAndUpdateDmaHwGroupState
- (
- Adc_HwUnitType Unit,
- Adc_GroupType Group,
- const uint32 u32AdcDmaLogicChId,
- uint32 u32CoreId
- );
- #endif
- static inline uint32 Adc_Ipw_GetCurrentSampleCount
- (
- #if (STD_ON == ADC_OPTIMIZE_DMA_STREAMING_GROUPS)
- Adc_GroupType Group,
- Adc_HwUnitType Unit,
- Adc_StreamNumSampleType GroupSamples,
- uint32 u32CoreId
- #else
- Adc_GroupType Group
- #endif
- );
- static inline void Adc_Ipw_UpdateHardwareGroupState
- (
- Adc_HwUnitType Unit,
- Adc_GroupType Group,
- Adc_StreamNumSampleType GroupSamples,
- uint32 u32CoreId
- );
- #endif
- #endif
- static inline void Adc_Ipw_EndConversion
- (
- Adc_HwUnitType Unit,
- Adc_GroupType Group,
- boolean IsSoftwareConversion,
- uint32 u32CoreId
- );
- #ifdef ADC_DMA_SUPPORTED
- static inline void Adc_Ipw_EndDmaConversion
- (
- Adc_HwUnitType Unit,
- Adc_GroupType Group,
- boolean IsSoftwareConversion,
- uint32 u32CoreId
- );
- #if (ADC_OPTIMIZE_ONESHOT_HW_TRIGGER == STD_OFF)
- static inline void Adc_Ipw_UpdateDmaConfig
- (
- const Adc_ValueGroupType * DataPtr,
- const uint32 DmaLogicChId,
- uint8 NumChannel
- );
- static inline void Adc_Ipw_ContinueDmaConversion
- (
- Adc_HwUnitType Unit,
- Adc_GroupType Group,
- const Adc_ChannelIndexType ChannelCount,
- const uint32 AdcDmaLogicChId,
- uint32 u32CoreId
- );
- #endif
- #if (ADC_ENABLE_LIMIT_CHECK == STD_ON)
- static inline Std_ReturnType Adc_Ipw_CheckGroupConvResultDma
- (
- const Adc_GroupConfigurationType * pGroupPtr,
- uint32 u32CoreId
- );
- #endif
- #endif
- static inline void Adc_Ipw_ReadData
- (
- const Adc_GroupConfigurationType * GroupPtr,
- Adc_ValueGroupType * pResult,
- const Adc_StreamNumSampleType GroupSamples,
- const Adc_ChannelIndexType Index,
- const uint16 ConvResult
- );
- static inline void Adc_Ipw_EndConversionNotification
- (
- const Adc_HwUnitType PhysicalAdcUnit
- );
- #endif
- #if ((defined(ADC_UNIT_0_ISR_USED)) || (defined(ADC_UNIT_1_ISR_USED)) || \
- (defined(ADC_DMA_SUPPORTED)))
- #if (ADC_GRP_NOTIF_CAPABILITY == STD_ON)
- static inline void Adc_Ipw_CallNotification
- (
- Adc_GroupType Group,
- uint32 u32CoreId
- )
- {
- Adc_GroupType GroupIndex = Adc_pCfgPtr[u32CoreId]->pGroupIdToIndexMap[Group];
-
- if ((ADC_NOTIFICATION_ENABLED == Adc_aGroupStatus[Group].eNotification) && \
- (NULL_PTR != Adc_pCfgPtr[u32CoreId]->pGroups[GroupIndex].Notification)
- )
- {
-
- Adc_pCfgPtr[u32CoreId]->pGroups[GroupIndex].Notification();
- }
- }
- #endif
- #if (ADC_OPTIMIZE_ONESHOT_HW_TRIGGER == STD_OFF)
- static inline void Adc_Ipw_UpdateQueue
- (
- Adc_HwUnitType Unit,
- uint32 u32CoreId
- )
- {
- #if (ADC_ENABLE_QUEUING == STD_ON)
-
- Adc_RemoveFromQueue(Unit, 0U);
- #if (ADC_ENABLE_START_STOP_GROUP_API == STD_ON)
- if (Adc_aUnitStatus[Unit].SwNormalQueueIndex > (Adc_QueueIndexType)0U)
- {
-
- Adc_Ipw_StartNormalConversion(Unit, u32CoreId);
- }
- #endif
- #else
-
- Adc_aUnitStatus[Unit].SwNormalQueueIndex = (Adc_QueueIndexType)0;
- #endif
- (void)u32CoreId;
- }
- #endif
- #if (ADC_ENABLE_INITIAL_NOTIFICATION == STD_ON)
- static inline void Adc_Ipw_CallExtraNotification
- (
- Adc_GroupType Group,
- uint32 u32CoreId
- )
- {
- Adc_GroupType GroupIndex = Adc_pCfgPtr[u32CoreId]->pGroupIdToIndexMap[Group];
-
- if (Adc_pCfgPtr[u32CoreId]->pGroups[GroupIndex].ExtraNotification != NULL_PTR)
- {
- Adc_pCfgPtr[u32CoreId]->pGroups[GroupIndex].ExtraNotification();
- }
- }
- #endif
- static inline Std_ReturnType Adc_Ipw_CheckConversionChannels
- (
- Adc_HwUnitType Unit,
- Adc_GroupType Group,
- Adc_StreamNumSampleType GroupSamples,
- uint32 u32CoreId
- )
- {
- const Adc_GroupType GroupIndex = Adc_pCfgPtr[u32CoreId]->pGroupIdToIndexMap[Group];
- const Adc_GroupConfigurationType * GroupPtr;
- Adc_ChannelIndexType CurrentChannel = Adc_aGroupStatus[Group].CurrentChannel;
- Adc_ChannelIndexType Temp;
- Adc_ChannelIndexType Index;
- uint16 ConvResult;
- Adc_ValueGroupType * ResultIndex = NULL_PTR;
- Adc_HwUnitType PhysicalHwUnitId = Adc_pCfgPtr[u32CoreId]->pAdcIpwConfig->aAdcPhysicalId[Unit];
- Std_ReturnType Status = (Std_ReturnType)E_OK;
- const uint8 NumsBitShift = Adc_Ipw_CalculateNumsBitShift(Adc_pCfgPtr[u32CoreId]->pAdcIpwConfig->apAdcConfig[Unit]->Resolution);
- #if (ADC_ENABLE_LIMIT_CHECK == STD_ON)
- Adc_ChannelType HwChannel;
- boolean bFlag = FALSE;
- #endif
- boolean ValidConversion = TRUE;
-
- #if (ADC_SETCHANNEL_API == STD_ON)
- Index = Adc_aRuntimeGroupChannel[Group].ChannelCount;
- #else
- Index = Adc_pCfgPtr[u32CoreId]->pGroups[GroupIndex].AssignedChannelCount;
- #endif
- GroupPtr = &(Adc_pCfgPtr[u32CoreId]->pGroups[GroupIndex]);
- if (CurrentChannel <= Index)
- {
-
- Temp = (Adc_ChannelIndexType)ADC_IPW_PREV_CHANNEL_INDEX(CurrentChannel);
- #if (ADC_ENABLE_GROUP_STREAMING_RESULTS_REORDER == STD_ON)
-
- if (FALSE == GroupPtr->bStreamResultGroupMultiSets)
- {
- #endif
- ResultIndex = GroupPtr->pResultsBufferPtr[Group] + Adc_aGroupStatus[Group].ResultIndex;
- #if (ADC_ENABLE_GROUP_STREAMING_RESULTS_REORDER == STD_ON)
- }
- else
- {
- ResultIndex = GroupPtr->pResultsBufferPtr[Group] + (Adc_aGroupStatus[Group].ResultIndex * Index);
- }
- #endif
- ValidConversion = Adc_Ipw_CheckValidConversion(PhysicalHwUnitId, Temp, CurrentChannel);
- if (ValidConversion)
- {
-
- for (Index = Temp; Index < CurrentChannel; Index++)
- {
- ConvResult = Adc_Ip_GetConvData(PhysicalHwUnitId, Index - Temp);
-
- ConvResult = ConvResult << (NumsBitShift);
- #if (ADC_ENABLE_LIMIT_CHECK == STD_ON)
- if (
- (TRUE == GroupPtr->bAdcGroupLimitcheck)
- #if (ADC_SETCHANNEL_API == STD_ON)
- || (TRUE == Adc_aRuntimeGroupChannel[Group].bAdcRuntimeGroupLimitcheck)
- #endif
- )
- {
- #if (ADC_SETCHANNEL_API == STD_ON)
- HwChannel = Adc_aRuntimeGroupChannel[Group].pChannel[Index];
- #else
- HwChannel = Adc_pCfgPtr[u32CoreId]->pGroups[GroupIndex].pAssignment[Index];
- #endif
-
- bFlag = Adc_Ipw_CheckConversionValuesInRange(ConvResult, Unit, HwChannel, u32CoreId);
- if (TRUE == bFlag)
- {
- Adc_Ipw_ReadData(GroupPtr, ResultIndex, GroupSamples, Index, ConvResult);
- Adc_aGroupStatus[Group].bLimitCheckFailed = FALSE;
- }
- else
- {
- Adc_aGroupStatus[Group].eAlreadyConverted = ADC_ALREADY_CONVERTED;
- Adc_aGroupStatus[Group].bLimitCheckFailed = TRUE;
- Status = E_NOT_OK;
- break;
- }
- }
- else
- {
- Adc_Ipw_ReadData(GroupPtr, ResultIndex, GroupSamples, Index, ConvResult);
- }
- #else
- Adc_Ipw_ReadData(GroupPtr, ResultIndex, GroupSamples, Index, ConvResult);
- #endif
- }
- }
- else
- {
- Status = (Std_ReturnType)E_NOT_OK;
- }
- }
- return Status;
- }
- #if (ADC_ENABLE_LIMIT_CHECK == STD_ON)
- static inline void Adc_Ipw_HandleConversionCheckFail
- (
- Adc_HwUnitType Unit,
- Adc_GroupType Group,
- const Adc_GroupConfigurationType * GroupPtr,
- uint32 u32CoreId
- )
- {
- uint8 Channel;
- Adc_Ip_ChanConfigType ChannelConfig;
- Adc_HwUnitType PhysicalHwUnitId = Adc_pCfgPtr[u32CoreId]->pAdcIpwConfig->aAdcPhysicalId[Unit];
- if (ADC_CONV_MODE_ONESHOT == GroupPtr->eMode)
- {
-
- for (Channel = 0U; Channel < Adc_aUnitStatus[Unit].u8Sc1Used; Channel++)
- {
- ChannelConfig.ChnIdx = Channel;
- ChannelConfig.Channel = ADC_IP_INPUTCHAN_DISABLED;
- ChannelConfig.InterruptEnable = FALSE;
- Adc_Ip_ConfigChannel(PhysicalHwUnitId, &ChannelConfig);
- }
- }
-
- else
- {
- Adc_aGroupStatus[Group].CurrentChannel = 0U;
- Adc_Ipw_ConfigureConversion(Unit, Group, PDB_ADC_IP_SOFTWARE_TRIGGER, 1U, u32CoreId);
- }
- }
- #endif
- #if (ADC_SETCHANNEL_API == STD_ON)
- static inline void Adc_Ipw_ConfigureRuntimeChannels
- (
- Adc_HwUnitType Unit,
- const Adc_GroupConfigurationType * GroupPtr,
- uint8 NumChannel,
- uint32 CoreId
- )
- {
- Adc_GroupType Group = GroupPtr->GroupId;
- Adc_aGroupStatus[Group].CurrentChannel = 0U;
- Adc_aGroupStatus[Group].ResultIndex = 0U;
- #ifdef ADC_DMA_SUPPORTED
-
- if ((ADC_DMA == Adc_pCfgPtr[CoreId]->pAdcIpwConfig->Mapping.u8Adc_DmaInterruptSoftware[Unit]))
- {
- if((uint8)STD_OFF == GroupPtr->u8AdcExtDMAChanEnable)
- {
-
- Adc_Ipw_StartDmaOperation(Unit, Group, NumChannel, CoreId);
- }
-
- #if (ADC_HW_TRIGGER_API == STD_ON)
- Adc_Ipw_ConfigureDmaConversion(Unit, Group, GroupPtr->HwTriggerSource, NumChannel);
- #else
- Adc_Ipw_ConfigureDmaConversion(Unit, Group, PDB_ADC_IP_SOFTWARE_TRIGGER, NumChannel);
- #endif
- }
- else
- #endif
- {
-
- #if (ADC_HW_TRIGGER_API == STD_ON)
- Adc_Ipw_ConfigureConversion(Unit, Group, GroupPtr->HwTriggerSource, NumChannel, CoreId);
- #else
- Adc_Ipw_ConfigureConversion(Unit, Group, PDB_ADC_IP_SOFTWARE_TRIGGER, NumChannel, CoreId);
- #endif
- }
-
- Adc_aRuntimeGroupChannel[Group].bRuntimeUpdated = FALSE;
- }
- #endif
- #if (ADC_OPTIMIZE_ONESHOT_HW_TRIGGER == STD_OFF)
- static inline void Adc_Ipw_RestartConversion
- (
- Adc_HwUnitType Unit,
- Adc_GroupType Group,
- uint32 u32CoreId
- )
- {
- const Adc_GroupType GroupIndex = Adc_pCfgPtr[u32CoreId]->pGroupIdToIndexMap[Group];
- #if ((ADC_SETCHANNEL_API == STD_ON) || defined(ADC_DMA_SUPPORTED))
-
- const Adc_GroupConfigurationType * GroupPtr = &(Adc_pCfgPtr[u32CoreId]->pGroups[GroupIndex]);
- #endif
- #ifdef ADC_DMA_SUPPORTED
- const uint32 AdcDmaLogicChId = Adc_pCfgPtr[u32CoreId]->pAdcIpwConfig->Mapping.au8Adc_DmaChannel[Unit];
- uint16 ResultIndex;
- #endif
- uint8 NumChannel;
- Adc_ChannelIndexType ChannelCount;
- Adc_HwUnitType PhysicalHwUnitId = Adc_pCfgPtr[u32CoreId]->pAdcIpwConfig->aAdcPhysicalId[Unit];
- #if (ADC_SETCHANNEL_API == STD_ON)
-
- ChannelCount = Adc_aRuntimeGroupChannel[Group].ChannelCount;
- #else
-
- ChannelCount = Adc_pCfgPtr[u32CoreId]->pGroups[GroupIndex].AssignedChannelCount;
- #endif
-
- NumChannel = (uint8)ADC_IPW_CALCULATE_CHAN_NUMBER(ChannelCount);
- #if (ADC_SETCHANNEL_API == STD_ON)
-
- if (TRUE == Adc_aRuntimeGroupChannel[Group].bRuntimeUpdated)
- {
- Adc_Ipw_ConfigureRuntimeChannels(Unit, GroupPtr, NumChannel, u32CoreId);
- }
- else
- #endif
- {
- #ifdef ADC_DMA_SUPPORTED
- #if (STD_ON == ADC_OPTIMIZE_DMA_STREAMING_GROUPS)
- if (FALSE == GroupPtr->bAdcOptimizeDmaStream)
- #endif
- #endif
- {
-
- if (ChannelCount <= ADC_MAX_CHAN_COUNT)
- {
-
-
- Adc_aGroupStatus[Group].CurrentChannel = ChannelCount;
-
- Pdb_Adc_Ip_SwTrigger(PhysicalHwUnitId);
- }
-
- else
- {
- Adc_aGroupStatus[Group].CurrentChannel = 0U;
- #ifdef ADC_DMA_SUPPORTED
- if (ADC_DMA == Adc_pCfgPtr[u32CoreId]->pAdcIpwConfig->Mapping.u8Adc_DmaInterruptSoftware[Unit])
- {
-
- if ((uint8)STD_OFF == GroupPtr->u8AdcExtDMAChanEnable)
- {
- #if (ADC_ENABLE_GROUP_STREAMING_RESULTS_REORDER == STD_ON)
- if (TRUE == GroupPtr->bStreamResultGroupMultiSets)
- {
- ResultIndex = Adc_aGroupStatus[Group].ResultIndex * ChannelCount;
- }
- else
- #endif
- {
- ResultIndex = Adc_aGroupStatus[Group].ResultIndex;
- }
-
- Adc_Ipw_UpdateDmaConfig((&(GroupPtr->pResultsBufferPtr[Group][ResultIndex])), AdcDmaLogicChId, NumChannel);
- }
- Adc_Ipw_ConfigureDmaConversion(Unit, Group, PDB_ADC_IP_SOFTWARE_TRIGGER, NumChannel);
- }
- else
- #endif
- {
-
- Adc_Ipw_ConfigureConversion(Unit, Group, PDB_ADC_IP_SOFTWARE_TRIGGER, NumChannel, u32CoreId);
- }
- }
- }
- }
- }
- static inline uint32 Adc_Ipw_GetCurrentSampleCount
- (
- #if (STD_ON == ADC_OPTIMIZE_DMA_STREAMING_GROUPS)
- Adc_GroupType Group,
- Adc_HwUnitType Unit,
- Adc_StreamNumSampleType GroupSamples,
- uint32 u32CoreId
- #else
- Adc_GroupType Group
- #endif
- )
- {
- Adc_StreamNumSampleType CurrentSampleCount;
- #ifdef ADC_DMA_SUPPORTED
- #if (STD_ON == ADC_OPTIMIZE_DMA_STREAMING_GROUPS)
- uint32 CurrentIter = 0U;
- const Adc_GroupType GroupIndex = Adc_pCfgPtr[u32CoreId]->pGroupIdToIndexMap[Group];
- const Adc_Ipw_Config * const pAdcIpwConfigPtr = Adc_pCfgPtr[u32CoreId]->pAdcIpwConfig;
- const uint32 u32AdcDmaLogicChId = (uint32) pAdcIpwConfigPtr->Mapping.au8Adc_DmaChannel[Unit];
- const uint32 u32AdcCountingDmaLogicChId = (uint32) pAdcIpwConfigPtr->Mapping.au8Adc_CountingDmaChannel[Unit];
- #endif
- #endif
- #ifdef ADC_DMA_SUPPORTED
- #if (STD_ON == ADC_OPTIMIZE_DMA_STREAMING_GROUPS)
- if (TRUE == Adc_pCfgPtr[u32CoreId]->pGroups[GroupIndex].bAdcOptimizeDmaStream)
- {
- if (1U < Adc_pCfgPtr[u32CoreId]->pGroups[GroupIndex].AssignedChannelCount)
- {
- (void)Dma_Ip_GetLogicChannelParam(u32AdcCountingDmaLogicChId, DMA_IP_CH_GET_CURRENT_ITER_COUNT, &CurrentIter);
- }
- else
- {
- (void)Dma_Ip_GetLogicChannelParam(u32AdcDmaLogicChId, DMA_IP_CH_GET_CURRENT_ITER_COUNT, &CurrentIter);
- }
-
- if ((Adc_StreamNumSampleType)CurrentIter != GroupSamples)
- {
-
- CurrentSampleCount = GroupSamples - (Adc_StreamNumSampleType)CurrentIter;
- }
- else
- {
-
- CurrentSampleCount = (Adc_StreamNumSampleType)CurrentIter;
- }
- Adc_aGroupStatus[Group].ResultIndex = CurrentSampleCount;
- }
- else
- #endif
- #endif
- {
- CurrentSampleCount = Adc_aGroupStatus[Group].ResultIndex;
- }
- return CurrentSampleCount;
- }
- static inline void Adc_Ipw_UpdateSoftwareGroupState
- (
- Adc_HwUnitType Unit,
- Adc_GroupType Group,
- Adc_StreamNumSampleType GroupSamples,
- uint32 u32CoreId
- )
- {
- uint32 CurrentSampleCount;
- const Adc_GroupType GroupIndex = Adc_pCfgPtr[u32CoreId]->pGroupIdToIndexMap[Group];
- #ifdef ADC_DMA_SUPPORTED
- const Adc_Ipw_Config * const pAdcIpwConfigPtr = Adc_pCfgPtr[u32CoreId]->pAdcIpwConfig;
- const uint32 u32AdcDmaLogicChId = (uint32) pAdcIpwConfigPtr->Mapping.au8Adc_DmaChannel[Unit];
- Adc_HwUnitType PhysicalHwUnitId = pAdcIpwConfigPtr->aAdcPhysicalId[Unit];
- Dma_Ip_LogicChannelScatterGatherListType LocTransferList[1U];
- #endif
-
-
- Adc_aGroupStatus[Group].eAlreadyConverted = ADC_ALREADY_CONVERTED;
-
-
- if (ADC_BUSY == Adc_aGroupStatus[Group].eConversion)
- {
- Adc_aGroupStatus[Group].eConversion = ADC_COMPLETED;
- }
- #if (STD_ON == ADC_OPTIMIZE_DMA_STREAMING_GROUPS)
- CurrentSampleCount = Adc_Ipw_GetCurrentSampleCount(Group, Unit, GroupSamples, u32CoreId);
- #else
- CurrentSampleCount = Adc_Ipw_GetCurrentSampleCount(Group);
- #endif
-
- if (CurrentSampleCount >= GroupSamples)
- {
-
- Adc_aGroupStatus[Group].eConversion = ADC_STREAM_COMPLETED;
- if ((ADC_STREAM_BUFFER_LINEAR == Adc_pCfgPtr[u32CoreId]->pGroups[GroupIndex].eBufferMode) && \
- (ADC_ACCESS_MODE_STREAMING == Adc_pCfgPtr[u32CoreId]->pGroups[GroupIndex].eAccessMode) \
- )
- {
- #ifdef ADC_DMA_SUPPORTED
-
- if (ADC_DMA == pAdcIpwConfigPtr->Mapping.u8Adc_DmaInterruptSoftware[Unit])
- {
-
- Adc_Ip_DisableDma(PhysicalHwUnitId);
- }
- #if (STD_ON == ADC_OPTIMIZE_DMA_STREAMING_GROUPS)
-
- if (TRUE == Adc_pCfgPtr[u32CoreId]->pGroups[GroupIndex].bAdcOptimizeDmaStream)
- {
- Pdb_Adc_Ip_DisableAndClearPdb(PhysicalHwUnitId);
- }
- #endif
- #endif
-
- Adc_Ipw_UpdateQueue(Unit, u32CoreId);
- }
- else
- {
-
- if (ADC_CONV_MODE_CONTINUOUS == Adc_pCfgPtr[u32CoreId]->pGroups[GroupIndex].eMode)
- {
-
- Adc_aGroupStatus[Group].ResultIndex = 0U;
- #ifdef ADC_DMA_SUPPORTED
-
- if (ADC_DMA == pAdcIpwConfigPtr->Mapping.u8Adc_DmaInterruptSoftware[Unit])
- {
- if((uint8)STD_OFF == Adc_pCfgPtr[u32CoreId]->pGroups[GroupIndex].u8AdcExtDMAChanEnable)
- {
- LocTransferList[0].Param = DMA_IP_CH_SET_DESTINATION_ADDRESS;
- LocTransferList[0].Value = (uint32)(&(Adc_pCfgPtr[u32CoreId]->pGroups[GroupIndex].pResultsBufferPtr[Group][0U]));
- (void)Dma_Ip_SetLogicChannelTransferList(u32AdcDmaLogicChId, LocTransferList, 1U);
- }
- }
- #endif
- Adc_Ipw_RestartConversion(Unit, Group, u32CoreId);
- }
- else
- {
-
- Adc_Ipw_UpdateQueue(Unit, u32CoreId);
- }
- }
- }
- else
- {
-
- Adc_Ipw_RestartConversion(Unit, Group, u32CoreId);
- }
- #if (ADC_GRP_NOTIF_CAPABILITY == STD_ON)
-
- Adc_Ipw_CallNotification(Group, u32CoreId);
- #endif
- }
- #if (ADC_HW_TRIGGER_API == STD_ON)
- #ifdef ADC_DMA_SUPPORTED
- static inline void Adc_Ipw_CheckAndUpdateDmaHwGroupState
- (
- Adc_HwUnitType Unit,
- Adc_GroupType Group,
- const uint32 u32AdcDmaLogicChId,
- uint32 u32CoreId
- )
- {
- const Adc_GroupType GroupIndex = Adc_pCfgPtr[u32CoreId]->pGroupIdToIndexMap[Group];
- Dma_Ip_LogicChannelScatterGatherListType LocTransferList[1U];
-
- if ((ADC_STREAM_BUFFER_CIRCULAR == Adc_pCfgPtr[u32CoreId]->pGroups[GroupIndex].eBufferMode) && \
- (ADC_ACCESS_MODE_STREAMING == Adc_pCfgPtr[u32CoreId]->pGroups[GroupIndex].eAccessMode)
- )
- {
- if (ADC_DMA == Adc_pCfgPtr[u32CoreId]->pAdcIpwConfig->Mapping.u8Adc_DmaInterruptSoftware[Unit])
- {
- if((uint8)STD_OFF == Adc_pCfgPtr[u32CoreId]->pGroups[GroupIndex].u8AdcExtDMAChanEnable)
- {
- LocTransferList[0].Param = DMA_IP_CH_SET_DESTINATION_ADDRESS;
- LocTransferList[0].Value = (uint32)(&(Adc_pCfgPtr[u32CoreId]->pGroups[GroupIndex].pResultsBufferPtr[Group][0U]));
- (void)Dma_Ip_SetLogicChannelTransferList(u32AdcDmaLogicChId, LocTransferList, 1U);
- }
- }
- }
- }
- #endif
- static inline void Adc_Ipw_UpdateHardwareGroupState
- (
- Adc_HwUnitType Unit,
- Adc_GroupType Group,
- Adc_StreamNumSampleType GroupSamples,
- uint32 u32CoreId
- )
- {
- boolean NotificationCalled = FALSE;
- uint32 CurrentSampleCount;
- Adc_ChannelIndexType ChannelCount;
- const Adc_GroupType GroupIndex = Adc_pCfgPtr[u32CoreId]->pGroupIdToIndexMap[Group];
- const Adc_Ipw_Config * const pAdcIpwConfigPtr = Adc_pCfgPtr[u32CoreId]->pAdcIpwConfig;
- Adc_HwUnitType PhysicalHwUnitId = pAdcIpwConfigPtr->aAdcPhysicalId[Unit];
- #ifdef ADC_DMA_SUPPORTED
- const uint32 u32AdcDmaLogicChId = (uint32) pAdcIpwConfigPtr->Mapping.au8Adc_DmaChannel[Unit];
- #endif
- #if (ADC_SETCHANNEL_API == STD_ON)
- ChannelCount = Adc_aRuntimeGroupChannel[Group].ChannelCount;
- #else
- ChannelCount = Adc_pCfgPtr[u32CoreId]->pGroups[GroupIndex].AssignedChannelCount;
- #endif
-
- Adc_aGroupStatus[Group].eAlreadyConverted = ADC_ALREADY_CONVERTED;
-
- if (ADC_BUSY == Adc_aGroupStatus[Group].eConversion)
- {
- Adc_aGroupStatus[Group].eConversion = ADC_COMPLETED;
- }
- #if (STD_ON == ADC_OPTIMIZE_DMA_STREAMING_GROUPS)
- CurrentSampleCount = Adc_Ipw_GetCurrentSampleCount(Group, Unit, GroupSamples, u32CoreId);
- #else
- CurrentSampleCount = Adc_Ipw_GetCurrentSampleCount(Group);
- #endif
- if (CurrentSampleCount >= GroupSamples)
- {
- Adc_aGroupStatus[Group].eConversion = ADC_STREAM_COMPLETED;
- if ((ADC_STREAM_BUFFER_LINEAR == Adc_pCfgPtr[u32CoreId]->pGroups[GroupIndex].eBufferMode) && \
- (ADC_ACCESS_MODE_STREAMING == Adc_pCfgPtr[u32CoreId]->pGroups[GroupIndex].eAccessMode)
- )
- {
- Adc_Ip_DisableChannelNotification(PhysicalHwUnitId, (Adc_aUnitStatus[Unit].u8Sc1Used - 1U));
- #ifdef ADC_DMA_SUPPORTED
-
- if (ADC_DMA == pAdcIpwConfigPtr->Mapping.u8Adc_DmaInterruptSoftware[Unit])
- {
-
- Adc_Ip_DisableDma(PhysicalHwUnitId);
- }
- #endif
- #if (ADC_GRP_NOTIF_CAPABILITY == STD_ON)
- Adc_Ipw_CallNotification(Group, u32CoreId);
- #endif
- NotificationCalled = TRUE;
- }
- else
- {
- Adc_aGroupStatus[Group].ResultIndex = 0U;
- #ifdef ADC_DMA_SUPPORTED
- Adc_Ipw_CheckAndUpdateDmaHwGroupState(Unit, Group, u32AdcDmaLogicChId, u32CoreId);
- #endif
- }
- }
- if (NotificationCalled == FALSE)
- {
-
- if ((ChannelCount > ADC_MAX_CHAN_COUNT)
- #if (ADC_SETCHANNEL_API == STD_ON)
- || (TRUE == Adc_aRuntimeGroupChannel[Group].bRuntimeUpdated)
- #endif
- )
- {
- Adc_Ipw_StartHwTrigConversion(Unit, Group, u32CoreId);
- }
- #if (ADC_GRP_NOTIF_CAPABILITY == STD_ON)
- Adc_Ipw_CallNotification(Group, u32CoreId);
- #endif
- }
- }
- #endif
- #endif
- static inline void Adc_Ipw_EndConversion
- (
- Adc_HwUnitType Unit,
- Adc_GroupType Group,
- boolean IsSoftwareConversion,
- uint32 u32CoreId
- )
- {
- const Adc_GroupType GroupIndex = Adc_pCfgPtr[u32CoreId]->pGroupIdToIndexMap[Group];
- const Adc_GroupConfigurationType * GroupPtr;
- #if (ADC_OPTIMIZE_ONESHOT_HW_TRIGGER == STD_OFF)
- Adc_ChannelIndexType NumChannel;
- uint8 LeftChannel;
- #endif
- #if ((ADC_SETCHANNEL_API == STD_ON) || ((ADC_SETCHANNEL_API == STD_OFF) && (ADC_OPTIMIZE_ONESHOT_HW_TRIGGER == STD_OFF)))
- Adc_ChannelIndexType ChannelCount;
- #endif
-
- GroupPtr = &(Adc_pCfgPtr[u32CoreId]->pGroups[GroupIndex]);
- #if (ADC_SETCHANNEL_API == STD_ON)
-
- ChannelCount = Adc_aRuntimeGroupChannel[Group].ChannelCount;
-
- if (TRUE == Adc_aRuntimeGroupChannel[Group].bRuntimeUpdated)
- {
- Adc_Ipw_ConfigureRuntimeChannels(Unit, GroupPtr, (uint8)ADC_IPW_CALCULATE_CHAN_NUMBER(ChannelCount), u32CoreId);
- }
- else
- #endif
- {
-
- if (Adc_Ipw_CheckConversionChannels(Unit, Group, GroupPtr->NumSamples, u32CoreId) == (Std_ReturnType)E_OK)
- {
- #if (ADC_OPTIMIZE_ONESHOT_HW_TRIGGER == STD_OFF)
-
- #if (ADC_SETCHANNEL_API == STD_OFF)
-
- ChannelCount = GroupPtr->AssignedChannelCount;
- #endif
-
-
- if (Adc_aGroupStatus[Group].CurrentChannel < ChannelCount)
- {
-
- NumChannel = ChannelCount - Adc_aGroupStatus[Group].CurrentChannel;
-
- LeftChannel = (uint8)ADC_IPW_CALCULATE_CHAN_NUMBER(NumChannel);
-
- Adc_Ipw_ConfigureConversion(Unit, Group, PDB_ADC_IP_SOFTWARE_TRIGGER, LeftChannel, u32CoreId);
- }
-
- else
- #endif
- {
- #if (ADC_ENABLE_INITIAL_NOTIFICATION == STD_ON)
- Adc_Ipw_CallExtraNotification(Group, u32CoreId);
- #endif
- #if (ADC_OPTIMIZE_ONESHOT_HW_TRIGGER == STD_ON)
-
- Adc_aGroupStatus[Group].eAlreadyConverted = ADC_ALREADY_CONVERTED;
- Adc_aGroupStatus[Group].eConversion = ADC_STREAM_COMPLETED;
- #if (ADC_SETCHANNEL_API == STD_ON)
-
- if (TRUE == Adc_aRuntimeGroupChannel[Group].bRuntimeUpdated)
- {
- Adc_Ipw_ConfigureRuntimeChannels(Unit, GroupPtr, (uint8)ADC_IPW_CALCULATE_CHAN_NUMBER(ChannelCount), u32CoreId);
- }
- #endif
- #if (ADC_ENABLE_LIMIT_CHECK == STD_OFF)
- (void)IsSoftwareConversion;
- #endif
- #if (ADC_GRP_NOTIF_CAPABILITY == STD_ON)
-
- Adc_Ipw_CallNotification(Group, u32CoreId);
- #endif
- #else
-
-
- Adc_aGroupStatus[Group].ResultIndex++;
-
- if (TRUE == IsSoftwareConversion)
- {
- Adc_Ipw_UpdateSoftwareGroupState(Unit, Group, GroupPtr->NumSamples, u32CoreId);
- }
- #if (ADC_HW_TRIGGER_API == STD_ON)
- else
- {
- Adc_Ipw_UpdateHardwareGroupState(Unit, Group, GroupPtr->NumSamples, u32CoreId);
- }
- #endif
- #endif
- }
- }
- #if (ADC_ENABLE_LIMIT_CHECK == STD_ON)
- else
- {
- if (TRUE == IsSoftwareConversion)
- {
- Adc_Ipw_HandleConversionCheckFail(Unit, Group, GroupPtr, u32CoreId);
- }
- }
- #endif
- }
- }
- #ifdef ADC_DMA_SUPPORTED
- static inline void Adc_Ipw_EndDmaConversion
- (
- Adc_HwUnitType Unit,
- Adc_GroupType Group,
- boolean IsSoftwareConversion,
- uint32 u32CoreId
- )
- {
- const Adc_GroupType GroupIndex = Adc_pCfgPtr[u32CoreId]->pGroupIdToIndexMap[Group];
- const Adc_GroupConfigurationType * GroupPtr = &(Adc_pCfgPtr[u32CoreId]->pGroups[GroupIndex]);
- const uint32 AdcDmaLogicChId = (uint32) Adc_pCfgPtr[u32CoreId]->pAdcIpwConfig->Mapping.au8Adc_DmaChannel[Unit];
- #if ((ADC_SETCHANNEL_API == STD_ON) || ((ADC_SETCHANNEL_API == STD_OFF) && (ADC_OPTIMIZE_ONESHOT_HW_TRIGGER == STD_OFF)))
- Adc_ChannelIndexType ChannelCount;
- #endif
- #if (ADC_SETCHANNEL_API == STD_ON)
-
- ChannelCount = Adc_aRuntimeGroupChannel[Group].ChannelCount;
-
- if (TRUE == Adc_aRuntimeGroupChannel[Group].bRuntimeUpdated)
- {
- Adc_Ipw_ConfigureRuntimeChannels(Unit, GroupPtr, (uint8)ADC_IPW_CALCULATE_CHAN_NUMBER(ChannelCount), u32CoreId);
- }
- else
- #endif
- {
- #if (ADC_ENABLE_LIMIT_CHECK == STD_ON)
- if (Adc_Ipw_CheckGroupConvResultDma(GroupPtr, u32CoreId) == (Std_ReturnType)E_OK)
- #endif
- {
- #if (ADC_OPTIMIZE_ONESHOT_HW_TRIGGER == STD_OFF)
-
- #if (ADC_SETCHANNEL_API == STD_OFF)
-
- ChannelCount = GroupPtr->AssignedChannelCount;
- #endif
-
- if (Adc_aGroupStatus[Group].CurrentChannel < ChannelCount)
- {
- Adc_Ipw_ContinueDmaConversion(Unit, Group, ChannelCount, AdcDmaLogicChId, u32CoreId);
- }
-
- else
- #endif
- {
- #if (ADC_ENABLE_INITIAL_NOTIFICATION == STD_ON)
- Adc_Ipw_CallExtraNotification(Group, u32CoreId);
- #endif
- #if (ADC_OPTIMIZE_ONESHOT_HW_TRIGGER == STD_ON)
-
- Adc_aGroupStatus[Group].eAlreadyConverted = ADC_ALREADY_CONVERTED;
- Adc_aGroupStatus[Group].eConversion = ADC_STREAM_COMPLETED;
- #if (ADC_SETCHANNEL_API == STD_ON)
-
- if (TRUE == Adc_aRuntimeGroupChannel[Group].bRuntimeUpdated)
- {
- Adc_Ipw_ConfigureRuntimeChannels(Unit, GroupPtr, (uint8)ADC_IPW_CALCULATE_CHAN_NUMBER(ChannelCount), u32CoreId);
- }
- #endif
- #if (ADC_ENABLE_LIMIT_CHECK == STD_OFF)
- (void)IsSoftwareConversion;
- #endif
- #if (ADC_GRP_NOTIF_CAPABILITY == STD_ON)
-
- Adc_Ipw_CallNotification(Group, u32CoreId);
- #endif
- #else
-
-
- Adc_aGroupStatus[Group].ResultIndex++;
-
- if (TRUE == IsSoftwareConversion)
- {
- Adc_Ipw_UpdateSoftwareGroupState(Unit, Group, GroupPtr->NumSamples, u32CoreId);
- }
- #if (ADC_HW_TRIGGER_API == STD_ON)
- else
- {
- Adc_Ipw_UpdateHardwareGroupState(Unit, Group, GroupPtr->NumSamples, u32CoreId);
- }
- #endif
- #endif
- if (ADC_DMA == Adc_pCfgPtr[u32CoreId]->pAdcIpwConfig->Mapping.u8Adc_DmaInterruptSoftware[Unit])
- {
- if((uint8)STD_OFF == GroupPtr->u8AdcExtDMAChanEnable)
- {
-
- (void)Dma_Ip_SetLogicChannelCommand(AdcDmaLogicChId, DMA_IP_CH_SET_HARDWARE_REQUEST);
- }
- }
- }
- }
- #if (ADC_ENABLE_LIMIT_CHECK == STD_ON)
- else
- {
- if (TRUE == IsSoftwareConversion)
- {
- Adc_Ipw_HandleConversionCheckFail(Unit, Group, GroupPtr, u32CoreId);
- }
- }
- #endif
- }
- }
- #if (ADC_OPTIMIZE_ONESHOT_HW_TRIGGER == STD_OFF)
- static inline void Adc_Ipw_UpdateDmaConfig
- (
- const Adc_ValueGroupType * DataPtr,
- const uint32 DmaLogicChId,
- uint8 NumChannel
- )
- {
- Dma_Ip_LogicChannelTransferListType LocTransferList[3U];
- LocTransferList[0].Param = DMA_IP_CH_SET_DESTINATION_ADDRESS;
- LocTransferList[0].Value = (uint32)(DataPtr);
- LocTransferList[1].Param = DMA_IP_CH_SET_SOURCE_SIGNED_LAST_ADDR_ADJ;
- LocTransferList[1].Value = ADC_IPW_GET_COMPLEMENT_OF_2((uint32)NumChannel << 2UL);
- LocTransferList[2].Param = DMA_IP_CH_SET_MAJORLOOP_COUNT;
- LocTransferList[2].Value = (uint32)NumChannel;
-
- (void)Dma_Ip_SetLogicChannelTransferList(DmaLogicChId, LocTransferList, 3U);
- (void)Dma_Ip_SetLogicChannelCommand(DmaLogicChId, DMA_IP_CH_SET_HARDWARE_REQUEST);
- }
- static inline void Adc_Ipw_ContinueDmaConversion
- (
- Adc_HwUnitType Unit,
- Adc_GroupType Group,
- const Adc_ChannelIndexType ChannelCount,
- const uint32 AdcDmaLogicChId,
- uint32 u32CoreId
- )
- {
- const Adc_GroupType GroupIndex = Adc_pCfgPtr[u32CoreId]->pGroupIdToIndexMap[Group];
- const Adc_ChannelIndexType NumChannel = ChannelCount - Adc_aGroupStatus[Group].CurrentChannel;
-
- const uint8 LeftChannel = (uint8)ADC_IPW_CALCULATE_CHAN_NUMBER(NumChannel);
- const Adc_GroupConfigurationType * GroupPtr;
- uint16 ResultIndex;
- GroupPtr = &(Adc_pCfgPtr[u32CoreId]->pGroups[GroupIndex]);
- if ((uint8)STD_OFF == GroupPtr->u8AdcExtDMAChanEnable)
- {
- #if (ADC_ENABLE_GROUP_STREAMING_RESULTS_REORDER == STD_ON)
- if (TRUE == GroupPtr->bStreamResultGroupMultiSets)
- {
- ResultIndex = (Adc_aGroupStatus[Group].ResultIndex * ChannelCount) + Adc_aGroupStatus[Group].CurrentChannel;
- }
- else
- #endif
- {
- ResultIndex = ((Adc_aGroupStatus[Group].CurrentChannel) * (GroupPtr->NumSamples)) + Adc_aGroupStatus[Group].ResultIndex;
- }
-
- Adc_Ipw_UpdateDmaConfig((&(GroupPtr->pResultsBufferPtr[Group][ResultIndex])), AdcDmaLogicChId, LeftChannel);
- }
-
- Adc_Ipw_ConfigureDmaConversion(Unit, Group, PDB_ADC_IP_SOFTWARE_TRIGGER, LeftChannel);
- }
- #endif
- #if (ADC_ENABLE_LIMIT_CHECK == STD_ON)
- static inline Std_ReturnType Adc_Ipw_CheckGroupConvResultDma
- (
- const Adc_GroupConfigurationType * pGroupPtr,
- uint32 u32CoreId
- )
- {
- Std_ReturnType ReturnValue = (Std_ReturnType)E_OK;
- const Adc_GroupType Group = pGroupPtr->GroupId;
- const Adc_HwUnitType Unit = pGroupPtr->AdcLogicalUnitId;
- Adc_ValueGroupType * pResultData = &(pGroupPtr->pResultsBufferPtr[Group][Adc_aGroupStatus[Group].ResultIndex]);
- Adc_ChannelType HwChannel;
- #if (ADC_SETCHANNEL_API == STD_ON)
- HwChannel = Adc_aRuntimeGroupChannel[Group].pChannel[0];
- #else
- HwChannel = pGroupPtr->pAssignment[0];
- #endif
- if (
- (TRUE == pGroupPtr->bAdcGroupLimitcheck)
- #if (ADC_SETCHANNEL_API == STD_ON)
- || (TRUE == Adc_aRuntimeGroupChannel[Group].bAdcRuntimeGroupLimitcheck)
- #endif
- )
- {
-
- if (FALSE == Adc_Ipw_CheckConversionValuesInRange(pResultData[0], Unit, HwChannel, u32CoreId))
- {
-
-
- Adc_aGroupStatus[Group].eAlreadyConverted = ADC_ALREADY_CONVERTED;
- Adc_aGroupStatus[Group].bLimitCheckFailed = TRUE;
- pResultData[0] = 0U;
- ReturnValue = (Std_ReturnType) E_NOT_OK;
- }
- else
- {
- Adc_aGroupStatus[Group].bLimitCheckFailed = FALSE;
- }
- }
- return ReturnValue;
- }
- #endif
- #endif
- static inline void Adc_Ipw_ReadData
- (
- const Adc_GroupConfigurationType * GroupPtr,
- Adc_ValueGroupType * pResult,
- const Adc_StreamNumSampleType GroupSamples,
- const Adc_ChannelIndexType Index,
- const uint16 ConvResult
- )
- {
- #if (ADC_ENABLE_GROUP_STREAMING_RESULTS_REORDER == STD_ON)
- if (FALSE == GroupPtr->bStreamResultGroupMultiSets)
- {
- #endif
- pResult[(Index * GroupSamples)] = ConvResult;
- (void)GroupPtr;
- #if (ADC_ENABLE_GROUP_STREAMING_RESULTS_REORDER == STD_ON)
- }
- else
- {
- pResult[Index] = ConvResult;
- }
- #endif
- }
- static inline void Adc_Ipw_EndConversionNotification
- (
- const Adc_HwUnitType PhysicalAdcUnit
- )
- {
-
- const volatile uint32 u32CoreId = Adc_GetCoreID();
- const Adc_HwUnitType LogicalHwUnitId = Adc_pCfgPtr[u32CoreId]->pAdcIpwConfig->Mapping.aHwLogicalId[PhysicalAdcUnit];
- const Adc_GroupType SwGroupId = Adc_aUnitStatus[LogicalHwUnitId].SwNormalQueue[0U];
- #if (ADC_HW_TRIGGER_API == STD_ON)
- const Adc_GroupType HwGroupId = Adc_aUnitStatus[LogicalHwUnitId].OngoingHwGroup;
- #endif
- #if (ADC_HW_TRIGGER_API == STD_ON)
-
- if (ADC_INVALID_HW_GROUP_ID != HwGroupId)
- {
- #ifdef ADC_DMA_SUPPORTED
- if (ADC_DMA == Adc_pCfgPtr[u32CoreId]->pAdcIpwConfig->Mapping.u8Adc_DmaInterruptSoftware[LogicalHwUnitId])
- {
- Adc_Ipw_EndDmaConversion(LogicalHwUnitId, HwGroupId, FALSE, u32CoreId);
- }
- else
- #endif
- {
- Adc_Ipw_EndConversion(LogicalHwUnitId, HwGroupId, FALSE, u32CoreId);
- }
- }
- else
- #endif
- if (Adc_aUnitStatus[LogicalHwUnitId].SwNormalQueueIndex > (Adc_QueueIndexType)0U)
- {
- #ifdef ADC_DMA_SUPPORTED
- if (ADC_DMA == Adc_pCfgPtr[u32CoreId]->pAdcIpwConfig->Mapping.u8Adc_DmaInterruptSoftware[LogicalHwUnitId])
- {
- Adc_Ipw_EndDmaConversion(LogicalHwUnitId, SwGroupId, TRUE, u32CoreId);
- }
- else
- #endif
- {
- Adc_Ipw_EndConversion(LogicalHwUnitId, SwGroupId, TRUE, u32CoreId);
- }
- }
- #if (ADC_HW_TRIGGER_API == STD_ON)
- else
- {
- ;
- }
- #endif
- }
- #ifdef ADC_UNIT_0_ISR_USED
- void Adc_Ipw_Adc0EndConversionNotification(const uint8 ControlChanIdx);
- #endif
- #ifdef ADC_UNIT_1_ISR_USED
- void Adc_Ipw_Adc1EndConversionNotification(const uint8 ControlChanIdx);
- #endif
- #ifdef ADC_DMA_SUPPORTED
- void Adc_Ipw_Adc0DmaTransferCompleteNotification(void);
- void Adc_Ipw_Adc1DmaTransferCompleteNotification(void);
- #endif
- #ifdef ADC_UNIT_0_ISR_USED
- void Adc_Ipw_Adc0EndConversionNotification(const uint8 ControlChanIdx)
- {
- const Adc_HwUnitType PhysicalAdcUnit = 0U;
- (void)ControlChanIdx;
- Adc_Ipw_EndConversionNotification(PhysicalAdcUnit);
- }
- #endif
- #ifdef ADC_DMA_SUPPORTED
- void Adc_Ipw_Adc0DmaTransferCompleteNotification(void)
- {
- const Adc_HwUnitType PhysicalAdcUnit = 0U;
- Adc_Ipw_EndConversionNotification(PhysicalAdcUnit);
- }
- #endif
- #ifdef ADC_UNIT_1_ISR_USED
- void Adc_Ipw_Adc1EndConversionNotification(const uint8 ControlChanIdx)
- {
- const Adc_HwUnitType PhysicalAdcUnit = 1U;
- (void)ControlChanIdx;
- Adc_Ipw_EndConversionNotification(PhysicalAdcUnit);
- }
- #endif
- #ifdef ADC_DMA_SUPPORTED
- void Adc_Ipw_Adc1DmaTransferCompleteNotification(void)
- {
- const Adc_HwUnitType PhysicalAdcUnit = 1U;
- Adc_Ipw_EndConversionNotification(PhysicalAdcUnit);
- }
- #endif
- #endif
- #define ADC_STOP_SEC_CODE
- #include "Adc_MemMap.h"
- #ifdef __cplusplus
- }
- #endif
|