123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832 |
- /*==================================================================================================
- * Project : RTD AUTOSAR 4.4
- * Platform : CORTEXM
- * Peripheral : ADC
- * Dependencies : none
- *
- * Autosar Version : 4.4.0
- * Autosar Revision : ASR_REL_4_4_REV_0000
- * Autosar Conf.Variant :
- * SW Version : 1.0.0
- * Build Version : S32K1_RTD_1_0_0_HF01_D2109_ASR_REL_4_4_REV_0000_20210907
- *
- * (c) Copyright 2020-2021 NXP Semiconductors
- * All Rights Reserved.
- *
- * NXP Confidential. This software is owned or controlled by NXP and may only be
- * used strictly in accordance with the applicable license terms. By expressly
- * accepting such terms or by downloading, installing, activating and/or otherwise
- * using the software, you are agreeing that you have read, and that you agree to
- * comply with and are bound by, such license terms. If you do not agree to be
- * bound by the applicable license terms, then you may not retain, install,
- * activate or otherwise use the software.
- ==================================================================================================*/
- /**
- * @file
- *
- * @addtogroup pdb_adc_ip Pdb Adc IPL
- * @{
- */
- #include "Pdb_Adc_Ip.h"
- #include "Pdb_Adc_Ip_HwAccess.h"
- #include "SchM_Adc.h"
- #include "OsIf.h"
- #if (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON)
- #include "Devassert.h"
- #endif /* (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON) */
- #if (STD_ON == PDB_ADC_IP_ENABLE_USER_MODE_SUPPORT)
- /* USER_MODE_REG_PROT_ENABLED is defined for Base sanity check in RegLockMacros.h */
- #define USER_MODE_REG_PROT_ENABLED (PDB_ADC_IP_ENABLE_USER_MODE_SUPPORT)
- #include "RegLockMacros.h"
- #endif /* (STD_ON == PDB_ADC_IP_ENABLE_USER_MODE_SUPPORT) */
- /*******************************************************************************
- * Source file version information
- ******************************************************************************/
- #define PDB_ADC_IP_VENDOR_ID_C 43
- #define PDB_ADC_IP_AR_RELEASE_MAJOR_VERSION_C 4
- #define PDB_ADC_IP_AR_RELEASE_MINOR_VERSION_C 4
- #define PDB_ADC_IP_AR_RELEASE_REVISION_VERSION_C 0
- #define PDB_ADC_IP_SW_MAJOR_VERSION_C 1
- #define PDB_ADC_IP_SW_MINOR_VERSION_C 0
- #define PDB_ADC_IP_SW_PATCH_VERSION_C 0
- /*******************************************************************************
- * File version checks
- ******************************************************************************/
- /* Check if Pdb_Adc_Ip.c file and Pdb_Adc_Ip.h file are of the same vendor */
- #if (PDB_ADC_IP_VENDOR_ID_C != PDB_ADC_IP_VENDOR_ID_H)
- #error "Pdb_Adc_Ip.c and Pdb_Adc_Ip.h have different vendor ids"
- #endif
- /* Check if Pdb_Adc_Ip.c file and Pdb_Adc_Ip.h file are of the same Autosar version */
- #if ((PDB_ADC_IP_AR_RELEASE_MAJOR_VERSION_C != PDB_ADC_IP_AR_RELEASE_MAJOR_VERSION_H) || \
- (PDB_ADC_IP_AR_RELEASE_MINOR_VERSION_C != PDB_ADC_IP_AR_RELEASE_MINOR_VERSION_H) || \
- (PDB_ADC_IP_AR_RELEASE_REVISION_VERSION_C != PDB_ADC_IP_AR_RELEASE_REVISION_VERSION_H) \
- )
- #error "AutoSar Version Numbers of Pdb_Adc_Ip.c and Pdb_Adc_Ip.h are different"
- #endif
- /* Check if Pdb_Adc_Ip.c file and Pdb_Adc_Ip.h file are of the same Software version */
- #if ((PDB_ADC_IP_SW_MAJOR_VERSION_C != PDB_ADC_IP_SW_MAJOR_VERSION_H) || \
- (PDB_ADC_IP_SW_MINOR_VERSION_C != PDB_ADC_IP_SW_MINOR_VERSION_H) || \
- (PDB_ADC_IP_SW_PATCH_VERSION_C != PDB_ADC_IP_SW_PATCH_VERSION_H) \
- )
- #error "Software Version Numbers of Pdb_Adc_Ip.c and Pdb_Adc_Ip.h are different"
- #endif
- #if (PDB_ADC_IP_VENDOR_ID_C != PDB_ADC_IP_VENDOR_ID_HWACCESS_H)
- #error "Pdb_Adc_Ip.c and Pdb_Adc_Ip_HwAccess.h have different vendor ids"
- #endif
- /* Check if Pdb_Adc_Ip.c file and Pdb_Adc_Ip_HwAccess.h file are of the same Autosar version */
- #if ((PDB_ADC_IP_AR_RELEASE_MAJOR_VERSION_C != PDB_ADC_IP_AR_RELEASE_MAJOR_VERSION_HWACCESS_H) || \
- (PDB_ADC_IP_AR_RELEASE_MINOR_VERSION_C != PDB_ADC_IP_AR_RELEASE_MINOR_VERSION_HWACCESS_H) || \
- (PDB_ADC_IP_AR_RELEASE_REVISION_VERSION_C != PDB_ADC_IP_AR_RELEASE_REVISION_VERSION_HWACCESS_H) \
- )
- #error "AutoSar Version Numbers of Pdb_Adc_Ip.c and Pdb_Adc_Ip_HwAccess.h are different"
- #endif
- /* Check if Pdb_Adc_Ip.c file and Pdb_Adc_Ip_HwAccess.h file are of the same Software version */
- #if ((PDB_ADC_IP_SW_MAJOR_VERSION_C != PDB_ADC_IP_SW_MAJOR_VERSION_HWACCESS_H) || \
- (PDB_ADC_IP_SW_MINOR_VERSION_C != PDB_ADC_IP_SW_MINOR_VERSION_HWACCESS_H) || \
- (PDB_ADC_IP_SW_PATCH_VERSION_C != PDB_ADC_IP_SW_PATCH_VERSION_HWACCESS_H) \
- )
- #error "Software Version Numbers of Pdb_Adc_Ip.c and Pdb_Adc_Ip_HwAccess.h are different"
- #endif
- #ifndef DISABLE_MCAL_INTERMODULE_ASR_CHECK
- /* Check if Pdb_Adc_Ip.c file and OsIf.h file are of the same Autosar version */
- #if ((PDB_ADC_IP_AR_RELEASE_MAJOR_VERSION_C != OSIF_AR_RELEASE_MAJOR_VERSION) || \
- (PDB_ADC_IP_AR_RELEASE_MINOR_VERSION_C != OSIF_AR_RELEASE_MINOR_VERSION) \
- )
- #error "AutoSar Version Numbers of Pdb_Adc_Ip.c and OsIf.h are different"
- #endif
- #if (STD_ON == PDB_ADC_IP_ENABLE_USER_MODE_SUPPORT)
- /* Checks against RegLockMacros.h */
- #if ((PDB_ADC_IP_AR_RELEASE_MAJOR_VERSION_C != REGLOCKMACROS_AR_RELEASE_MAJOR_VERSION) || \
- (PDB_ADC_IP_AR_RELEASE_MINOR_VERSION_C != REGLOCKMACROS_AR_RELEASE_MINOR_VERSION))
- #error "AUTOSAR Version Numbers of Pdb_Adc_Ip.c and RegLockMacros.h are different"
- #endif
- #endif /* (STD_ON == PDB_ADC_IP_ENABLE_USER_MODE_SUPPORT) */
- /* Check if Pdb_Adc_Ip.c and SchM_Adc.h are of the same Autosar version */
- #if ((PDB_ADC_IP_AR_RELEASE_MAJOR_VERSION_C != SCHM_ADC_AR_RELEASE_MAJOR_VERSION) || \
- (PDB_ADC_IP_AR_RELEASE_MINOR_VERSION_C != SCHM_ADC_AR_RELEASE_MINOR_VERSION) \
- )
- #error "AutoSar Version Numbers of Pdb_Adc_Ip.c and SchM_Adc.h are different"
- #endif
- #if (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON)
- /* Check if Pdb_Adc_Ip.c and Devassert.h are of the same Autosar version */
- #if ((PDB_ADC_IP_AR_RELEASE_MAJOR_VERSION_C != DEVASSERT_AR_RELEASE_MAJOR_VERSION) || \
- (PDB_ADC_IP_AR_RELEASE_MINOR_VERSION_C != DEVASSERT_AR_RELEASE_MINOR_VERSION) \
- )
- #error "AutoSar Version Numbers of Pdb_Adc_Ip.c and Devassert.h are different"
- #endif
- #endif /* (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON) */
- #endif /* DISABLE_MCAL_INTERMODULE_ASR_CHECK */
- /*******************************************************************************
- * Pre-check
- ******************************************************************************/
- #ifndef MCAL_ENABLE_USER_MODE_SUPPORT
- #if (STD_ON == PDB_ADC_IP_ENABLE_USER_MODE_SUPPORT)
- #error MCAL_ENABLE_USER_MODE_SUPPORT is not enabled. For running PDB in user mode the MCAL_ENABLE_USER_MODE_SUPPORT needs to be defined
- #endif /* (STD_ON == PDB_ADC_IP_ENABLE_USER_MODE_SUPPORT) */
- #endif /* ifndef MCAL_ENABLE_USER_MODE_SUPPORT*/
- /*******************************************************************************
- * Local function prototypes
- ******************************************************************************/
- #define ADC_START_SEC_CODE
- #include "Adc_MemMap.h"
- static inline void PDB_ADC_ResetChannel(PDB_Type * const Base, const uint8 ChanIdx, const Pdb_Adc_Ip_PretriggersConfigType * PdbPretriggsConfig);
- #if (STD_ON == FEATURE_PDB_HAS_INSTANCE_BACKTOBACK)
- static void PDB_ADC_ConfigInstanceBackToBack_TrustedCall(const boolean InstanceBackToBackEnable);
- static void PDB_ADC_ConfigInstanceBackToBack(const boolean InstanceBackToBackEnable);
- #endif /* (STD_ON == FEATURE_PDB_HAS_INSTANCE_BACKTOBACK) */
- #if (STD_ON == FEATURE_PDB_HAS_INTERCHANNEL_BACKTOBACK)
- static void PDB_ADC_ConfigInterChannelBackToBack_TrustedCall(const uint32 Instance, const boolean InterChannelBackToBackEnable);
- static void PDB_ADC_ConfigInterChannelBackToBack(const uint32 Instance, const boolean InterChannelBackToBackEnable);
- #endif /* (STD_ON == FEATURE_PDB_HAS_INTERCHANNEL_BACKTOBACK) */
- #define ADC_STOP_SEC_CODE
- #include "Adc_MemMap.h"
- #define ADC_START_SEC_CONST_UNSPECIFIED
- #include "Adc_MemMap.h"
- /* Table of Base addresses for PDB instances. */
- static PDB_Type * const PdbBase[PDB_INSTANCE_COUNT] = IP_PDB_BASE_PTRS;
- #define ADC_STOP_SEC_CONST_UNSPECIFIED
- #include "Adc_MemMap.h"
- #define ADC_START_SEC_VAR_CLEARED_UNSPECIFIED
- #include "Adc_MemMap.h"
- /* Global state structure */
- static Pdb_Adc_Ip_StateStructType PdbAdcState[PDB_INSTANCE_COUNT];
- #define ADC_STOP_SEC_VAR_CLEARED_UNSPECIFIED
- #include "Adc_MemMap.h"
- #define ADC_START_SEC_CODE
- #include "Adc_MemMap.h"
- /*FUNCTION**********************************************************************
- *
- * Function Name : Pdb_Adc_Ip_Init
- * Description : This function initializes the PDB counter, input triggers and
- * general pretrigger settings.
- * It resets PDB registers and enables the PDB clock. Therefore, it should be
- * called before any other operation. After it is initialized, the PDB can
- * act as a triggered timer, which enables other features in PDB module.
- *
- * @implements Pdb_Adc_Ip_Init_Activity
- * END**************************************************************************/
- void Pdb_Adc_Ip_Init(const uint32 Instance, const Pdb_Adc_Ip_ConfigType * const Config)
- {
- #if (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON)
- DevAssert(Instance < PDB_INSTANCE_COUNT);
- DevAssert(Config != NULL_PTR);
- #endif /* (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON) */
- PDB_Type * const Base = PdbBase[Instance];
- uint8 ChannelIndex, PretriggerIndex;
- uint32 Reg = 0u;
- Reg |= PDB_SC_LDMOD(Config->LoadValueMode);
- Reg |= PDB_SC_PRESCALER(Config->PrescalerDiv);
- Reg |= PDB_SC_MULT(Config->ClkPreMultFactor);
- Reg |= PDB_SC_TRGSEL(Config->TriggerSource);
- if (Config->ContinuousModeEnable == TRUE)
- {
- Reg |= PDB_SC_CONT_MASK;
- }
- if (Config->DmaEnable == TRUE)
- {
- Reg |= PDB_SC_DMAEN_MASK;
- }
- if (Config->SeqErrNotification != NULL_PTR)
- {
- Reg |= PDB_SC_PDBEIE_MASK;
- }
- Base->SC = Reg;
- #if (STD_ON == FEATURE_PDB_HAS_INSTANCE_BACKTOBACK)
- PDB_ADC_ConfigInstanceBackToBack(Config->InstanceBackToBackEnable);
- #endif /* (STD_ON == FEATURE_PDB_HAS_INSTANCE_BACKTOBACK) */
- #if (STD_ON == FEATURE_PDB_HAS_INTERCHANNEL_BACKTOBACK)
- PDB_ADC_ConfigInterChannelBackToBack(Instance, Config->InterChannelBackToBackEnable);
- #endif /* (STD_ON == FEATURE_PDB_HAS_INTERCHANNEL_BACKTOBACK) */
- Pdb_Adc_Ip_SetModulus(Instance, Config->ModValue);
- if ((Config->NumChans > 0u) && (Config->ChanConfigs != NULL_PTR))
- {
- for (ChannelIndex = 0u; ChannelIndex < Config->NumChans; ChannelIndex++)
- {
- const Pdb_Adc_Ip_ChanConfigType * ChanConfig = &(Config->ChanConfigs[ChannelIndex]);
- Pdb_Adc_HwAcc_ConfigAdcPretriggers(Base, ChanConfig->ChnIdx, &(ChanConfig->PretriggersConfig));
- for (PretriggerIndex = 0u; PretriggerIndex < PDB_DLY_COUNT; PretriggerIndex++)
- {
- Pdb_Adc_Ip_SetAdcPretriggerDelayValue(Instance, ChanConfig->ChnIdx, PretriggerIndex, ChanConfig->PretriggerDelays[PretriggerIndex]);
- }
- }
- }
- Pdb_Adc_Ip_Enable(Instance);
- /* Modulus and pretrigger delay values require call to LoadRegValues */
- Pdb_Adc_Ip_LoadRegValues(Instance);
- PdbAdcState[Instance].SeqErrNotification = Config->SeqErrNotification;
- PdbAdcState[Instance].Init = TRUE;
- }
- /*FUNCTION**********************************************************************
- *
- * Function Name : Pdb_Adc_Ip_DeInit
- * Description : This function resets the PDB internal registers to default values.
- *
- * When the PDB module is not used. Calling this function would shut down the
- * PDB module and reduce the power consumption.
- *
- * Note: instance back to back configuration is common between PDB instances 0 and 1
- * (configures the same register even if configured for either PDB instance)
- * This function disables it, so affects all other instances.
- *
- * @implements Pdb_Adc_Ip_Deinit_Activity
- * END**************************************************************************/
- void Pdb_Adc_Ip_DeInit(const uint32 Instance)
- {
- #if (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON)
- DevAssert(Instance < PDB_INSTANCE_COUNT);
- #endif /* (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON) */
- Pdb_Adc_Ip_ConfigType DefaultConfig;
- Pdb_Adc_Ip_ChanConfigType ChanConfigs[PDB_CH_COUNT];
- uint8 ChannelIndex, PretriggerIndex;
- DefaultConfig.LoadValueMode = PDB_ADC_IP_LOAD_VAL_IMMEDIATELY;
- DefaultConfig.PrescalerDiv = PDB_ADC_IP_CLK_PREDIV_BY_1;
- DefaultConfig.ClkPreMultFactor = PDB_ADC_IP_CLK_PREMULT_FACT_AS_1;
- DefaultConfig.TriggerSource = PDB_ADC_IP_TRIGGER_IN0;
- DefaultConfig.ContinuousModeEnable = FALSE;
- DefaultConfig.DmaEnable = FALSE;
- DefaultConfig.ModValue = 0u;
- #if (STD_ON == FEATURE_PDB_HAS_INSTANCE_BACKTOBACK)
- DefaultConfig.InstanceBackToBackEnable = FALSE;
- PDB_ADC_ConfigInstanceBackToBack(DefaultConfig.InstanceBackToBackEnable);
- #endif /* (STD_ON == FEATURE_PDB_HAS_INSTANCE_BACKTOBACK) */
- #if (STD_ON == FEATURE_PDB_HAS_INTERCHANNEL_BACKTOBACK)
- DefaultConfig.InterChannelBackToBackEnable = FALSE;
- PDB_ADC_ConfigInterChannelBackToBack(Instance, DefaultConfig.InterChannelBackToBackEnable);
- #endif /* (STD_ON == FEATURE_PDB_HAS_INTERCHANNEL_BACKTOBACK) */
- DefaultConfig.NumChans = PDB_CH_COUNT;
- for (ChannelIndex = 0u; ChannelIndex < PDB_CH_COUNT; ChannelIndex++)
- {
- ChanConfigs[ChannelIndex].ChnIdx = ChannelIndex;
- ChanConfigs[ChannelIndex].PretriggersConfig.EnableMask = 0u;
- ChanConfigs[ChannelIndex].PretriggersConfig.EnableDelayMask = 0u;
- ChanConfigs[ChannelIndex].PretriggersConfig.BackToBackEnableMask = 0u;
- for (PretriggerIndex = 0u; PretriggerIndex < PDB_DLY_COUNT; PretriggerIndex++)
- {
- ChanConfigs[ChannelIndex].PretriggerDelays[PretriggerIndex] = 0u;
- }
- }
- DefaultConfig.ChanConfigs = ChanConfigs;
- DefaultConfig.SeqErrNotification = NULL_PTR;
- Pdb_Adc_Ip_Init(Instance, &DefaultConfig);
- Pdb_Adc_Ip_Disable(Instance);
- PdbAdcState[Instance].Init = FALSE;
- }
- /*FUNCTION**********************************************************************
- *
- * Function Name : Pdb_Adc_Ip_Enable
- * Description : This function enables the PDB module, counter is on.
- *
- * @implements Pdb_Adc_Ip_Enable_Activity
- * END**************************************************************************/
- void Pdb_Adc_Ip_Enable(const uint32 Instance)
- {
- #if (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON)
- DevAssert(Instance < PDB_INSTANCE_COUNT);
- #endif /* (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON) */
- PDB_Type * const Base = PdbBase[Instance];
- SchM_Enter_Adc_ADC_EXCLUSIVE_AREA_34();
- Base->SC |= PDB_SC_PDBEN_MASK;
- SchM_Exit_Adc_ADC_EXCLUSIVE_AREA_34();
- }
- /*FUNCTION**********************************************************************
- *
- * Function Name : Pdb_Adc_Ip_Disable
- * Description : This function disables the PDB module, counter is off.
- *
- * @implements Pdb_Adc_Ip_Disable_Activity
- * END**************************************************************************/
- void Pdb_Adc_Ip_Disable(const uint32 Instance)
- {
- #if (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON)
- DevAssert(Instance < PDB_INSTANCE_COUNT);
- #endif /* (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON) */
- PDB_Type * const Base = PdbBase[Instance];
- SchM_Enter_Adc_ADC_EXCLUSIVE_AREA_35();
- Pdb_Adc_HwAcc_DisablePdb(Base);
- SchM_Exit_Adc_ADC_EXCLUSIVE_AREA_35();
- }
- /*FUNCTION**********************************************************************
- *
- * Function Name : Pdb_Adc_Ip_SetTriggerInput
- * Description : This function sets the PDB trigger source.
- *
- * @implements Pdb_Adc_Ip_SetTriggerInput_Activity
- * END**************************************************************************/
- void Pdb_Adc_Ip_SetTriggerInput(const uint32 Instance, const Pdb_Adc_Ip_TriggerSrcType TriggerSource)
- {
- #if (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON)
- DevAssert(Instance < PDB_INSTANCE_COUNT);
- #endif /* (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON) */
- PDB_Type * const Base = PdbBase[Instance];
- uint32 SCReg;
- SchM_Enter_Adc_ADC_EXCLUSIVE_AREA_36();
- SCReg = Base->SC;
- SCReg &= ~(PDB_SC_TRGSEL_MASK);
- SCReg |= PDB_SC_TRGSEL(TriggerSource);
- Base->SC = SCReg;
- SchM_Exit_Adc_ADC_EXCLUSIVE_AREA_36();
- }
- /*FUNCTION**********************************************************************
- *
- * Function Name : Pdb_Adc_Ip_SetContinuousMode
- * Description : This function sets the PDB mode to continuous or one shot.
- *
- * @implements Pdb_Adc_Ip_SetContinuousMode_Activity
- * END**************************************************************************/
- void Pdb_Adc_Ip_SetContinuousMode(const uint32 Instance, const boolean State)
- {
- #if (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON)
- DevAssert(Instance < PDB_INSTANCE_COUNT);
- #endif /* (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON) */
- PDB_Type * const Base = PdbBase[Instance];
- SchM_Enter_Adc_ADC_EXCLUSIVE_AREA_37();
- Pdb_Adc_HwAcc_SetContinuousMode(Base, State);
- SchM_Exit_Adc_ADC_EXCLUSIVE_AREA_37();
- }
- /*FUNCTION**********************************************************************
- *
- * Function Name : Pdb_Adc_Ip_SwTrigger
- * Description : This function triggers the PDB with a software trigger.
- * When the PDB is set to use the software trigger as input, calling this function
- * triggers the PDB.
- *
- * @implements Pdb_Adc_Ip_SwTrigger_Activity
- * END**************************************************************************/
- void Pdb_Adc_Ip_SwTrigger(const uint32 Instance)
- {
- #if (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON)
- DevAssert(Instance < PDB_INSTANCE_COUNT);
- #endif /* (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON) */
- PDB_Type * const Base = PdbBase[Instance];
- SchM_Enter_Adc_ADC_EXCLUSIVE_AREA_38();
- Base->SC |= PDB_SC_SWTRIG_MASK;
- SchM_Exit_Adc_ADC_EXCLUSIVE_AREA_38();
- }
- /*FUNCTION**********************************************************************
- *
- * Function Name : Pdb_Adc_Ip_GetTimerValue
- * Description : This function gets the current counter value.
- *
- * @implements Pdb_Adc_Ip_GetTimerValue_Activity
- * END**************************************************************************/
- uint32 Pdb_Adc_Ip_GetTimerValue(const uint32 Instance)
- {
- #if (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON)
- DevAssert(Instance < PDB_INSTANCE_COUNT);
- #endif /* (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON) */
- const PDB_Type * const Base = PdbBase[Instance];
- return ((Base->CNT & PDB_CNT_CNT_MASK) >> PDB_CNT_CNT_SHIFT);
- }
- /*FUNCTION**********************************************************************
- *
- * Function Name : Pdb_Adc_Ip_LoadRegValues
- * Description : This function sets the LDOK bit.
- * Writing one to this bit updates the internal registers MOD, IDLY, CHnDLYm and
- * POyDLY with the values written to their buffers. The MOD, IDLY,
- * CHnDLYm and POyDLY take effect according to the load mode settings.
- *
- * After one is written to the LDOK bit, the values in the buffers of above mentioned
- * registers are not effective and cannot be written until the values in the
- * buffers are loaded into their internal registers. The moment when this happens
- * depends on the value of the LDMOD register. Only when this register is in it's
- * default state(0), the load operation will happen immediately. Please check the
- * reference manual for more information.
- * The LDOK can be written only when the the PDB is enabled or as alone with it. It is
- * automatically cleared either when the values in the buffers are loaded into the
- * internal registers or when the PDB is disabled.
- *
- * @implements Pdb_Adc_Ip_LoadRegValues_Activity
- * END**************************************************************************/
- void Pdb_Adc_Ip_LoadRegValues(const uint32 Instance)
- {
- #if (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON)
- DevAssert(Instance < PDB_INSTANCE_COUNT);
- #endif /* (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON) */
- PDB_Type * const Base = PdbBase[Instance];
- #if (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON)
- /* PDB must be enabled in order to load register values */
- DevAssert((Base->SC & PDB_SC_PDBEN_MASK) != 0u);
- #endif /* (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON) */
- SchM_Enter_Adc_ADC_EXCLUSIVE_AREA_39();
- Base->SC |= PDB_SC_LDOK_MASK;
- SchM_Exit_Adc_ADC_EXCLUSIVE_AREA_39();
- }
- /*FUNCTION**********************************************************************
- *
- * Function Name : Pdb_Adc_Ip_SetModulus
- * Description : This function sets the PDB Modulus value.
- * When the counter reaches the setting value, it is automatically reset to zero.
- * When in continuous mode, the counter begins to increase again.
- * Note: This function writes in an internal buffer. Depending on the
- * value of the LDMOD register, it might be necessary to call
- * Pdb_Adc_Ip_LoadRegValues in order to update the value of the register.
- * The value of the register can be changed only when the PDB module is enabled.
- *
- * @implements Pdb_Adc_Ip_SetModulus_Activity
- * END**************************************************************************/
- void Pdb_Adc_Ip_SetModulus(const uint32 Instance, const uint16 ModVal)
- {
- #if (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON)
- DevAssert(Instance < PDB_INSTANCE_COUNT);
- #endif /* (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON) */
- PDB_Type * const Base = PdbBase[Instance];
- uint32 ModReg;
- SchM_Enter_Adc_ADC_EXCLUSIVE_AREA_48();
- ModReg = Base->MOD;
- ModReg &= ~(PDB_MOD_MOD_MASK);
- ModReg |= PDB_MOD_MOD(ModVal);
- Base->MOD = ModReg;
- SchM_Exit_Adc_ADC_EXCLUSIVE_AREA_48();
- }
- /*FUNCTION**********************************************************************
- *
- * Function Name : Pdb_Adc_Ip_ConfigAdcPretriggers
- * Description : This function configures the back to back modes, delay enable
- * and output enable settings for all pretriggers on the selected channel.
- *
- * @implements Pdb_Adc_Ip_ConfigAdcPretriggers_Activity
- * END**************************************************************************/
- void Pdb_Adc_Ip_ConfigAdcPretriggers(const uint32 Instance, const uint8 ChanIdx, const Pdb_Adc_Ip_PretriggersConfigType * const Config)
- {
- #if (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON)
- DevAssert(Instance < PDB_INSTANCE_COUNT);
- DevAssert(ChanIdx < PDB_CH_COUNT);
- DevAssert(Config != NULL_PTR);
- #endif /* (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON) */
- PDB_Type * const Base = PdbBase[Instance];
- SchM_Enter_Adc_ADC_EXCLUSIVE_AREA_41();
- Pdb_Adc_HwAcc_ConfigAdcPretriggers(Base, ChanIdx, Config);
- SchM_Exit_Adc_ADC_EXCLUSIVE_AREA_41();
- }
- /*FUNCTION**********************************************************************
- *
- * Function Name : Pdb_Adc_Ip_GetAdcPretriggerFlags
- * Description : This function gets all ADC pretrigger flags from the selected channel.
- *
- * @implements Pdb_Adc_Ip_GetAdcPretriggerFlags_Activity
- * END**************************************************************************/
- uint32 Pdb_Adc_Ip_GetAdcPretriggerFlags(const uint32 Instance, const uint8 ChanIdx)
- {
- #if (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON)
- DevAssert(Instance < PDB_INSTANCE_COUNT);
- DevAssert(ChanIdx < PDB_CH_COUNT);
- #endif /* (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON) */
- const PDB_Type * const Base = PdbBase[Instance];
- uint32 Result;
- Result = Base->CH[ChanIdx].S;
- Result = (Result & PDB_S_CF_MASK) >> PDB_S_CF_SHIFT;
- return Result;
- }
- /*FUNCTION**********************************************************************
- *
- * Function Name : Pdb_Adc_Ip_ClearAdcPretriggerFlags
- * Description : This function clears the ADC pretrigger channel flags selected
- * by pretriggMask from channel channel.
- *
- * @implements Pdb_Adc_Ip_ClearAdcPretriggerFlags_Activity
- * END**************************************************************************/
- void Pdb_Adc_Ip_ClearAdcPretriggerFlags(const uint32 Instance, const uint8 ChanIdx, const uint16 PretriggMask)
- {
- #if (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON)
- DevAssert(Instance < PDB_INSTANCE_COUNT);
- DevAssert(ChanIdx < PDB_CH_COUNT);
- #endif /* (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON) */
- PDB_Type * const Base = PdbBase[Instance];
- SchM_Enter_Adc_ADC_EXCLUSIVE_AREA_46();
- /* Write 0 to clear */
- Pdb_Adc_HwAcc_ClearAdcPretriggerFlags(Base, ChanIdx, PretriggMask);
- SchM_Exit_Adc_ADC_EXCLUSIVE_AREA_46();
- }
- /*FUNCTION**********************************************************************
- *
- * Function Name : Pdb_Adc_Ip_SetAdcPretriggerBackToBack
- * Description : This function sets back to back mode for the selected
- * pretrigger on the given channel.
- *
- * @implements Pdb_Adc_Ip_SetAdcPretriggerBackToBack_Activity
- * END**************************************************************************/
- void Pdb_Adc_Ip_SetAdcPretriggerBackToBack(const uint32 Instance, const uint8 ChanIdx, const uint8 PretriggIdx, const boolean Value)
- {
- #if (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON)
- DevAssert(Instance < PDB_INSTANCE_COUNT);
- DevAssert(ChanIdx < PDB_CH_COUNT);
- DevAssert(PretriggIdx < PDB_DLY_COUNT);
- #endif /* (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON) */
- PDB_Type * const Base = PdbBase[Instance];
- uint32 Mask = (uint32)1u << PretriggIdx;
- Mask = PDB_C1_BB(Mask);
- SchM_Enter_Adc_ADC_EXCLUSIVE_AREA_42();
- Pdb_Adc_HwAcc_SetAdcPretriggerMask(Base, ChanIdx, Mask, Value);
- SchM_Exit_Adc_ADC_EXCLUSIVE_AREA_42();
- }
- /*FUNCTION**********************************************************************
- *
- * Function Name : Pdb_Adc_Ip_SetAdcPretriggerEnable
- * Description : This function enables or disables the selected pretrigger on
- * the given channel.
- *
- * @implements Pdb_Adc_Ip_SetAdcPretriggerEnable_Activity
- * END**************************************************************************/
- void Pdb_Adc_Ip_SetAdcPretriggerEnable(const uint32 Instance, const uint8 ChanIdx, const uint8 PretriggIdx, const boolean Value)
- {
- #if (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON)
- DevAssert(Instance < PDB_INSTANCE_COUNT);
- DevAssert(ChanIdx < PDB_CH_COUNT);
- DevAssert(PretriggIdx < PDB_DLY_COUNT);
- #endif /* (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON) */
- PDB_Type * const Base = PdbBase[Instance];
- uint32 Mask = (uint32)1u << PretriggIdx;
- Mask = PDB_C1_EN(Mask);
- SchM_Enter_Adc_ADC_EXCLUSIVE_AREA_43();
- Pdb_Adc_HwAcc_SetAdcPretriggerMask(Base, ChanIdx, Mask, Value);
- SchM_Exit_Adc_ADC_EXCLUSIVE_AREA_43();
- }
- /*FUNCTION**********************************************************************
- *
- * Function Name : Pdb_Adc_Ip_SetAdcPretriggerDelayEnable
- * Description : This function sets the delay enable value for the selected
- * pretrigger on the given channel.
- *
- * @implements Pdb_Adc_Ip_SetAdcPretriggerDelayEnable_Activity
- * END**************************************************************************/
- void Pdb_Adc_Ip_SetAdcPretriggerDelayEnable(const uint32 Instance, const uint8 ChanIdx, const uint8 PretriggIdx, const boolean Value)
- {
- #if (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON)
- DevAssert(Instance < PDB_INSTANCE_COUNT);
- DevAssert(ChanIdx < PDB_CH_COUNT);
- DevAssert(PretriggIdx < PDB_DLY_COUNT);
- #endif /* (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON) */
- PDB_Type * const Base = PdbBase[Instance];
- uint32 Mask = (uint32)1u << PretriggIdx;
- Mask = PDB_C1_TOS(Mask);
- SchM_Enter_Adc_ADC_EXCLUSIVE_AREA_44();
- Pdb_Adc_HwAcc_SetAdcPretriggerMask(Base, ChanIdx, Mask, Value);
- SchM_Exit_Adc_ADC_EXCLUSIVE_AREA_44();
- }
- /*FUNCTION**********************************************************************
- *
- * Function Name : Pdb_Adc_Ip_SetAdcPretriggerDelayValue
- * Description : This function sets the pretrigger delay value.
- * Note: This function writes in an internal buffer. Depending on the
- * value of the LDMOD register, it might be necessary to call
- * Pdb_Adc_Ip_LoadRegValues in order to update the value of the register.
- * The value of the register can be changed only when the PDB module is enabled.
- *
- * @implements Pdb_Adc_Ip_SetAdcPretriggerDelayValue_Activity
- * END**************************************************************************/
- void Pdb_Adc_Ip_SetAdcPretriggerDelayValue(const uint32 Instance, const uint8 ChanIdx, const uint8 PretriggIdx, const uint16 DelayValue)
- {
- #if (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON)
- DevAssert(Instance < PDB_INSTANCE_COUNT);
- DevAssert(ChanIdx < PDB_CH_COUNT);
- DevAssert(PretriggIdx < PDB_DLY_COUNT);
- #endif /* (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON) */
- PDB_Type * const Base = PdbBase[Instance];
- Base->CH[ChanIdx].DLY[PretriggIdx] = PDB_DLY_DLY(DelayValue);
- }
- /*FUNCTION**********************************************************************
- *
- * Function Name : Pdb_Adc_Ip_DisableAndClearPdb
- * Description : This function disables PDB module and clears all channels
- * configuration and status registers.
- *
- * @implements Pdb_Adc_Ip_DisableAndClearPdb_Activity
- * END**************************************************************************/
- void Pdb_Adc_Ip_DisableAndClearPdb(const uint32 Instance)
- {
- #if (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON)
- DevAssert(Instance < PDB_INSTANCE_COUNT);
- #endif /* (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON) */
- PDB_Type * const Base = PdbBase[Instance];
- uint8 ChanIdx;
- const Pdb_Adc_Ip_PretriggersConfigType PdbPretriggsConfig = { 0u, 0u, 0u };
- SchM_Enter_Adc_ADC_EXCLUSIVE_AREA_40();
- Pdb_Adc_HwAcc_DisablePdb(Base);
- Pdb_Adc_HwAcc_SetContinuousMode(Base, FALSE);
- SchM_Exit_Adc_ADC_EXCLUSIVE_AREA_40();
- for (ChanIdx = 0U; ChanIdx < PDB_CH_COUNT; ChanIdx++)
- {
- PDB_ADC_ResetChannel(Base, ChanIdx, &PdbPretriggsConfig);
- }
- }
- /*FUNCTION*********************************************************************
- *
- * Function Name : Pdb_Adc_Ip_IRQHandler
- * Description : Handles Pdb sequence error interrupt.
- *
- * @implements Pdb_Adc_Ip_IRQHandler_Activity
- *END*************************************************************************/
- /* The IAR build wants to see function prototypes */
- void Pdb_Adc_Ip_IRQHandler(const uint32 Instance);
- void Pdb_Adc_Ip_IRQHandler(const uint32 Instance)
- {
- #if (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON)
- DevAssert(Instance < PDB_INSTANCE_COUNT);
- #endif /* (PDB_ADC_IP_DEV_ERROR_DETECT == STD_ON) */
- PDB_Type * const Base = PdbBase[Instance];
- uint8 ChanIdx;
- uint16 SeqErrMask;
- /* Check if the Pdb unit is initialized, if the interrupt is not NULL
- * first since all channels use the same callback and if sequence error
- * interrupt is enabled. */
- if ((PdbAdcState[Instance].Init == TRUE) &&
- (PdbAdcState[Instance].SeqErrNotification != NULL_PTR) &&
- ((Base->SC & PDB_SC_PDBEIE_MASK) != 0u)\
- )
- {
- for (ChanIdx = 0u; ChanIdx < PDB_CH_COUNT; ChanIdx++)
- {
- SeqErrMask = (uint16) ((Base->CH[ChanIdx].S & PDB_S_ERR_MASK) >> PDB_S_ERR_SHIFT);
- if (SeqErrMask != 0u)
- {
- PdbAdcState[Instance].SeqErrNotification(ChanIdx, SeqErrMask);
- }
- }
- }
- for (ChanIdx = 0u; ChanIdx < PDB_CH_COUNT; ChanIdx++)
- {
- /* Clear all sequence error flags triggered from the current channel
- * by writing 0 to raised bits. */
- Base->CH[ChanIdx].S &= ~(PDB_S_ERR_MASK);
- }
- }
- static inline void PDB_ADC_ResetChannel(PDB_Type * const Base, const uint8 ChanIdx, const Pdb_Adc_Ip_PretriggersConfigType * PdbPretriggsConfig)
- {
- SchM_Enter_Adc_ADC_EXCLUSIVE_AREA_45();
- Pdb_Adc_HwAcc_ConfigAdcPretriggers(Base, ChanIdx, PdbPretriggsConfig);
- SchM_Exit_Adc_ADC_EXCLUSIVE_AREA_45();
- SchM_Enter_Adc_ADC_EXCLUSIVE_AREA_47();
- Pdb_Adc_HwAcc_ClearAdcPretriggerFlags(Base, ChanIdx, 0xFFu);
- /* Clear all sequence error flags. */
- Base->CH[ChanIdx].S &= ~(PDB_S_ERR_MASK);
- SchM_Exit_Adc_ADC_EXCLUSIVE_AREA_47();
- }
- #if (STD_ON == FEATURE_PDB_HAS_INSTANCE_BACKTOBACK)
- static void PDB_ADC_ConfigInstanceBackToBack_TrustedCall(const boolean InstanceBackToBackEnable)
- {
- if(InstanceBackToBackEnable == TRUE)
- {
- IP_SIM->CHIPCTL |= SIM_CHIPCTL_PDB_BB_SEL_MASK;
- }
- else
- {
- IP_SIM->CHIPCTL &= ~SIM_CHIPCTL_PDB_BB_SEL_MASK;
- }
- }
- static void PDB_ADC_ConfigInstanceBackToBack(const boolean InstanceBackToBackEnable)
- {
- #if (STD_ON == PDB_ADC_IP_ENABLE_USER_MODE_SUPPORT)
- OsIf_Trusted_Call1param(PDB_ADC_ConfigInstanceBackToBack_TrustedCall,(InstanceBackToBackEnable));
- #else
- PDB_ADC_ConfigInstanceBackToBack_TrustedCall(InstanceBackToBackEnable);
- #endif
- }
- #endif /* (STD_ON == FEATURE_PDB_HAS_INSTANCE_BACKTOBACK) */
- #if (STD_ON == FEATURE_PDB_HAS_INTERCHANNEL_BACKTOBACK)
- static void PDB_ADC_ConfigInterChannelBackToBack_TrustedCall(const uint32 Instance, const boolean InterChannelBackToBackEnable)
- {
- if(InterChannelBackToBackEnable == TRUE)
- {
- if (0U == Instance)
- {
- IP_SIM->CHIPCTL |= SIM_CHIPCTL_PDB_BB_SEL_1_MASK;
- }
- else
- {
- IP_SIM->CHIPCTL |= SIM_CHIPCTL_PDB_BB_SEL_2_MASK;
- }
- }
- else
- {
- if (0U == Instance)
- {
- IP_SIM->CHIPCTL &= ~(SIM_CHIPCTL_PDB_BB_SEL_1_MASK);
- }
- else
- {
- IP_SIM->CHIPCTL &= ~(SIM_CHIPCTL_PDB_BB_SEL_2_MASK);
- }
-
- }
- }
- static void PDB_ADC_ConfigInterChannelBackToBack(const uint32 Instance, const boolean InterChannelBackToBackEnable)
- {
- #if (STD_ON == PDB_ADC_IP_ENABLE_USER_MODE_SUPPORT)
- OsIf_Trusted_Call2params(PDB_ADC_ConfigInterChannelBackToBack_TrustedCall,(Instance),(InterChannelBackToBackEnable));
- #else
- PDB_ADC_ConfigInterChannelBackToBack_TrustedCall(Instance, InterChannelBackToBackEnable);
- #endif
- }
- #endif /* (STD_ON == FEATURE_PDB_HAS_INTERCHANNEL_BACKTOBACK) */
- #define ADC_STOP_SEC_CODE
- #include "Adc_MemMap.h"
- /** @} */
|