556 lines
21 KiB
C
556 lines
21 KiB
C
/*
|
|
* Copyright (c) 2015, Freescale Semiconductor, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without modification,
|
|
* are permitted provided that the following conditions are met:
|
|
*
|
|
* o Redistributions of source code must retain the above copyright notice, this list
|
|
* of conditions and the following disclaimer.
|
|
*
|
|
* o Redistributions in binary form must reproduce the above copyright notice, this
|
|
* list of conditions and the following disclaimer in the documentation and/or
|
|
* other materials provided with the distribution.
|
|
*
|
|
* o Neither the name of Freescale Semiconductor, Inc. nor the names of its
|
|
* contributors may be used to endorse or promote products derived from this
|
|
* software without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
#ifndef __ADC_IMX7D_H__
|
|
#define __ADC_IMX7D_H__
|
|
|
|
#include <stdint.h>
|
|
#include <stdbool.h>
|
|
#include <assert.h>
|
|
#include "device_imx.h"
|
|
|
|
/*!
|
|
* @addtogroup adc_imx7d_driver
|
|
* @{
|
|
*/
|
|
|
|
/*******************************************************************************
|
|
* Definitions
|
|
******************************************************************************/
|
|
|
|
/*! @brief ADC module initialization structure. */
|
|
typedef struct _adc_init_config
|
|
{
|
|
uint32_t sampleRate; /*!< The desired ADC sample rate.*/
|
|
bool levelShifterEnable; /*!< The level shifter module configuration(Enable to power on ADC module).*/
|
|
} adc_init_config_t;
|
|
|
|
/*! @brief ADC logic channel initialization structure. */
|
|
typedef struct _adc_logic_ch_init_config
|
|
{
|
|
uint32_t convertRate; /*!< The continuous rate when continuous sample enabled.*/
|
|
uint8_t inputChannel; /*!< The logic channel to be set.*/
|
|
uint8_t averageNumber; /*!< The average number for hardware average function.*/
|
|
bool coutinuousEnable; /*!< Continuous sample mode enable configuration.*/
|
|
bool averageEnable; /*!< Hardware average enable configuration.*/
|
|
} adc_logic_ch_init_config_t;
|
|
|
|
/*! @brief ADC logic channel selection enumeration. */
|
|
enum _adc_logic_ch_selection
|
|
{
|
|
adcLogicChA = 0x0, /*!< ADC Logic Channel A.*/
|
|
adcLogicChB = 0x1, /*!< ADC Logic Channel B.*/
|
|
adcLogicChC = 0x2, /*!< ADC Logic Channel C.*/
|
|
adcLogicChD = 0x3, /*!< ADC Logic Channel D.*/
|
|
adcLogicChSW = 0x4, /*!< ADC Logic Channel Software.*/
|
|
};
|
|
|
|
/*! @brief ADC hardware average number enumeration. */
|
|
enum _adc_average_number
|
|
{
|
|
adcAvgNum4 = 0x0, /*!< ADC Hardware Average Number is set to 4.*/
|
|
adcAvgNum8 = 0x1, /*!< ADC Hardware Average Number is set to 8.*/
|
|
adcAvgNum16 = 0x2, /*!< ADC Hardware Average Number is set to 16.*/
|
|
adcAvgNum32 = 0x3, /*!< ADC Hardware Average Number is set to 32.*/
|
|
};
|
|
|
|
/*! @brief ADC build-in comparer work mode configuration enumeration. */
|
|
enum _adc_compare_mode
|
|
{
|
|
adcCmpModeDisable = 0x0, /*!< ADC build-in comparator is disabled.*/
|
|
adcCmpModeGreaterThanLow = 0x1, /*!< ADC build-in comparator is triggered when sample value greater than low threshold.*/
|
|
adcCmpModeLessThanLow = 0x2, /*!< ADC build-in comparator is triggered when sample value less than low threshold.*/
|
|
adcCmpModeInInterval = 0x3, /*!< ADC build-in comparator is triggered when sample value in interval between low and high threshold.*/
|
|
adcCmpModeGreaterThanHigh = 0x5, /*!< ADC build-in comparator is triggered when sample value greater than high threshold.*/
|
|
adcCmpModeLessThanHigh = 0x6, /*!< ADC build-in comparator is triggered when sample value less than high threshold.*/
|
|
adcCmpModeOutOffInterval = 0x7, /*!< ADC build-in comparator is triggered when sample value out of interval between low and high threshold.*/
|
|
};
|
|
|
|
/*! @brief This enumeration contains the settings for all of the ADC interrupt configurations. */
|
|
enum _adc_interrupt
|
|
{
|
|
adcIntLastFifoDataRead = ADC_INT_EN_LAST_FIFO_DATA_READ_EN_MASK, /*!< Last FIFO Data Read Interrupt Enable.*/
|
|
adcIntConvertTimeoutChSw = ADC_INT_EN_SW_CH_COV_TO_INT_EN_MASK, /*!< Software Channel Conversion Time Out Interrupt Enable.*/
|
|
adcIntConvertTimeoutChD = ADC_INT_EN_CHD_COV_TO_INT_EN_MASK, /*!< Channel D Conversion Time Out Interrupt Enable.*/
|
|
adcIntConvertTimeoutChC = ADC_INT_EN_CHC_COV_TO_INT_EN_MASK, /*!< Channel C Conversion Time Out Interrupt Enable.*/
|
|
adcIntConvertTimeoutChB = ADC_INT_EN_CHB_COV_TO_INT_EN_MASK, /*!< Channel B Conversion Time Out Interrupt Enable.*/
|
|
adcIntConvertTimeoutChA = ADC_INT_EN_CHA_COV_TO_INT_EN_MASK, /*!< Channel A Conversion Time Out Interrupt Enable.*/
|
|
adcIntConvertChSw = ADC_INT_EN_SW_CH_COV_INT_EN_MASK, /*!< Software Channel Conversion Interrupt Enable.*/
|
|
adcIntConvertChD = ADC_INT_EN_CHD_COV_INT_EN_MASK, /*!< Channel D Conversion Interrupt Enable.*/
|
|
adcIntConvertChC = ADC_INT_EN_CHC_COV_INT_EN_MASK, /*!< Channel C Conversion Interrupt Enable.*/
|
|
adcIntConvertChB = ADC_INT_EN_CHB_COV_INT_EN_MASK, /*!< Channel B Conversion Interrupt Enable.*/
|
|
adcIntConvertChA = ADC_INT_EN_CHA_COV_INT_EN_MASK, /*!< Channel A Conversion Interrupt Enable.*/
|
|
adcIntFifoOverrun = ADC_INT_EN_FIFO_OVERRUN_INT_EN_MASK, /*!< FIFO overrun Interrupt Enable.*/
|
|
adcIntFifoUnderrun = ADC_INT_EN_FIFO_UNDERRUN_INT_EN_MASK, /*!< FIFO underrun Interrupt Enable.*/
|
|
adcIntDmaReachWatermark = ADC_INT_EN_DMA_REACH_WM_INT_EN_MASK, /*!< DMA Reach Watermark Level Interrupt Enable.*/
|
|
adcIntCmpChD = ADC_INT_EN_CHD_CMP_INT_EN_MASK, /*!< Channel D Compare Interrupt Enable.*/
|
|
adcIntCmpChC = ADC_INT_EN_CHC_CMP_INT_EN_MASK, /*!< Channel C Compare Interrupt Enable.*/
|
|
adcIntCmpChB = ADC_INT_EN_CHB_CMP_INT_EN_MASK, /*!< Channel B Compare Interrupt Enable.*/
|
|
adcIntCmpChA = ADC_INT_EN_CHA_CMP_INT_EN_MASK, /*!< Channel A Compare Interrupt Enable.*/
|
|
};
|
|
|
|
/*! @brief Flag for ADC interrupt/DMA status check or polling status. */
|
|
enum _adc_status_flag
|
|
{
|
|
adcStatusLastFifoDataRead = ADC_INT_STATUS_LAST_FIFO_DATA_READ_MASK, /*!< Last FIFO Data Read status flag.*/
|
|
adcStatusConvertTimeoutChSw = ADC_INT_STATUS_SW_CH_COV_TO_MASK, /*!< Software Channel Conversion Time Out status flag.*/
|
|
adcStatusConvertTimeoutChD = ADC_INT_STATUS_CHD_COV_TO_MASK, /*!< Channel D Conversion Time Out status flag.*/
|
|
adcStatusConvertTimeoutChC = ADC_INT_STATUS_CHC_COV_TO_MASK, /*!< Channel C Conversion Time Out status flag.*/
|
|
adcStatusConvertTimeoutChB = ADC_INT_STATUS_CHB_COV_TO_MASK, /*!< Channel B Conversion Time Out status flag.*/
|
|
adcStatusConvertTimeoutChA = ADC_INT_STATUS_CHA_COV_TO_MASK, /*!< Channel A Conversion Time Out status flag.*/
|
|
adcStatusConvertChSw = ADC_INT_STATUS_SW_CH_COV_MASK, /*!< Software Channel Conversion status flag.*/
|
|
adcStatusConvertChD = ADC_INT_STATUS_CHD_COV_MASK, /*!< Channel D Conversion status flag.*/
|
|
adcStatusConvertChC = ADC_INT_STATUS_CHC_COV_MASK, /*!< Channel C Conversion status flag.*/
|
|
adcStatusConvertChB = ADC_INT_STATUS_CHB_COV_MASK, /*!< Channel B Conversion status flag.*/
|
|
adcStatusConvertChA = ADC_INT_STATUS_CHA_COV_MASK, /*!< Channel A Conversion status flag.*/
|
|
adcStatusFifoOverrun = ADC_INT_STATUS_FIFO_OVERRUN_MASK, /*!< FIFO Overrun status flag.*/
|
|
adcStatusFifoUnderrun = ADC_INT_STATUS_FIFO_UNDERRUN_MASK, /*!< FIFO Underrun status flag.*/
|
|
adcStatusDmaReachWatermark = ADC_INT_STATUS_DMA_REACH_WM_MASK, /*!< DMA Reach Watermark Level status flag.*/
|
|
adcStatusCmpChD = ADC_INT_STATUS_CHD_CMP_MASK, /*!< Channel D Compare status flag.*/
|
|
adcStatusCmpChC = ADC_INT_STATUS_CHC_CMP_MASK, /*!< Channel C Compare status flag.*/
|
|
adcStatusCmpChB = ADC_INT_STATUS_CHB_CMP_MASK, /*!< Channel B Compare status flag.*/
|
|
adcStatusCmpChA = ADC_INT_STATUS_CHA_CMP_MASK, /*!< Channel A Compare status flag.*/
|
|
};
|
|
|
|
/*******************************************************************************
|
|
* API
|
|
******************************************************************************/
|
|
|
|
#if defined(__cplusplus)
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*!
|
|
* @name ADC Module Initialization and Configuration functions.
|
|
* @{
|
|
*/
|
|
|
|
/*!
|
|
* @brief Initialize ADC to reset state and initialize with initialization structure.
|
|
*
|
|
* @param base ADC base pointer.
|
|
* @param initConfig ADC initialization structure.
|
|
*/
|
|
void ADC_Init(ADC_Type* base, const adc_init_config_t* initConfig);
|
|
|
|
/*!
|
|
* @brief This function reset ADC module register content to its default value.
|
|
*
|
|
* @param base ADC base pointer.
|
|
*/
|
|
void ADC_Deinit(ADC_Type* base);
|
|
|
|
/*!
|
|
* @brief This function Enable ADC module build-in Level Shifter.
|
|
* For i.MX 7Dual, Level Shifter should always be enabled.
|
|
* User can disable Level Shifter to save power.
|
|
*
|
|
* @param base ADC base pointer.
|
|
*/
|
|
static inline void ADC_LevelShifterEnable(ADC_Type* base)
|
|
{
|
|
ADC_ADC_CFG_REG(base) |= ADC_ADC_CFG_ADC_EN_MASK;
|
|
}
|
|
|
|
/*!
|
|
* @brief This function Disable ADC module build-in Level Shifter
|
|
* to save power.
|
|
*
|
|
* @param base ADC base pointer.
|
|
*/
|
|
static inline void ADC_LevelShifterDisable(ADC_Type* base)
|
|
{
|
|
ADC_ADC_CFG_REG(base) &= ~ADC_ADC_CFG_ADC_EN_MASK;
|
|
}
|
|
|
|
/*!
|
|
* @brief This function is used to set ADC module sample rate.
|
|
*
|
|
* @param base ADC base pointer.
|
|
* @param sampleRate Desired ADC sample rate.
|
|
*/
|
|
void ADC_SetSampleRate(ADC_Type* base, uint32_t sampleRate);
|
|
|
|
/*@}*/
|
|
|
|
/*!
|
|
* @name ADC Low power control functions.
|
|
* @{
|
|
*/
|
|
|
|
/*!
|
|
* @brief This function is used to stop all digital part power.
|
|
*
|
|
* @param base ADC base pointer.
|
|
* @param clockDown Stop all ADC digital part or not.
|
|
* - true: Clock down.
|
|
* - false: Clock running.
|
|
*/
|
|
void ADC_SetClockDownCmd(ADC_Type* base, bool clockDown);
|
|
|
|
/*!
|
|
* @brief This function is used to power down ADC analogue core.
|
|
* Before entering into stop-mode, power down ADC analogue core first.
|
|
* @param base ADC base pointer.
|
|
* @param powerDown Power down ADC analogue core or not.
|
|
* - true: Power down the ADC analogue core.
|
|
* - false: Do not power down the ADC analogue core.
|
|
*/
|
|
void ADC_SetPowerDownCmd(ADC_Type* base, bool powerDown);
|
|
|
|
/*@}*/
|
|
|
|
/*!
|
|
* @name ADC Convert Channel Initialization and Configuration functions.
|
|
* @{
|
|
*/
|
|
|
|
/*!
|
|
* @brief Initialize ADC Logic channel with initialization structure.
|
|
*
|
|
* @param base ADC base pointer.
|
|
* @param logicCh ADC module logic channel selection (see @ref _adc_logic_ch_selection enumeration).
|
|
* @param chInitConfig ADC logic channel initialization structure.
|
|
*/
|
|
void ADC_LogicChInit(ADC_Type* base, uint8_t logicCh, const adc_logic_ch_init_config_t* chInitConfig);
|
|
|
|
/*!
|
|
* @brief Reset target ADC logic channel registers to default value.
|
|
*
|
|
* @param base ADC base pointer.
|
|
* @param logicCh ADC module logic channel selection (see @ref _adc_logic_ch_selection enumeration).
|
|
*/
|
|
void ADC_LogicChDeinit(ADC_Type* base, uint8_t logicCh);
|
|
|
|
/*!
|
|
* @brief Select input channel for target logic channel.
|
|
*
|
|
* @param base ADC base pointer.
|
|
* @param logicCh ADC module logic channel selection (see @ref _adc_logic_ch_selection enumeration).
|
|
* @param inputCh Input channel selection for target logic channel(vary from 0 to 15).
|
|
*/
|
|
void ADC_SelectInputCh(ADC_Type* base, uint8_t logicCh, uint8_t inputCh);
|
|
|
|
/*!
|
|
* @brief Set ADC conversion rate of target logic channel.
|
|
*
|
|
* @param base ADC base pointer.
|
|
* @param logicCh ADC module logic channel selection (see @ref _adc_logic_ch_selection enumeration).
|
|
* @param convertRate ADC conversion rate in Hz.
|
|
*/
|
|
void ADC_SetConvertRate(ADC_Type* base, uint8_t logicCh, uint32_t convertRate);
|
|
|
|
/*!
|
|
* @brief Set work state of hardware average feature of target logic channel.
|
|
*
|
|
* @param base ADC base pointer.
|
|
* @param logicCh ADC module logic channel selection (see @ref _adc_logic_ch_selection enumeration).
|
|
* @param enable Enable/Disable hardware average
|
|
* - true: Enable hardware average of given logic channel.
|
|
* - false: Disable hardware average of given logic channel.
|
|
*/
|
|
void ADC_SetAverageCmd(ADC_Type* base, uint8_t logicCh, bool enable);
|
|
|
|
/*!
|
|
* @brief Set hardware average number of target logic channel.
|
|
*
|
|
* @param base ADC base pointer.
|
|
* @param logicCh ADC module logic channel selection (see @ref _adc_logic_ch_selection enumeration).
|
|
* @param avgNum hardware average number(should select from @ref _adc_average_number enumeration).
|
|
*/
|
|
void ADC_SetAverageNum(ADC_Type* base, uint8_t logicCh, uint8_t avgNum);
|
|
|
|
/*@}*/
|
|
|
|
/*!
|
|
* @name ADC Conversion Control functions.
|
|
* @{
|
|
*/
|
|
|
|
/*!
|
|
* @brief Set continuous convert work mode of target logic channel.
|
|
*
|
|
* @param base ADC base pointer.
|
|
* @param logicCh ADC module logic channel selection (see @ref _adc_logic_ch_selection enumeration).
|
|
* @param enable Enable/Disable continuous convertion.
|
|
* - true: Enable continuous convertion.
|
|
* - false: Disable continuous convertion.
|
|
*/
|
|
void ADC_SetConvertCmd(ADC_Type* base, uint8_t logicCh, bool enable);
|
|
|
|
/*!
|
|
* @brief Trigger single time convert on target logic channel.
|
|
*
|
|
* @param base ADC base pointer.
|
|
* @param logicCh ADC module logic channel selection (see @ref _adc_logic_ch_selection enumeration).
|
|
*/
|
|
void ADC_TriggerSingleConvert(ADC_Type* base, uint8_t logicCh);
|
|
|
|
/*!
|
|
* @brief Stop current convert on target logic channel.
|
|
* For logic channel A ~ D, current conversion stops immediately.
|
|
* For Software channel, this function is waited until current conversion is finished.
|
|
* @param base ADC base pointer.
|
|
* @param logicCh ADC module logic channel selection (see @ref _adc_logic_ch_selection enumeration).
|
|
*/
|
|
void ADC_StopConvert(ADC_Type* base, uint8_t logicCh);
|
|
|
|
/*!
|
|
* @brief Get 12-bit length right aligned convert result.
|
|
*
|
|
* @param base ADC base pointer.
|
|
* @param logicCh ADC module logic channel selection (see @ref _adc_logic_ch_selection enumeration).
|
|
* @return convert result on target logic channel.
|
|
*/
|
|
uint16_t ADC_GetConvertResult(ADC_Type* base, uint8_t logicCh);
|
|
|
|
/*@}*/
|
|
|
|
/*!
|
|
* @name ADC Comparer Control functions.
|
|
* @{
|
|
*/
|
|
|
|
/*!
|
|
* @brief Set the work mode of ADC module build-in comparer on target logic channel.
|
|
*
|
|
* @param base ADC base pointer.
|
|
* @param logicCh ADC module logic channel selection (see @ref _adc_logic_ch_selection enumeration).
|
|
* @param cmpMode Comparer work mode selected from @ref _adc_compare_mode enumeration.
|
|
*/
|
|
void ADC_SetCmpMode(ADC_Type* base, uint8_t logicCh, uint8_t cmpMode);
|
|
|
|
/*!
|
|
* @brief Set ADC module build-in comparer high threshold on target logic channel.
|
|
*
|
|
* @param base ADC base pointer.
|
|
* @param logicCh ADC module logic channel selection (see @ref _adc_logic_ch_selection enumeration).
|
|
* @param threshold Comparer threshold in 12-bit unsigned int formate.
|
|
*/
|
|
void ADC_SetCmpHighThres(ADC_Type* base, uint8_t logicCh, uint16_t threshold);
|
|
|
|
/*!
|
|
* @brief Set ADC module build-in comparer low threshold on target logic channel.
|
|
*
|
|
* @param base ADC base pointer.
|
|
* @param logicCh ADC module logic channel selection (see @ref _adc_logic_ch_selection enumeration).
|
|
* @param threshold Comparer threshold in 12-bit unsigned int formate.
|
|
*/
|
|
void ADC_SetCmpLowThres(ADC_Type* base, uint8_t logicCh, uint16_t threshold);
|
|
|
|
/*!
|
|
* @brief Set the working mode of ADC module auto disable feature on target logic channel.
|
|
* This feature can disable continuous conversion when CMP condition matched.
|
|
*
|
|
* @param base ADC base pointer.
|
|
* @param logicCh ADC module logic channel selection (see @ref _adc_logic_ch_selection enumeration).
|
|
* @param enable Enable/Disable Auto Disable feature.
|
|
* - true: Enable Auto Disable feature.
|
|
* - false: Disable Auto Disable feature.
|
|
*/
|
|
void ADC_SetAutoDisableCmd(ADC_Type* base, uint8_t logicCh, bool enable);
|
|
|
|
/*@}*/
|
|
|
|
/*!
|
|
* @name Interrupt and Flag control functions.
|
|
* @{
|
|
*/
|
|
|
|
/*!
|
|
* @brief Enables or disables ADC interrupt requests.
|
|
*
|
|
* @param base ADC base pointer.
|
|
* @param intSource ADC interrupt sources to configuration.
|
|
* @param enable Enable/Disable given ADC interrupt.
|
|
* - true: Enable given ADC interrupt.
|
|
* - false: Disable given ADC interrupt.
|
|
*/
|
|
void ADC_SetIntCmd(ADC_Type* base, uint32_t intSource, bool enable);
|
|
|
|
/*!
|
|
* @brief Enables or disables ADC interrupt flag when interrupt condition met.
|
|
*
|
|
* @param base ADC base pointer.
|
|
* @param intSignal ADC interrupt signals to configuration (see @ref _adc_interrupt enumeration).
|
|
* @param enable Enable/Disable given ADC interrupt flags.
|
|
* - true: Enable given ADC interrupt flags.
|
|
* - false: Disable given ADC interrupt flags.
|
|
*/
|
|
void ADC_SetIntSigCmd(ADC_Type* base, uint32_t intSignal, bool enable);
|
|
|
|
/*!
|
|
* @brief Gets the ADC status flag state.
|
|
*
|
|
* @param base ADC base pointer.
|
|
* @param flags ADC status flag mask defined in @ref _adc_status_flag enumeration.
|
|
* @return ADC status, each bit represents one status flag
|
|
*/
|
|
static inline uint32_t ADC_GetStatusFlag(ADC_Type* base, uint32_t flags)
|
|
{
|
|
return (ADC_INT_STATUS_REG(base) & flags);
|
|
}
|
|
|
|
/*!
|
|
* @brief Clear one or more ADC status flag state.
|
|
*
|
|
* @param base ADC base pointer.
|
|
* @param flags ADC status flag mask defined in @ref _adc_status_flag enumeration.
|
|
*/
|
|
static inline void ADC_ClearStatusFlag(ADC_Type* base, uint32_t flags)
|
|
{
|
|
ADC_INT_STATUS_REG(base) &= ~flags;
|
|
}
|
|
|
|
/*@}*/
|
|
|
|
/*!
|
|
* @name DMA & FIFO control functions.
|
|
* @{
|
|
*/
|
|
|
|
/*!
|
|
* @brief Set the reset state of ADC internal DMA part.
|
|
*
|
|
* @param base ADC base pointer.
|
|
* @param active Reset DMA & DMA FIFO or not.
|
|
* - true: Reset the DMA and DMA FIFO return to its reset value.
|
|
* - false: Do not reset DMA and DMA FIFO.
|
|
*/
|
|
void ADC_SetDmaReset(ADC_Type* base, bool active);
|
|
|
|
/*!
|
|
* @brief Set the work mode of ADC DMA part.
|
|
*
|
|
* @param base ADC base pointer.
|
|
* @param enable Enable/Disable ADC DMA part.
|
|
* - true: Enable DMA, the data in DMA FIFO should move by SDMA.
|
|
* - false: Disable DMA, the data in DMA FIFO can only move by CPU.
|
|
*/
|
|
void ADC_SetDmaCmd(ADC_Type* base, bool enable);
|
|
|
|
/*!
|
|
* @brief Set the work mode of ADC DMA FIFO part.
|
|
*
|
|
* @param base ADC base pointer.
|
|
* @param enable Enable/Disable DMA FIFO.
|
|
* - true: Enable DMA FIFO.
|
|
* - false: Disable DMA FIFO.
|
|
*/
|
|
void ADC_SetDmaFifoCmd(ADC_Type* base, bool enable);
|
|
|
|
/*!
|
|
* @brief Select the logic channel that uses the DMA transfer.
|
|
*
|
|
* @param base ADC base pointer.
|
|
* @param logicCh ADC module logic channel selection (see @ref _adc_logic_ch_selection enumeration).
|
|
*/
|
|
static inline void ADC_SetDmaCh(ADC_Type* base, uint32_t logicCh)
|
|
{
|
|
assert(logicCh <= adcLogicChD);
|
|
ADC_DMA_FIFO_REG(base) = (ADC_DMA_FIFO_REG(base) & ~ADC_DMA_FIFO_DMA_CH_SEL_MASK) | \
|
|
ADC_DMA_FIFO_DMA_CH_SEL(logicCh);
|
|
}
|
|
|
|
/*!
|
|
* @brief Set the DMA request trigger watermark.
|
|
*
|
|
* @param base ADC base pointer.
|
|
* @param watermark DMA request trigger watermark.
|
|
*/
|
|
static inline void ADC_SetDmaWatermark(ADC_Type* base, uint32_t watermark)
|
|
{
|
|
assert(watermark <= 0x1FF);
|
|
ADC_DMA_FIFO_REG(base) = (ADC_DMA_FIFO_REG(base) & ~ADC_DMA_FIFO_DMA_WM_LVL_MASK) | \
|
|
ADC_DMA_FIFO_DMA_WM_LVL(watermark);
|
|
}
|
|
|
|
/*!
|
|
* @brief Get the convert result from DMA FIFO.
|
|
* Data position:
|
|
* DMA_FIFO_DATA1(27~16bits)
|
|
* DMA_FIFO_DATA0(11~0bits)
|
|
*
|
|
* @param base ADC base pointer.
|
|
* @return Get 2 ADC transfer result from DMA FIFO.
|
|
*/
|
|
static inline uint32_t ADC_GetFifoData(ADC_Type* base)
|
|
{
|
|
return ADC_DMA_FIFO_DAT_REG(base);
|
|
}
|
|
|
|
/*!
|
|
* @brief Get the DMA FIFO full status
|
|
*
|
|
* @param base ADC base pointer.
|
|
* @retval true: DMA FIFO full.
|
|
* @retval false: DMA FIFO not full.
|
|
*/
|
|
static inline bool ADC_IsFifoFull(ADC_Type* base)
|
|
{
|
|
return (bool)(ADC_FIFO_STATUS_REG(base) & ADC_FIFO_STATUS_FIFO_FULL_MASK);
|
|
}
|
|
|
|
/*!
|
|
* @brief Get the DMA FIFO empty status
|
|
*
|
|
* @param base ADC base pointer.
|
|
* @retval true: DMA FIFO is empty.
|
|
* @retval false: DMA FIFO is not empty.
|
|
*/
|
|
static inline bool ADC_IsFifoEmpty(ADC_Type* base)
|
|
{
|
|
return (bool)(ADC_FIFO_STATUS_REG(base) & ADC_FIFO_STATUS_FIFO_EMPTY_MASK);
|
|
}
|
|
|
|
/*!
|
|
* @brief Get the entries number in DMA FIFO.
|
|
*
|
|
* @param base ADC base pointer.
|
|
* @return The numbers of data in DMA FIFO.
|
|
*/
|
|
static inline uint8_t ADC_GetFifoEntries(ADC_Type* base)
|
|
{
|
|
return ADC_FIFO_STATUS_REG(base) & ADC_FIFO_STATUS_FIFO_ENTRIES_MASK;
|
|
}
|
|
|
|
/*@}*/
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
/*! @}*/
|
|
|
|
#endif /* __ADC_IMX7D_H__ */
|
|
/*******************************************************************************
|
|
* EOF
|
|
******************************************************************************/
|