ADM/GW/RTD/include/Adc_Sar_Ip.h
2024-08-08 10:00:15 +09:00

853 lines
32 KiB
C

/*==================================================================================================
* Project : RTD AUTOSAR 4.4
* Platform : CORTEXM
* Peripheral : ADC_SAR
* Dependencies : none
*
* Autosar Version : 4.4.0
* Autosar Revision : ASR_REL_4_4_REV_0000
* Autosar Conf.Variant :
* SW Version : 0.9.0
* Build Version : S32K3_RTD_0_9_0__ASR_REL_4_4_REV_0000_20210326
*
* (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.
==================================================================================================*/
#ifndef ADC_SAR_IP_H
#define ADC_SAR_IP_H
/**
* @file
*
* @addtogroup adc_sar_ip Adc Sar IPL
* @{
*/
/**
* @page misra_violations MISRA-C:2012 violations
*
* @section [global]
* Violates MISRA 2012 Advisory Rule 2.5, Global macro not referenced.
* The macro defines a bitmask used to access status flags.
*
* @section [global]
* Violates MISRA 2012 Advisory Directive 4.9, Function-like macro defined.
* The macros are defined to simplify bitmask usage
*
*/
#include "Adc_Sar_Ip_Types.h"
#include "Adc_Sar_Ip_DeviceRegisters.h"
#include "Adc_Sar_Ip_Cfg.h"
/*==================================================================================================
* SOURCE FILE VERSION INFORMATION
==================================================================================================*/
#define ADC_SAR_IP_VENDOR_ID_H 43
#define ADC_SAR_IP_AR_RELEASE_MAJOR_VERSION_H 4
#define ADC_SAR_IP_AR_RELEASE_MINOR_VERSION_H 4
#define ADC_SAR_IP_AR_RELEASE_REVISION_VERSION_H 0
#define ADC_SAR_IP_SW_MAJOR_VERSION_H 0
#define ADC_SAR_IP_SW_MINOR_VERSION_H 9
#define ADC_SAR_IP_SW_PATCH_VERSION_H 0
/*==================================================================================================
* FILE VERSION CHECKS
==================================================================================================*/
/* Check if Adc_Sar_Ip.h file and Adc_Sar_Ip_Types.h file are of the same vendor */
#if (ADC_SAR_IP_VENDOR_ID_H != ADC_SAR_IP_VENDOR_ID_TYPES_H)
#error "Adc_Sar_Ip.h and Adc_Sar_Ip_Types.h have different vendor ids"
#endif
/* Check if Adc_Sar_Ip.h file and Adc_Sar_Ip_Types.h file are of the same Autosar version */
#if ((ADC_SAR_IP_AR_RELEASE_MAJOR_VERSION_H != ADC_SAR_IP_AR_RELEASE_MAJOR_VERSION_TYPES_H) || \
(ADC_SAR_IP_AR_RELEASE_MINOR_VERSION_H != ADC_SAR_IP_AR_RELEASE_MINOR_VERSION_TYPES_H) || \
(ADC_SAR_IP_AR_RELEASE_REVISION_VERSION_H != ADC_SAR_IP_AR_RELEASE_REVISION_VERSION_TYPES_H) \
)
#error "AutoSar Version Numbers of Adc_Sar_Ip.h and Adc_Sar_Ip_Types.h are different"
#endif
/* Check if Adc_Sar_Ip.h file and Adc_Sar_Ip_Types.h file are of the same Software version */
#if ((ADC_SAR_IP_SW_MAJOR_VERSION_H != ADC_SAR_IP_SW_MAJOR_VERSION_TYPES_H) || \
(ADC_SAR_IP_SW_MINOR_VERSION_H != ADC_SAR_IP_SW_MINOR_VERSION_TYPES_H) || \
(ADC_SAR_IP_SW_PATCH_VERSION_H != ADC_SAR_IP_SW_PATCH_VERSION_TYPES_H) \
)
#error "Software Version Numbers of Adc_Sar_Ip.h and Adc_Sar_Ip_Types.h are different"
#endif
/* Check if Adc_Sar_Ip.h file and Adc_Sar_Ip_DeviceRegisters.h file are of the same vendor */
#if (ADC_SAR_IP_VENDOR_ID_H != ADC_SAR_IP_VENDOR_ID_DEVICEREGISTERS_H)
#error "Adc_Sar_Ip.h and Adc_Sar_Ip_DeviceRegisters.h have different vendor ids"
#endif
/* Check if Adc_Sar_Ip.h file and Adc_Sar_Ip_DeviceRegisters.h file are of the same Autosar version */
#if ((ADC_SAR_IP_AR_RELEASE_MAJOR_VERSION_H != ADC_SAR_IP_AR_RELEASE_MAJOR_VERSION_DEVICEREGISTERS_H) || \
(ADC_SAR_IP_AR_RELEASE_MINOR_VERSION_H != ADC_SAR_IP_AR_RELEASE_MINOR_VERSION_DEVICEREGISTERS_H) || \
(ADC_SAR_IP_AR_RELEASE_REVISION_VERSION_H != ADC_SAR_IP_AR_RELEASE_REVISION_VERSION_DEVICEREGISTERS_H) \
)
#error "AutoSar Version Numbers of Adc_Sar_Ip.h and Adc_Sar_Ip_DeviceRegisters.h are different"
#endif
/* Check if Adc_Sar_Ip.h file and Adc_Sar_Ip_DeviceRegisters.h file are of the same Software version */
#if ((ADC_SAR_IP_SW_MAJOR_VERSION_H != ADC_SAR_IP_SW_MAJOR_VERSION_DEVICEREGISTERS_H) || \
(ADC_SAR_IP_SW_MINOR_VERSION_H != ADC_SAR_IP_SW_MINOR_VERSION_DEVICEREGISTERS_H) || \
(ADC_SAR_IP_SW_PATCH_VERSION_H != ADC_SAR_IP_SW_PATCH_VERSION_DEVICEREGISTERS_H) \
)
#error "Software Version Numbers of Adc_Sar_Ip.h and Adc_Sar_Ip_DeviceRegisters.h are different"
#endif
/* Check if Adc_Sar_Ip.h file and Adc_Sar_Ip_Cfg.h file are of the same vendor */
#if (ADC_SAR_IP_VENDOR_ID_H != ADC_SAR_IP_VENDOR_ID_CFG_H)
#error "Adc_Sar_Ip.h and Adc_Sar_Ip_Cfg.h have different vendor ids"
#endif
/* Check if Adc_Sar_Ip.h file and Adc_Sar_Ip_Cfg.h file are of the same Autosar version */
#if ((ADC_SAR_IP_AR_RELEASE_MAJOR_VERSION_H != ADC_SAR_IP_AR_RELEASE_MAJOR_VERSION_CFG_H) || \
(ADC_SAR_IP_AR_RELEASE_MINOR_VERSION_H != ADC_SAR_IP_AR_RELEASE_MINOR_VERSION_CFG_H) || \
(ADC_SAR_IP_AR_RELEASE_REVISION_VERSION_H != ADC_SAR_IP_AR_RELEASE_REVISION_VERSION_CFG_H) \
)
#error "AutoSar Version Numbers of Adc_Sar_Ip.h and Adc_Sar_Ip_Cfg.h are different"
#endif
/* Check if Adc_Sar_Ip.h file and Adc_Sar_Ip_Cfg.h file are of the same Software version */
#if ((ADC_SAR_IP_SW_MAJOR_VERSION_H != ADC_SAR_IP_SW_MAJOR_VERSION_CFG_H) || \
(ADC_SAR_IP_SW_MINOR_VERSION_H != ADC_SAR_IP_SW_MINOR_VERSION_CFG_H) || \
(ADC_SAR_IP_SW_PATCH_VERSION_H != ADC_SAR_IP_SW_PATCH_VERSION_CFG_H) \
)
#error "Software Version Numbers of Adc_Sar_Ip.h and Adc_Sar_Ip_Cfg.h are different"
#endif
/*==================================================================================================
* DEFINITIONS
==================================================================================================*/
/*!
* @brief Macros for status and notification flags
*
* These flags map to internal hardware flags in different registers, but are
* grouped together for convenience.
*
*/
#define ADC_SAR_IP_NOTIF_FLAG_NORMAL_ENDCHAIN ((uint32)1U << 0U)
#define ADC_SAR_IP_NOTIF_FLAG_NORMAL_EOC ((uint32)1U << 1U)
#define ADC_SAR_IP_NOTIF_FLAG_INJECTED_ENDCHAIN ((uint32)1U << 2U)
#define ADC_SAR_IP_NOTIF_FLAG_INJECTED_EOC ((uint32)1U << 3U)
#define ADC_SAR_IP_NOTIF_FLAG_CTU_EOC ((uint32)1U << 4U)
#define ADC_SAR_IP_STATUS_FLAG_NORMAL_ENDCHAIN ADC_SAR_IP_NOTIF_FLAG_NORMAL_ENDCHAIN
#define ADC_SAR_IP_STATUS_FLAG_NORMAL_EOC ADC_SAR_IP_NOTIF_FLAG_NORMAL_EOC
#define ADC_SAR_IP_STATUS_FLAG_INJECTED_ENDCHAIN ADC_SAR_IP_NOTIF_FLAG_INJECTED_ENDCHAIN
#define ADC_SAR_IP_STATUS_FLAG_INJECTED_EOC ADC_SAR_IP_NOTIF_FLAG_INJECTED_EOC
#define ADC_SAR_IP_STATUS_FLAG_CTU_EOC ADC_SAR_IP_NOTIF_FLAG_CTU_EOC
#define ADC_SAR_IP_STATUS_FLAG_CALIBRATED ((uint32)1U << 5U)
#define ADC_SAR_IP_STATUS_FLAG_NORMAL_STARTED ((uint32)1U << 6U)
#define ADC_SAR_IP_STATUS_FLAG_INJECTED_STARTED ((uint32)1U << 7U)
#define ADC_SAR_IP_STATUS_FLAG_INJECTED_ABORTED ((uint32)1U << 8U)
#define ADC_SAR_IP_STATUS_FLAG_CTU_STARTED ((uint32)1U << 9U)
#define ADC_SAR_IP_STATUS_FLAG_AUTOCLOCKOFF ((uint32)1U << 10U)
#define ADC_SAR_IP_STATUS_FLAG_ALL (ADC_SAR_IP_STATUS_FLAG_NORMAL_EOC | \
ADC_SAR_IP_STATUS_FLAG_NORMAL_ENDCHAIN | \
ADC_SAR_IP_STATUS_FLAG_INJECTED_EOC | \
ADC_SAR_IP_STATUS_FLAG_INJECTED_ENDCHAIN | \
ADC_SAR_IP_STATUS_FLAG_CTU_EOC | \
ADC_SAR_IP_STATUS_FLAG_CALIBRATED | \
ADC_SAR_IP_STATUS_FLAG_NORMAL_STARTED | \
ADC_SAR_IP_STATUS_FLAG_INJECTED_STARTED | \
ADC_SAR_IP_STATUS_FLAG_INJECTED_ABORTED | \
ADC_SAR_IP_STATUS_FLAG_CTU_STARTED | \
ADC_SAR_IP_STATUS_FLAG_AUTOCLOCKOFF \
)
#define ADC_SAR_IP_NOTIF_FLAG_ALL (ADC_SAR_IP_NOTIF_FLAG_NORMAL_EOC | \
ADC_SAR_IP_NOTIF_FLAG_NORMAL_ENDCHAIN | \
ADC_SAR_IP_NOTIF_FLAG_INJECTED_EOC | \
ADC_SAR_IP_NOTIF_FLAG_INJECTED_ENDCHAIN | \
ADC_SAR_IP_NOTIF_FLAG_CTU_EOC \
)
/*!
* @brief Macros for channel notifications
*
* These notification flags map to internal hardware flags in different registers,
* but are grouped together for convenience.
*
*/
#define ADC_SAR_IP_CHAN_NOTIF_EOC ((uint32)1U << 0U)
#define ADC_SAR_IP_CHAN_NOTIF_WDG ((uint32)1U << 1U)
#define ADC_SAR_IP_CHAN_NOTIF_FLAG_ALL (ADC_SAR_IP_CHAN_NOTIF_EOC | \
ADC_SAR_IP_CHAN_NOTIF_WDG \
)
/*!
* @brief Macros for watchdog status registers
*
* These macros help decode bit mask provided by the Adc_Sar_Ip_GetWdgThresholdFlags
* function and also compose the mask to be provided to Adc_Sar_Ip_ClearWdgThresholdFlags
*
*/
#define ADC_WDOG_REG_MASK_HIGH(registerIdx) ((uint32)((uint32)1u << (((registerIdx)*2u) + 1u)))
#define ADC_WDOG_REG_MASK_LOW(registerIdx) ((uint32)((uint32)1u << ((registerIdx)*2u)))
/*******************************************************************************
* API
******************************************************************************/
#if defined (__cplusplus)
extern "C" {
#endif
#define ADC_START_SEC_CODE
#include "Adc_MemMap.h"
/*!
* @brief Return the address of the specified data register
*
* This function returns the address of the specified data register
*
* @param[in] u32Instance - ADC instance number
* @param[in] u32ChannelIndex - adc channel of the Hw unit
* @return status:
* - value of the address of the data for the specified channel
*/
uint32 Adc_Sar_Ip_GetDataAddress(uint32 u32Instance, uint32 u32ChannelIndex);
/*!
* @brief Initialize ADC_SAR module
*
* This function initializes the ADC_SAR module by configuring all
* available features.
*
* @param[in] u32Instance - ADC instance number
* @param[in] pConfig - configuration struct pointer
* @return status:
* - ADC_SAR_IP_STATUS_SUCCESS: init successful
* - ADC_SAR_IP_STATUS_TIMEOUT: init step timed out
*/
Adc_Sar_Ip_StatusType Adc_Sar_Ip_Init(const uint32 u32Instance,
const Adc_Sar_Ip_ConfigType * const pConfig);
/*!
* @brief Deinitialize ADC_SAR module
*
* This function resets the ADC internal registers to default values.
*
* @param[in] u32Instance - ADC instance number
* @return status:
* - ADC_SAR_IP_STATUS_SUCCESS: deinit successful
* - ADC_SAR_IP_STATUS_TIMEOUT: deinit step timed out
*/
Adc_Sar_Ip_StatusType Adc_Sar_Ip_Deinit(const uint32 u32Instance);
/*!
* @brief Configures the converter chains the given configuration structure
*
* This function configures the ADC Normal and Injected Chains with the options
* provided in the structure.
*
* @param[in] u32Instance - ADC instance number
* @param[in] pChansIdxMask - channel configuration structure
* @param[in] pChainType - conversion chain (Normal or Injected)
* @return void
*/
void Adc_Sar_Ip_ChainConfig(const uint32 u32Instance,
const Adc_Sar_Ip_ChansIdxMaskType * const pChansIdxMask,
const Adc_Sar_Ip_ConvChainType pChainType);
/*!
* @brief Enable a channel
*
* This function enables a channel in a specified conversion chain
*
* @param[in] u32Instance - ADC instance number
* @param[in] pChainType - conversion chain (Normal or Injected)
* @param[in] u32ChnIdx - channel 0
* @return void
*/
void Adc_Sar_Ip_EnableChannel(const uint32 u32Instance,
const Adc_Sar_Ip_ConvChainType pChainType,
const uint32 u32ChnIdx);
/*!
* @brief Disable a channel
*
* This function disables a channel in a specified conversion chain
*
* @param[in] u32Instance - ADC instance number
* @param[in] pChainType - conversion chain (Normal or Injected)
* @param[in] u32ChnIdx - channel 0
* @return void
*/
void Adc_Sar_Ip_DisableChannel(const uint32 u32Instance,
const Adc_Sar_Ip_ConvChainType pChainType,
const uint32 u32ChnIdx);
#if (ADC_SAR_IP_SET_RESOLUTION == STD_ON)
/*!
* @brief Set conversion resolution
*
* This function sets the conversion resolution (number of bits per conversion data)
*
* @param[in] u32Instance - ADC instance number
* @param[in] eResolution - conversion resolution
* @return void
*/
void Adc_Sar_Ip_SetResolution(const uint32 u32Instance,
const Adc_Sar_Ip_Resolution eResolution);
#endif /* (ADC_SAR_IP_SET_RESOLUTION == STD_ON) */
/*!
* @brief Start conversion
*
* This function starts a conversion channel (Normal or Injected)
*
* @param[in] u32Instance - ADC instance number
* @param[in] pChainType - conversion chain (Normal or Injected)
* @return void
*/
void Adc_Sar_Ip_StartConversion(const uint32 u32Instance,
const Adc_Sar_Ip_ConvChainType pChainType);
/*!
* @brief Get the status flags
*
* This function returns the status flags of the ADC.
*
* @param[in] u32Instance - ADC instance number
* @return the status flag bit-mask
*/
uint32 Adc_Sar_Ip_GetStatusFlags(const uint32 u32Instance);
/*!
* @brief Clear the status flags
*
* This function clears the status flags of the ADC.
*
* @param[in] u32Instance - ADC instance number
* @param[in] u32Mask - bit-mask of flags to clear
* @return void
*/
void Adc_Sar_Ip_ClearStatusFlags(const uint32 u32Instance,
const uint32 u32Mask);
/*!
* @brief Self test
*
* This function executes a self test on the ADC instance.
*
* @param[in] u32Instance - ADC instance number
* @return status:
* - ADC_SAR_IP_STATUS_SUCCESS: self testing successful
* - ADC_SAR_IP_STATUS_TIMEOUT: self testing step timed out
*/
Adc_Sar_Ip_StatusType Adc_Sar_Ip_SelfTest(const uint32 u32Instance);
/*!
* @brief Get conversion results for a conversion chain
*
* This function gets the conversion results for the selected Conversion Chain.
*
* @param[in] u32Instance - ADC instance number
* @param[in] pChainType - conversion chain (Normal, Injected or CTU)
* @param[in] u32Length - the length of the buffer
* @param[out] pResults - the output buffer
* @return the number of values written in the buffer (max length)
*/
uint32 Adc_Sar_Ip_GetConvDataToArray(const uint32 u32Instance,
const Adc_Sar_Ip_ConvChainType pChainType,
const uint32 u32Length,
uint16 * const pResults);
/*!
* @brief Get conversion results for a conversion chain with extended information
*
* This function gets the conversion results for the selected Conversion Chain, with
* extended information about each conversion result (channel index, valid an overwritten
* properties and conversion data). This function should be used in case of configurations
* with overlapping channel lists in different chains, resulting in overwrite of conversion
* data when a higher priority chain is executed before all data was read.
*
* @param[in] u32Instance - ADC instance number
* @param[in] pChainType - conversion chain (Normal, Injected or CTU)
* @param[in] u32Length - the length of the buffer
* @param[out] pResults - the output buffer
* @return the number of values written in the buffer (max length)
*/
uint32 Adc_Sar_Ip_GetConvResultsToArray(const uint32 u32Instance,
const Adc_Sar_Ip_ConvChainType pChainType,
const uint32 u32Length,
Adc_Sar_Ip_ChanResultType * const pResults);
/*!
* @brief Return the result of the conversion
*
* This function returns the result of the conversion for a single channel
*
* @param [in] u32Instance - ADC instance number
* @param [in] u32ChnIdx - channel 0
* @return conversion data
*/
uint16 Adc_Sar_Ip_GetConvData(const uint32 u32Instance, const uint32 u32ChnIdx);
/*!
* @brief Return the result and the status of the conversion
*
* This function returns the result and the status of the conversion
* for a single channel
*
* @param [in] u32Instance - ADC instance number
* @param [in] u32ChnIdx - channel 0
* @param [in] pChainType - conversion chain (Normal, Injected or CTU)
* @param [out] pResult - pointer to the buffer where the result will be written
* @return void
*/
void Adc_Sar_Ip_GetConvResult(const uint32 u32Instance,
const uint32 u32ChnIdx,
const Adc_Sar_Ip_ConvChainType pChainType,
Adc_Sar_Ip_ChanResultType * const pResult);
/*!
* @brief Perform Calibration of the ADC
*
* This function performs a calibration of the ADC. The maximum input clock
* frequency for the ADC is 80 MHz, checked with assertions if DEV_ASSERT is
* enabled. After calibration, the ADC is left in Powerup state (PWDN bit is clear).
*
* @param[in] u32Instance - ADC instance number
* @return the calibration result
* - ADC_SAR_IP_STATUS_SUCCESS: calibration successful
* - ADC_SAR_IP_STATUS_TIMEOUT: calibration step timed out
* - ADC_SAR_IP_STATUS_ERROR: calibration failed
*/
Adc_Sar_Ip_StatusType Adc_Sar_Ip_DoCalibration(const uint32 u32Instance);
/*!
* @brief Power up the ADC
*
* This function enables the ADC (disables the Power Down feature).
*
* @param[in] u32Instance - ADC instance number
* @return status:
* - ADC_SAR_IP_STATUS_SUCCESS: power up successful
* - ADC_SAR_IP_STATUS_TIMEOUT: power up failed
*/
Adc_Sar_Ip_StatusType Adc_Sar_Ip_Powerup(const uint32 u32Instance);
/*!
* @brief Power down the ADC
*
* This function disables the ADC (enables the Power Down feature).
*
* @param[in] u32Instance - ADC instance number
* @return status:
* - ADC_SAR_IP_STATUS_SUCCESS: power down successful
* - ADC_SAR_IP_STATUS_TIMEOUT: power down failed
*/
Adc_Sar_Ip_StatusType Adc_Sar_Ip_Powerdown(const uint32 u32Instance);
/*!
* @brief Enable ADC interrupts
*
* This function enables ADC interrupts.
*
* @param[in] u32Instance - ADC instance number
* @param[in] u32NotificationMask - mask of interrupts to enable (of status flags)
* @return void
*/
void Adc_Sar_Ip_EnableNotifications(const uint32 u32Instance,
const uint32 u32NotificationMask);
/*!
* @brief Disable ADC interrupts
*
* This function disables ADC interrupts.
*
* @param[in] u32Instance - ADC instance number
* @param[in] u32NotificationMask - mask of interrupts to disable (of status flags)
* @return void
*/
void Adc_Sar_Ip_DisableNotifications(const uint32 u32Instance,
const uint32 u32NotificationMask);
/*!
* @brief Enable ADC interrupt for a channel
*
* This function enables interrupt generation on End of Conversion and watchdog
* events for a single channel.
* The mask parameter can be set using the defines provided in the driver header
* file that have the pattern ADC_SAR_IP_CHAN_NOTIF_... e.g. ADC_SAR_IP_CHAN_NOTIF_EOC.
*
* @param[in] u32Instance - ADC instance number
* @param[in] u32ChnIdx - channel 0
* @param[in] u32Mask - mask selecting targeted events
* @return void
*/
void Adc_Sar_Ip_EnableChannelNotifications(const uint32 u32Instance,
const uint32 u32ChnIdx,
const uint32 u32Mask);
/*!
* @brief Disable ADC interrupt for a channel
*
* This function disables interrupt generation on End of Conversion and watchdog
* events for a single channel.
* The mask parameter can be set using the defines provided in the driver header
* file that have the pattern ADC_SAR_IP_CHAN_NOTIF_... e.g. ADC_SAR_IP_CHAN_NOTIF_EOC.
*
* @param[in] u32Instance - ADC instance number
* @param[in] u32ChnIdx - channel 0
* @param[in] u32Mask - mask selecting targeted events
* @return void
*/
void Adc_Sar_Ip_DisableChannelNotifications(const uint32 u32Instance,
const uint32 u32ChnIdx,
const uint32 u32Mask);
/*!
* @brief Set the ADC clocks
*
* This function initializes the ADC clock configuration.
*
* @param[in] u32Instance - ADC instance number
* @param[in] pConfig - the clock configuration
* @return status:
* - ADC_SAR_IP_STATUS_SUCCESS: set successful
* - ADC_SAR_IP_STATUS_TIMEOUT: power up or down sequence timed out
*/
Adc_Sar_Ip_StatusType Adc_Sar_Ip_SetClockMode(const uint32 u32Instance,
const Adc_Sar_Ip_ClockConfigType * const pConfig);
/*!
* @brief Set the sample times
*
* This function sets the sample times for each channnel group.
* Note: aSampleTimes must contain the sample times in order of the channel
* groups, e.g. sample time for the channel group 1 must be on the first position.
*
* @param[in] u32Instance - ADC instance number
* @param[in] aSampleTimes - array with size ADC_SAR_NUM_GROUP_CHAN containing sample times for each channel group
* @return void
*/
void Adc_Sar_Ip_SetSampleTimes(const uint32 u32Instance,
const uint8 * const aSampleTimes);
#if FEATURE_ADC_HAS_AVERAGING
/*!
* @brief Configure averaging
*
* This function enables averaging and selects the number of conversions to average.
* The mask parameter should be set using the Adc_Sar_Ip_AvgSelectType enum elements
* that have the pattern ADC_SAR_IP_AVG_... e.g. ADC_SAR_IP_AVG_4_CONV.
*
* @param[in] u32Instance - ADC instance number
* @param[in] bAvgEn - enable or disable averaging
* @param[in] eAvgSel - selects number of conversions to average
* @return void
*/
void Adc_Sar_Ip_SetAveraging(const uint32 u32Instance,
const boolean bAvgEn,
const Adc_Sar_Ip_AvgSelectType eAvgSel);
#endif /* FEATURE_ADC_HAS_AVERAGING */
/*!
* @brief Abort ongoing conversion
*
* This function aborts an ongoing conversion.
*
* @param[in] u32Instance - ADC instance number
* @return void
*/
void Adc_Sar_Ip_AbortConversion(const uint32 u32Instance);
/*!
* @brief Abort ongoing chain conversion
*
* This function aborts an ongoing chain of conversions.
* If scan(continuos) mode is selected, then bAllowRestart selects whether
* the abort command restarts the chain or stops it. For one shot conversion,
* this should be FALSE.
*
* @param[in] u32Instance - ADC instance number
* @param[in] bBlocking - wait and check that the ongoing conversion has stopped
* @param[in] bAllowRestart - restart continuos conversion instead of aborting
* @return status:
* - ADC_SAR_IP_STATUS_SUCCESS: abort successful
* - ADC_SAR_IP_STATUS_TIMEOUT: ongoing conversion could not be stopped
* @return void
*/
Adc_Sar_Ip_StatusType Adc_Sar_Ip_AbortChain(const uint32 u32Instance,
const boolean bBlocking,
const boolean bAllowRestart);
/*!
* @brief Set the Presampling Source for the channel group
*
* This function configures the Presampling Source for a channel group.
*
* @param[in] u32Instance - ADC instance number
* @param[in] pChanGroup - the channel group
* @param[in] pPresampleSource - the presampling source
* @return void
*/
void Adc_Sar_Ip_SetPresamplingSource(const uint32 u32Instance,
const Adc_Sar_Ip_ChanGroupType pChanGroup,
const Adc_Sar_Ip_PresamplingSourceType pPresampleSource);
/*!
* @brief Enable Presampling on one channel
*
* This function enables the Presampling on one channel of the ADC.
*
* @param[in] u32Instance - ADC instance number
* @param[in] u32ChnIdx - channel 0
* @return void
*/
void Adc_Sar_Ip_EnableChannelPresampling(const uint32 u32Instance,
const uint32 u32ChnIdx);
/*!
* @brief Disable Presampling on one channel
*
* This function disables the Presampling on one channel of the ADC.
*
* @param[in] u32Instance - ADC instance number
* @param[in] u32ChnIdx - channel 0
* @return void
*/
void Adc_Sar_Ip_DisableChannelPresampling(const uint32 u32Instance,
const uint32 u32ChnIdx);
/*!
* @brief Enable Conversion Presampled Data
*
* This function enables bypass of the Sampling Phase, resulting in a conversion
* of the presampled data. This is available only for channels that have presampling
* enabled.
*
* @param[in] u32Instance - ADC instance number
* @return void
*/
void Adc_Sar_Ip_EnablePresampleConversion(const uint32 u32Instance);
/*!
* @brief Disable Conversion of Presampled Data
*
* This function disables Sampling Phase bypass.
*
* @param[in] u32Instance - ADC instance number
* @return void
*/
void Adc_Sar_Ip_DisablePresampleConversion(const uint32 u32Instance);
/*!
* @brief Enable DMA Requests
*
* This function enables requests to DMA from ADC
*
* @param[in] u32Instance - ADC instance number
* @return void
*/
void Adc_Sar_Ip_EnableDma(const uint32 u32Instance);
/*!
* @brief Disable DMA Requests
*
* This function disables requests to DMA from ADC
*
* @param[in] u32Instance - ADC instance number
* @return void
*/
void Adc_Sar_Ip_DisableDma(const uint32 u32Instance);
/*!
* @brief Enable DMA on one channel
*
* This function enables DMA requests triggered by End of Conversion event from
* a selected channel.
*
* @param[in] u32Instance - ADC instance number
* @param[in] u32ChnIdx - channel 0
* @return void
*/
void Adc_Sar_Ip_EnableChannelDma(const uint32 u32Instance,
const uint32 u32ChnIdx);
/*!
* @brief Disable DMA on one channel
*
* This function disables DMA requests triggered by End of Conversion event from
* a selected channel.
*
* @param[in] u32Instance - ADC instance number
* @param[in] u32ChnIdx - channel 0
* @return void
*/
void Adc_Sar_Ip_DisableChannelDma(const uint32 u32Instance,
const uint32 u32ChnIdx);
/*!
* @brief Disable DMA on all channels
*
* This function disables DMA requests triggered by End of Conversion event from
* all channels.
*
* @param[in] u32Instance - ADC instance number
* @return void
*/
void Adc_Sar_Ip_DisableChannelDmaAll(const uint32 u32Instance);
/*!
* @brief Set DMA Request Clear Source
*
* This function selects the DMA Request Flag Clear Source.
*
* @param[in] u32Instance - ADC instance number
* @param[in] pDmaClear - the clear source for DMA Requests (Ack from DMA Controller or
read of data registers)
* @return void
*/
void Adc_Sar_Ip_SetDmaClearSource(const uint32 u32Instance,
const Adc_Sar_Ip_ClearSourceType pDmaClear);
/*!
* @brief Configure watchdog threshold register
*
* This function configures the high/low thresholds for a certain register.
*
* @param [in] u32Instance - ADC instance number
* @param [in] u8RegisterIdx - the index of the register
* @param [in] pThresholdValues - the threshold values
* @return void
*/
void Adc_Sar_Ip_SetWdgThreshold(const uint32 u32Instance,
const uint8 u8RegisterIdx,
const Adc_Sar_Ip_WdgThresholdType * const pThresholdValues);
/*!
* @brief Configure conversion mode
*
* This function configures the used conversion mode.
* Note: The selected ADC instance must be in the IDLE state.
*
* @param [in] u32Instance - ADC instance number
* @param [in] eConvMode - selected conversion mode
* @return void
*/
void Adc_Sar_Ip_SetConversionMode(const uint32 u32Instance,
const Adc_Sar_Ip_ConvModeType eConvMode);
#if FEATURE_ADC_HAS_CTU
/*!
* @brief Configure CTU mode
*
* This function configures the CTU mode and enable.
*
* @param [in] u32Instance - ADC instance number
* @param [in] eCtuMode - selected CTU mode
* @return status:
* - ADC_SAR_IP_STATUS_SUCCESS: set successful
* - ADC_SAR_IP_STATUS_TIMEOUT: power up or down sequence timed out
*/
Adc_Sar_Ip_StatusType Adc_Sar_Ip_SetCtuMode(const uint32 u32Instance,
const Adc_Sar_Ip_CtuModeType eCtuMode);
#endif /* FEATURE_ADC_HAS_CTU */
#if (FEATURE_ADC_HAS_INJ_EXT_TRIGGER || FEATURE_ADC_HAS_EXT_TRIGGER)
/*!
* @brief Configure external trigger
*
* This function configures the external trigger.
*
* @param [in] u32Instance - ADC instance number
* @param [in] eTriggerEdge - selected external trigger type
* @param [in] eTrggerSrc - selects normal, auxiliary normal or injected trigger
* @return void
*/
void Adc_Sar_Ip_SetExternalTrigger(const uint32 u32Instance,
const Adc_Sar_Ip_ExtTriggerEdgeType eTriggerEdge,
const Adc_Sar_Ip_ExtTriggerSourceType eTrggerSrc);
#endif /* (FEATURE_ADC_HAS_INJ_EXT_TRIGGER || FEATURE_ADC_HAS_EXT_TRIGGER) */
#if FEATURE_ADC_HAS_TEMPSENSE_CHN
#if (ADC_SAR_IP_TEMPSENSE_ENABLED == STD_ON)
/*!
* @brief Calculates the temperature on chip from the provided parameter.
*
* This function calculate the temperature on chip from the provided parameter
* Note: u16AdcVref and u16TempSenseVsupply parameters must be in fixed point format
* (1 bit for the sign, 11 bits for the integer part and 4 bits for the decimal part)
*
* @param [in] u32AdcInstance - Adc instance number
* @param [in] u32TempInstance - TempSense instance number
* @param [in] u16TempSenseAdcConvData - data measured on the ADC internal channel
* corresponding to TempSense, with 12 bit resolution
* @return uint16: The temperature on chip in degrees C, expressed in fixed point format
*/
uint16 Adc_Sar_Ip_TempSenseCalculateTemp(const uint32 u32AdcInstance,
const uint32 u32TempInstance,
const uint16 u16TempSenseAdcConvData);
/*!
* @brief Get the temperature on chip directly.
*
* This function starts a normal software conversion on tempsense channel with One-shot mode
* and calculates the temperature on chip from the data conversion. At the end, tempsense
* channel will be disabled. The previous initialized configuration may be affected by
* calling this function
* Note: u16AdcVref and u16TempSenseVsupply parameters must be in fixed point format
* (1 bit for the sign, 11 bits for the integer part and 4 bits for the decimal part).
* The function is synchronous: waits until the ADC conversion completes or timeout occurs
*
* @param [in] u32AdcInstance - Adc instance number
* @param [in] u32TempInstance - TempSense instance number
* @param [out] pTempSenseVal - The temperature on chip in degrees C, expressed in fixed point format
* @return status:
* - ADC_SAR_IP_STATUS_SUCCESS: Get temperature successfully
* - ADC_SAR_IP_STATUS_TIMEOUT: Adc conversion did not complete
*/
Adc_Sar_Ip_StatusType Adc_Sar_Ip_TempSenseGetTemp(const uint32 u32AdcInstance,
const uint32 u32TempInstance,
uint16 * const pTempSenseVal);
/*!
* @brief Enables the temperature sensor
*
* This function enables the temperature sensor.
*
* @param [in] u32Instance - TempSense instance number
* @return void
*/
void Adc_Sar_Ip_TempSenseEnable(const uint32 u32Instance);
/*!
* @brief Disables the temperature sensor
*
* This function disables the temperature sensor.
*
* @param [in] u32Instance - TempSense instance number
* @return void
*/
void Adc_Sar_Ip_TempSenseDisable(const uint32 u32Instance);
#endif /* (ADC_SAR_IP_TEMPSENSE_ENABLED == STD_ON) */
#endif /* FEATURE_ADC_HAS_TEMPSENSE_CHN */
#define ADC_STOP_SEC_CODE
#include "Adc_MemMap.h"
#if defined (__cplusplus)
}
#endif
/** @} */
#endif /* ADC_SAR_IP_H */