The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Dependents:   hello SerialTestv11 SerialTestv12 Sierpinski ... more

mbed 2

This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.

Committer:
AnnaBridge
Date:
Wed Feb 20 20:53:29 2019 +0000
Revision:
172:65be27845400
Parent:
171:3a7713b1edbc
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 161:aa5281ff4a02 1 /*
AnnaBridge 170:e95d10626187 2 * The Clear BSD License
AnnaBridge 161:aa5281ff4a02 3 * Copyright (c) 2016, Freescale Semiconductor, Inc.
AnnaBridge 161:aa5281ff4a02 4 * Copyright 2016-2017 NXP
AnnaBridge 170:e95d10626187 5 * All rights reserved.
AnnaBridge 170:e95d10626187 6 *
AnnaBridge 161:aa5281ff4a02 7 * Redistribution and use in source and binary forms, with or without modification,
AnnaBridge 170:e95d10626187 8 * are permitted (subject to the limitations in the disclaimer below) provided
AnnaBridge 170:e95d10626187 9 * that the following conditions are met:
AnnaBridge 161:aa5281ff4a02 10 *
AnnaBridge 161:aa5281ff4a02 11 * o Redistributions of source code must retain the above copyright notice, this list
AnnaBridge 161:aa5281ff4a02 12 * of conditions and the following disclaimer.
AnnaBridge 161:aa5281ff4a02 13 *
AnnaBridge 161:aa5281ff4a02 14 * o Redistributions in binary form must reproduce the above copyright notice, this
AnnaBridge 161:aa5281ff4a02 15 * list of conditions and the following disclaimer in the documentation and/or
AnnaBridge 161:aa5281ff4a02 16 * other materials provided with the distribution.
AnnaBridge 161:aa5281ff4a02 17 *
AnnaBridge 161:aa5281ff4a02 18 * o Neither the name of the copyright holder nor the names of its
AnnaBridge 161:aa5281ff4a02 19 * contributors may be used to endorse or promote products derived from this
AnnaBridge 161:aa5281ff4a02 20 * software without specific prior written permission.
AnnaBridge 161:aa5281ff4a02 21 *
AnnaBridge 170:e95d10626187 22 * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE.
AnnaBridge 161:aa5281ff4a02 23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
AnnaBridge 161:aa5281ff4a02 24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
AnnaBridge 161:aa5281ff4a02 25 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
AnnaBridge 161:aa5281ff4a02 26 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
AnnaBridge 161:aa5281ff4a02 27 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
AnnaBridge 161:aa5281ff4a02 28 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
AnnaBridge 161:aa5281ff4a02 29 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
AnnaBridge 161:aa5281ff4a02 30 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
AnnaBridge 161:aa5281ff4a02 31 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
AnnaBridge 161:aa5281ff4a02 32 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
AnnaBridge 161:aa5281ff4a02 33 */
AnnaBridge 161:aa5281ff4a02 34
AnnaBridge 161:aa5281ff4a02 35 #ifndef _FSL_ADC_H_
AnnaBridge 161:aa5281ff4a02 36 #define _FSL_ADC_H_
AnnaBridge 161:aa5281ff4a02 37
AnnaBridge 161:aa5281ff4a02 38 #include "fsl_common.h"
AnnaBridge 161:aa5281ff4a02 39
AnnaBridge 161:aa5281ff4a02 40 /*!
AnnaBridge 161:aa5281ff4a02 41 * @addtogroup adc_12b1msps_sar
AnnaBridge 161:aa5281ff4a02 42 * @{
AnnaBridge 161:aa5281ff4a02 43 */
AnnaBridge 161:aa5281ff4a02 44
AnnaBridge 161:aa5281ff4a02 45 /*******************************************************************************
AnnaBridge 161:aa5281ff4a02 46 * Definitions
AnnaBridge 161:aa5281ff4a02 47 ******************************************************************************/
AnnaBridge 161:aa5281ff4a02 48 /*! @brief ADC driver version */
AnnaBridge 161:aa5281ff4a02 49 #define FSL_ADC_DRIVER_VERSION (MAKE_VERSION(2, 0, 0)) /*!< Version 2.0.0. */
AnnaBridge 161:aa5281ff4a02 50
AnnaBridge 161:aa5281ff4a02 51 /*!
AnnaBridge 161:aa5281ff4a02 52 * @brief Converter's status flags.
AnnaBridge 161:aa5281ff4a02 53 */
AnnaBridge 161:aa5281ff4a02 54 typedef enum _adc_status_flags
AnnaBridge 161:aa5281ff4a02 55 {
AnnaBridge 161:aa5281ff4a02 56 kADC_ConversionActiveFlag = ADC_GS_ADACT_MASK, /*!< Conversion is active,not support w1c. */
AnnaBridge 161:aa5281ff4a02 57 kADC_CalibrationFailedFlag = ADC_GS_CALF_MASK, /*!< Calibration is failed,support w1c. */
AnnaBridge 161:aa5281ff4a02 58 kADC_AsynchronousWakeupInterruptFlag =
AnnaBridge 161:aa5281ff4a02 59 ADC_GS_AWKST_MASK, /*!< Asynchronous wakeup interrupt occured, support w1c. */
AnnaBridge 161:aa5281ff4a02 60 } adc_status_flags_t;
AnnaBridge 161:aa5281ff4a02 61
AnnaBridge 161:aa5281ff4a02 62 /*!
AnnaBridge 161:aa5281ff4a02 63 * @brief Reference voltage source.
AnnaBridge 161:aa5281ff4a02 64 */
AnnaBridge 161:aa5281ff4a02 65 typedef enum _adc_reference_voltage_source
AnnaBridge 161:aa5281ff4a02 66 {
AnnaBridge 161:aa5281ff4a02 67 kADC_ReferenceVoltageSourceAlt0 = 0U, /*!< For external pins pair of VrefH and VrefL. */
AnnaBridge 161:aa5281ff4a02 68 } adc_reference_voltage_source_t;
AnnaBridge 161:aa5281ff4a02 69
AnnaBridge 161:aa5281ff4a02 70 /*!
AnnaBridge 161:aa5281ff4a02 71 * @brief Sample time duration.
AnnaBridge 161:aa5281ff4a02 72 */
AnnaBridge 161:aa5281ff4a02 73 typedef enum _adc_sample_period_mode
AnnaBridge 161:aa5281ff4a02 74 {
AnnaBridge 161:aa5281ff4a02 75 /* This group of enumeration is for internal use which is related to register setting. */
AnnaBridge 161:aa5281ff4a02 76 kADC_SamplePeriod2or12Clocks = 0U, /*!< Long sample 12 clocks or short sample 2 clocks. */
AnnaBridge 161:aa5281ff4a02 77 kADC_SamplePeriod4or16Clocks = 1U, /*!< Long sample 16 clocks or short sample 4 clocks. */
AnnaBridge 161:aa5281ff4a02 78 kADC_SamplePeriod6or20Clocks = 2U, /*!< Long sample 20 clocks or short sample 6 clocks. */
AnnaBridge 161:aa5281ff4a02 79 kADC_SamplePeriod8or24Clocks = 3U, /*!< Long sample 24 clocks or short sample 8 clocks. */
AnnaBridge 161:aa5281ff4a02 80 /* This group of enumeration is for a public user. */
AnnaBridge 161:aa5281ff4a02 81 /* For long sample mode. */
AnnaBridge 161:aa5281ff4a02 82 kADC_SamplePeriodLong12Clcoks = kADC_SamplePeriod2or12Clocks, /*!< Long sample 12 clocks. */
AnnaBridge 161:aa5281ff4a02 83 kADC_SamplePeriodLong16Clcoks = kADC_SamplePeriod4or16Clocks, /*!< Long sample 16 clocks. */
AnnaBridge 161:aa5281ff4a02 84 kADC_SamplePeriodLong20Clcoks = kADC_SamplePeriod6or20Clocks, /*!< Long sample 20 clocks. */
AnnaBridge 161:aa5281ff4a02 85 kADC_SamplePeriodLong24Clcoks = kADC_SamplePeriod8or24Clocks, /*!< Long sample 24 clocks. */
AnnaBridge 161:aa5281ff4a02 86 /* For short sample mode. */
AnnaBridge 161:aa5281ff4a02 87 kADC_SamplePeriodShort2Clocks = kADC_SamplePeriod2or12Clocks, /*!< Short sample 2 clocks. */
AnnaBridge 161:aa5281ff4a02 88 kADC_SamplePeriodShort4Clocks = kADC_SamplePeriod4or16Clocks, /*!< Short sample 4 clocks. */
AnnaBridge 161:aa5281ff4a02 89 kADC_SamplePeriodShort6Clocks = kADC_SamplePeriod6or20Clocks, /*!< Short sample 6 clocks. */
AnnaBridge 161:aa5281ff4a02 90 kADC_SamplePeriodShort8Clocks = kADC_SamplePeriod8or24Clocks, /*!< Short sample 8 clocks. */
AnnaBridge 161:aa5281ff4a02 91 } adc_sample_period_mode_t;
AnnaBridge 161:aa5281ff4a02 92
AnnaBridge 161:aa5281ff4a02 93 /*!
AnnaBridge 161:aa5281ff4a02 94 * @brief Clock source.
AnnaBridge 161:aa5281ff4a02 95 */
AnnaBridge 161:aa5281ff4a02 96 typedef enum _adc_clock_source
AnnaBridge 161:aa5281ff4a02 97 {
AnnaBridge 161:aa5281ff4a02 98 kADC_ClockSourceIPG = 0U, /*!< Select IPG clock to generate ADCK. */
AnnaBridge 161:aa5281ff4a02 99 kADC_ClockSourceIPGDiv2 = 1U, /*!< Select IPG clock divided by 2 to generate ADCK. */
AnnaBridge 161:aa5281ff4a02 100 #if !(defined(FSL_FEATURE_ADC_SUPPORT_ALTCLK_REMOVE) && FSL_FEATURE_ADC_SUPPORT_ALTCLK_REMOVE)
AnnaBridge 161:aa5281ff4a02 101 kADC_ClockSourceALT = 2U, /*!< Select alternate clock to generate ADCK. */
AnnaBridge 161:aa5281ff4a02 102 #endif
AnnaBridge 161:aa5281ff4a02 103 kADC_ClockSourceAD = 3U, /*!< Select Asynchronous clock to generate ADCK. */
AnnaBridge 161:aa5281ff4a02 104 } adc_clock_source_t;
AnnaBridge 161:aa5281ff4a02 105
AnnaBridge 161:aa5281ff4a02 106 /*!
AnnaBridge 161:aa5281ff4a02 107 * @brief Clock divider for the converter.
AnnaBridge 161:aa5281ff4a02 108 */
AnnaBridge 161:aa5281ff4a02 109 typedef enum _adc_clock_drvier
AnnaBridge 161:aa5281ff4a02 110 {
AnnaBridge 161:aa5281ff4a02 111 kADC_ClockDriver1 = 0U, /*!< For divider 1 from the input clock to the module. */
AnnaBridge 161:aa5281ff4a02 112 kADC_ClockDriver2 = 1U, /*!< For divider 2 from the input clock to the module. */
AnnaBridge 161:aa5281ff4a02 113 kADC_ClockDriver4 = 2U, /*!< For divider 4 from the input clock to the module. */
AnnaBridge 161:aa5281ff4a02 114 kADC_ClockDriver8 = 3U, /*!< For divider 8 from the input clock to the module. */
AnnaBridge 161:aa5281ff4a02 115 } adc_clock_driver_t;
AnnaBridge 161:aa5281ff4a02 116
AnnaBridge 161:aa5281ff4a02 117 /*!
AnnaBridge 161:aa5281ff4a02 118 * @brief Converter's resolution.
AnnaBridge 161:aa5281ff4a02 119 */
AnnaBridge 161:aa5281ff4a02 120 typedef enum _adc_resolution
AnnaBridge 161:aa5281ff4a02 121 {
AnnaBridge 161:aa5281ff4a02 122 kADC_Resolution8Bit = 0U, /*!< Single End 8-bit resolution. */
AnnaBridge 161:aa5281ff4a02 123 kADC_Resolution10Bit = 1U, /*!< Single End 10-bit resolution. */
AnnaBridge 161:aa5281ff4a02 124 kADC_Resolution12Bit = 2U, /*!< Single End 12-bit resolution. */
AnnaBridge 161:aa5281ff4a02 125 } adc_resolution_t;
AnnaBridge 161:aa5281ff4a02 126
AnnaBridge 161:aa5281ff4a02 127 /*!
AnnaBridge 161:aa5281ff4a02 128 * @brief Converter hardware compare mode.
AnnaBridge 161:aa5281ff4a02 129 */
AnnaBridge 161:aa5281ff4a02 130 typedef enum _adc_hardware_compare_mode
AnnaBridge 161:aa5281ff4a02 131 {
AnnaBridge 161:aa5281ff4a02 132 kADC_HardwareCompareMode0 = 0U, /*!< Compare true if the result is less than the value1. */
AnnaBridge 161:aa5281ff4a02 133 kADC_HardwareCompareMode1 = 1U, /*!< Compare true if the result is greater than or equal to value1. */
AnnaBridge 161:aa5281ff4a02 134 kADC_HardwareCompareMode2 = 2U, /*!< Value1 <= Value2, compare true if the result is less than value1 Or
AnnaBridge 161:aa5281ff4a02 135 the result is Greater than value2.
AnnaBridge 161:aa5281ff4a02 136 Value1 > Value2, compare true if the result is less than value1 And the
AnnaBridge 161:aa5281ff4a02 137 result is greater than value2*/
AnnaBridge 161:aa5281ff4a02 138 kADC_HardwareCompareMode3 = 3U, /*!< Value1 <= Value2, compare true if the result is greater than or equal
AnnaBridge 161:aa5281ff4a02 139 to value1 And the result is less than or equal to value2.
AnnaBridge 161:aa5281ff4a02 140 Value1 > Value2, compare true if the result is greater than or equal to
AnnaBridge 161:aa5281ff4a02 141 value1 Or the result is less than or equal to value2. */
AnnaBridge 161:aa5281ff4a02 142 } adc_hardware_compare_mode_t;
AnnaBridge 161:aa5281ff4a02 143
AnnaBridge 161:aa5281ff4a02 144 /*!
AnnaBridge 161:aa5281ff4a02 145 * @brief Converter hardware average mode.
AnnaBridge 161:aa5281ff4a02 146 */
AnnaBridge 161:aa5281ff4a02 147 typedef enum _adc_hardware_average_mode
AnnaBridge 161:aa5281ff4a02 148 {
AnnaBridge 161:aa5281ff4a02 149 kADC_HardwareAverageCount4 = 0U, /*!< For hardware average with 4 samples. */
AnnaBridge 161:aa5281ff4a02 150 kADC_HardwareAverageCount8 = 1U, /*!< For hardware average with 8 samples. */
AnnaBridge 161:aa5281ff4a02 151 kADC_HardwareAverageCount16 = 2U, /*!< For hardware average with 16 samples. */
AnnaBridge 161:aa5281ff4a02 152 kADC_HardwareAverageCount32 = 3U, /*!< For hardware average with 32 samples. */
AnnaBridge 161:aa5281ff4a02 153 kADC_HardwareAverageDiasable = 4U, /*!< Disable the hardware average function. */
AnnaBridge 161:aa5281ff4a02 154 } adc_hardware_average_mode_t;
AnnaBridge 161:aa5281ff4a02 155
AnnaBridge 161:aa5281ff4a02 156 /*!
AnnaBridge 161:aa5281ff4a02 157 * @brief Converter configuration.
AnnaBridge 161:aa5281ff4a02 158 */
AnnaBridge 161:aa5281ff4a02 159 typedef struct _adc_config
AnnaBridge 161:aa5281ff4a02 160 {
AnnaBridge 161:aa5281ff4a02 161 bool enableOverWrite; /*!< Enable the overwriting. */
AnnaBridge 161:aa5281ff4a02 162 bool enableContinuousConversion; /*!< Enable the continuous conversion mode. */
AnnaBridge 161:aa5281ff4a02 163 bool enableHighSpeed; /*!< Enable the high-speed mode. */
AnnaBridge 161:aa5281ff4a02 164 bool enableLowPower; /*!< Enable the low power mode. */
AnnaBridge 161:aa5281ff4a02 165 bool enableLongSample; /*!< Enable the long sample mode. */
AnnaBridge 161:aa5281ff4a02 166 bool enableAsynchronousClockOutput; /*!< Enable the asynchronous clock output. */
AnnaBridge 161:aa5281ff4a02 167 adc_reference_voltage_source_t referenceVoltageSource; /*!< Select the reference voltage source. */
AnnaBridge 161:aa5281ff4a02 168 adc_sample_period_mode_t samplePeriodMode; /*!< Select the sample period in long sample mode or short mode. */
AnnaBridge 161:aa5281ff4a02 169 adc_clock_source_t clockSource; /*!< Select the input clock source to generate the internal clock ADCK. */
AnnaBridge 161:aa5281ff4a02 170 adc_clock_driver_t clockDriver; /*!< Select the divide ratio used by the ADC to generate the internal clock ADCK. */
AnnaBridge 161:aa5281ff4a02 171 adc_resolution_t resolution; /*!< Select the ADC resolution mode. */
AnnaBridge 161:aa5281ff4a02 172 } adc_config_t;
AnnaBridge 161:aa5281ff4a02 173
AnnaBridge 161:aa5281ff4a02 174 /*!
AnnaBridge 161:aa5281ff4a02 175 * @brief Converter Offset configuration.
AnnaBridge 161:aa5281ff4a02 176 */
AnnaBridge 161:aa5281ff4a02 177 typedef struct _adc_offest_config
AnnaBridge 161:aa5281ff4a02 178 {
AnnaBridge 161:aa5281ff4a02 179 bool enableSigned; /*!< if false,The offset value is added with the raw result.
AnnaBridge 161:aa5281ff4a02 180 if true,The offset value is subtracted from the raw converted value. */
AnnaBridge 161:aa5281ff4a02 181 uint32_t offsetValue; /*!< User configurable offset value(0-4095). */
AnnaBridge 161:aa5281ff4a02 182 } adc_offest_config_t;
AnnaBridge 161:aa5281ff4a02 183
AnnaBridge 161:aa5281ff4a02 184 /*!
AnnaBridge 161:aa5281ff4a02 185 * @brief ADC hardware compare configuration.
AnnaBridge 161:aa5281ff4a02 186 *
AnnaBridge 161:aa5281ff4a02 187 * In kADC_HardwareCompareMode0, compare true if the result is less than the value1.
AnnaBridge 161:aa5281ff4a02 188 * In kADC_HardwareCompareMode1, compare true if the result is greater than or equal to value1.
AnnaBridge 161:aa5281ff4a02 189 * In kADC_HardwareCompareMode2, Value1 <= Value2, compare true if the result is less than value1 Or the result is
AnnaBridge 161:aa5281ff4a02 190 * Greater than value2.
AnnaBridge 161:aa5281ff4a02 191 * Value1 > Value2, compare true if the result is less than value1 And the result is
AnnaBridge 161:aa5281ff4a02 192 * Greater than value2.
AnnaBridge 161:aa5281ff4a02 193 * In kADC_HardwareCompareMode3, Value1 <= Value2, compare true if the result is greater than or equal to value1 And the
AnnaBridge 161:aa5281ff4a02 194 * result is less than or equal to value2.
AnnaBridge 161:aa5281ff4a02 195 * Value1 > Value2, compare true if the result is greater than or equal to value1 Or the
AnnaBridge 161:aa5281ff4a02 196 * result is less than or equal to value2.
AnnaBridge 161:aa5281ff4a02 197 */
AnnaBridge 161:aa5281ff4a02 198 typedef struct _adc_hardware_compare_config
AnnaBridge 161:aa5281ff4a02 199 {
AnnaBridge 161:aa5281ff4a02 200 adc_hardware_compare_mode_t hardwareCompareMode; /*!< Select the hardware compare mode.
AnnaBridge 161:aa5281ff4a02 201 See "adc_hardware_compare_mode_t". */
AnnaBridge 161:aa5281ff4a02 202 uint16_t value1; /*!< Setting value1(0-4095) for hardware compare mode. */
AnnaBridge 161:aa5281ff4a02 203 uint16_t value2; /*!< Setting value2(0-4095) for hardware compare mode. */
AnnaBridge 161:aa5281ff4a02 204 } adc_hardware_compare_config_t;
AnnaBridge 161:aa5281ff4a02 205
AnnaBridge 161:aa5281ff4a02 206 /*!
AnnaBridge 161:aa5281ff4a02 207 * @brief ADC channel conversion configuration.
AnnaBridge 161:aa5281ff4a02 208 */
AnnaBridge 161:aa5281ff4a02 209 typedef struct _adc_channel_config
AnnaBridge 161:aa5281ff4a02 210 {
AnnaBridge 161:aa5281ff4a02 211 uint32_t channelNumber; /*!< Setting the conversion channel number. The available range is 0-31.
AnnaBridge 161:aa5281ff4a02 212 See channel connection information for each chip in Reference
AnnaBridge 161:aa5281ff4a02 213 Manual document. */
AnnaBridge 161:aa5281ff4a02 214 bool enableInterruptOnConversionCompleted; /*!< Generate an interrupt request once the conversion is completed. */
AnnaBridge 161:aa5281ff4a02 215 } adc_channel_config_t;
AnnaBridge 161:aa5281ff4a02 216 /*******************************************************************************
AnnaBridge 161:aa5281ff4a02 217 * API
AnnaBridge 161:aa5281ff4a02 218 ******************************************************************************/
AnnaBridge 161:aa5281ff4a02 219 #if defined(__cplusplus)
AnnaBridge 161:aa5281ff4a02 220 extern "C" {
AnnaBridge 161:aa5281ff4a02 221 #endif
AnnaBridge 161:aa5281ff4a02 222
AnnaBridge 161:aa5281ff4a02 223 /*!
AnnaBridge 161:aa5281ff4a02 224 * @name Initialization
AnnaBridge 161:aa5281ff4a02 225 * @{
AnnaBridge 161:aa5281ff4a02 226 */
AnnaBridge 161:aa5281ff4a02 227
AnnaBridge 161:aa5281ff4a02 228 /*!
AnnaBridge 161:aa5281ff4a02 229 * @brief Initialize the ADC module.
AnnaBridge 161:aa5281ff4a02 230 *
AnnaBridge 161:aa5281ff4a02 231 * @param base ADC peripheral base address.
AnnaBridge 161:aa5281ff4a02 232 * @param config Pointer to "adc_config_t" structure.
AnnaBridge 161:aa5281ff4a02 233 */
AnnaBridge 161:aa5281ff4a02 234 void ADC_Init(ADC_Type *base, const adc_config_t *config);
AnnaBridge 161:aa5281ff4a02 235
AnnaBridge 161:aa5281ff4a02 236 /*!
AnnaBridge 161:aa5281ff4a02 237 * @brief De-initializes the ADC module.
AnnaBridge 161:aa5281ff4a02 238 *
AnnaBridge 161:aa5281ff4a02 239 * @param base ADC peripheral base address.
AnnaBridge 161:aa5281ff4a02 240 */
AnnaBridge 161:aa5281ff4a02 241 void ADC_Deinit(ADC_Type *base);
AnnaBridge 161:aa5281ff4a02 242
AnnaBridge 161:aa5281ff4a02 243 /*!
AnnaBridge 161:aa5281ff4a02 244 * @brief Gets an available pre-defined settings for the converter's configuration.
AnnaBridge 161:aa5281ff4a02 245 *
AnnaBridge 161:aa5281ff4a02 246 * This function initializes the converter configuration structure with available settings. The default values are:
AnnaBridge 161:aa5281ff4a02 247 * @code
AnnaBridge 161:aa5281ff4a02 248 * config->enableAsynchronousClockOutput = true;
AnnaBridge 161:aa5281ff4a02 249 * config->enableOverWrite = false;
AnnaBridge 161:aa5281ff4a02 250 * config->enableContinuousConversion = false;
AnnaBridge 161:aa5281ff4a02 251 * config->enableHighSpeed = false;
AnnaBridge 161:aa5281ff4a02 252 * config->enableLowPower = false;
AnnaBridge 161:aa5281ff4a02 253 * config->enableLongSample = false;
AnnaBridge 161:aa5281ff4a02 254 * config->referenceVoltageSource = kADC_ReferenceVoltageSourceAlt0;
AnnaBridge 161:aa5281ff4a02 255 * config->samplePeriodMode = kADC_SamplePeriod2or12Clocks;
AnnaBridge 161:aa5281ff4a02 256 * config->clockSource = kADC_ClockSourceAD;
AnnaBridge 161:aa5281ff4a02 257 * config->clockDriver = kADC_ClockDriver1;
AnnaBridge 161:aa5281ff4a02 258 * config->resolution = kADC_Resolution12Bit;
AnnaBridge 161:aa5281ff4a02 259 * @endcode
AnnaBridge 161:aa5281ff4a02 260 * @param base ADC peripheral base address.
AnnaBridge 161:aa5281ff4a02 261 * @param config Pointer to the configuration structure.
AnnaBridge 161:aa5281ff4a02 262 */
AnnaBridge 161:aa5281ff4a02 263 void ADC_GetDefaultConfig(adc_config_t *config);
AnnaBridge 161:aa5281ff4a02 264
AnnaBridge 161:aa5281ff4a02 265 /*!
AnnaBridge 161:aa5281ff4a02 266 * @brief Configures the conversion channel.
AnnaBridge 161:aa5281ff4a02 267 *
AnnaBridge 161:aa5281ff4a02 268 * This operation triggers the conversion when in software trigger mode. When in hardware trigger mode, this API
AnnaBridge 161:aa5281ff4a02 269 * configures the channel while the external trigger source helps to trigger the conversion.
AnnaBridge 161:aa5281ff4a02 270 *
AnnaBridge 161:aa5281ff4a02 271 * Note that the "Channel Group" has a detailed description.
AnnaBridge 161:aa5281ff4a02 272 * To allow sequential conversions of the ADC to be triggered by internal peripherals, the ADC has more than one
AnnaBridge 161:aa5281ff4a02 273 * group of status and control registers, one for each conversion. The channel group parameter indicates which group of
AnnaBridge 161:aa5281ff4a02 274 * registers are used, for example channel group 0 is for Group A registers and channel group 1 is for Group B
AnnaBridge 161:aa5281ff4a02 275 * registers. The
AnnaBridge 161:aa5281ff4a02 276 * channel groups are used in a "ping-pong" approach to control the ADC operation. At any point, only one of
AnnaBridge 161:aa5281ff4a02 277 * the channel groups is actively controlling ADC conversions. The channel group 0 is used for both software and
AnnaBridge 161:aa5281ff4a02 278 * hardware
AnnaBridge 161:aa5281ff4a02 279 * trigger modes. Channel groups 1 and greater indicate potentially multiple channel group registers for
AnnaBridge 161:aa5281ff4a02 280 * use only in hardware trigger mode. See the chip configuration information in the appropriate MCU reference manual
AnnaBridge 161:aa5281ff4a02 281 * about the
AnnaBridge 161:aa5281ff4a02 282 * number of SC1n registers (channel groups) specific to this device. None of the channel groups 1 or greater are used
AnnaBridge 161:aa5281ff4a02 283 * for software trigger operation. Therefore, writing to these channel groups does not initiate a new conversion.
AnnaBridge 161:aa5281ff4a02 284 * Updating the channel group 0 while a different channel group is actively controlling a conversion is allowed and
AnnaBridge 161:aa5281ff4a02 285 * vice versa. Writing any of the channel group registers while that specific channel group is actively controlling a
AnnaBridge 161:aa5281ff4a02 286 * conversion aborts the current conversion.
AnnaBridge 161:aa5281ff4a02 287 *
AnnaBridge 161:aa5281ff4a02 288 * @param base ADC peripheral base address.
AnnaBridge 161:aa5281ff4a02 289 * @param channelGroup Channel group index.
AnnaBridge 161:aa5281ff4a02 290 * @param config Pointer to the "adc_channel_config_t" structure for the conversion channel.
AnnaBridge 161:aa5281ff4a02 291 */
AnnaBridge 161:aa5281ff4a02 292 void ADC_SetChannelConfig(ADC_Type *base, uint32_t channelGroup, const adc_channel_config_t *config);
AnnaBridge 161:aa5281ff4a02 293
AnnaBridge 161:aa5281ff4a02 294 /*!
AnnaBridge 161:aa5281ff4a02 295 * @brief Gets the conversion value.
AnnaBridge 161:aa5281ff4a02 296 *
AnnaBridge 161:aa5281ff4a02 297 * @param base ADC peripheral base address.
AnnaBridge 161:aa5281ff4a02 298 * @param channelGroup Channel group index.
AnnaBridge 161:aa5281ff4a02 299 *
AnnaBridge 161:aa5281ff4a02 300 * @return Conversion value.
AnnaBridge 161:aa5281ff4a02 301 */
AnnaBridge 161:aa5281ff4a02 302 static inline uint32_t ADC_GetChannelConversionValue(ADC_Type *base, uint32_t channelGroup)
AnnaBridge 161:aa5281ff4a02 303 {
AnnaBridge 161:aa5281ff4a02 304 assert(channelGroup < ADC_R_COUNT);
AnnaBridge 161:aa5281ff4a02 305
AnnaBridge 161:aa5281ff4a02 306 return base->R[channelGroup];
AnnaBridge 161:aa5281ff4a02 307 }
AnnaBridge 161:aa5281ff4a02 308
AnnaBridge 161:aa5281ff4a02 309 /*!
AnnaBridge 161:aa5281ff4a02 310 * @brief Gets the status flags of channel.
AnnaBridge 161:aa5281ff4a02 311 *
AnnaBridge 161:aa5281ff4a02 312 * A conversion is completed when the result of the conversion is transferred into the data
AnnaBridge 161:aa5281ff4a02 313 * result registers. (provided the compare function & hardware averaging is disabled), this is
AnnaBridge 161:aa5281ff4a02 314 * indicated by the setting of COCOn. If hardware averaging is enabled, COCOn sets only,
AnnaBridge 161:aa5281ff4a02 315 * if the last of the selected number of conversions is complete. If the compare function is
AnnaBridge 161:aa5281ff4a02 316 * enabled, COCOn sets and conversion result data is transferred only if the compare
AnnaBridge 161:aa5281ff4a02 317 * condition is true. If both hardware averaging and compare functions are enabled, then
AnnaBridge 161:aa5281ff4a02 318 * COCOn sets only if the last of the selected number of conversions is complete and the
AnnaBridge 161:aa5281ff4a02 319 * compare condition is true.
AnnaBridge 161:aa5281ff4a02 320 *
AnnaBridge 161:aa5281ff4a02 321 * @param base ADC peripheral base address.
AnnaBridge 161:aa5281ff4a02 322 * @param channelGroup Channel group index.
AnnaBridge 161:aa5281ff4a02 323 *
AnnaBridge 161:aa5281ff4a02 324 * @return Status flags of channel.return 0 means COCO flag is 0,return 1 means COCOflag is 1.
AnnaBridge 161:aa5281ff4a02 325 */
AnnaBridge 161:aa5281ff4a02 326 static inline uint32_t ADC_GetChannelStatusFlags(ADC_Type *base, uint32_t channelGroup)
AnnaBridge 161:aa5281ff4a02 327 {
AnnaBridge 161:aa5281ff4a02 328 assert(channelGroup < ADC_HC_COUNT);
AnnaBridge 161:aa5281ff4a02 329
AnnaBridge 161:aa5281ff4a02 330 /* If flag is set,return 1,otherwise, return 0. */
AnnaBridge 161:aa5281ff4a02 331 return (((base->HS) & (1U << channelGroup)) >> channelGroup);
AnnaBridge 161:aa5281ff4a02 332 }
AnnaBridge 161:aa5281ff4a02 333
AnnaBridge 161:aa5281ff4a02 334 /*!
AnnaBridge 161:aa5281ff4a02 335 * @brief Automates the hardware calibration.
AnnaBridge 161:aa5281ff4a02 336 *
AnnaBridge 161:aa5281ff4a02 337 * This auto calibration helps to adjust the plus/minus side gain automatically.
AnnaBridge 161:aa5281ff4a02 338 * Execute the calibration before using the converter. Note that the software trigger should be used
AnnaBridge 161:aa5281ff4a02 339 * during calibration.
AnnaBridge 161:aa5281ff4a02 340 *
AnnaBridge 161:aa5281ff4a02 341 * @param base ADC peripheral base address.
AnnaBridge 161:aa5281ff4a02 342 *
AnnaBridge 161:aa5281ff4a02 343 * @return Execution status.
AnnaBridge 161:aa5281ff4a02 344 * @retval kStatus_Success Calibration is done successfully.
AnnaBridge 161:aa5281ff4a02 345 * @retval kStatus_Fail Calibration has failed.
AnnaBridge 161:aa5281ff4a02 346 */
AnnaBridge 161:aa5281ff4a02 347 status_t ADC_DoAutoCalibration(ADC_Type *base);
AnnaBridge 161:aa5281ff4a02 348
AnnaBridge 161:aa5281ff4a02 349 /*!
AnnaBridge 161:aa5281ff4a02 350 * @brief Set user defined offset.
AnnaBridge 161:aa5281ff4a02 351 *
AnnaBridge 161:aa5281ff4a02 352 * @param base ADC peripheral base address.
AnnaBridge 161:aa5281ff4a02 353 * @param config Pointer to "adc_offest_config_t" structure.
AnnaBridge 161:aa5281ff4a02 354 */
AnnaBridge 161:aa5281ff4a02 355 void ADC_SetOffsetConfig(ADC_Type *base, const adc_offest_config_t *config);
AnnaBridge 161:aa5281ff4a02 356
AnnaBridge 161:aa5281ff4a02 357 /*!
AnnaBridge 161:aa5281ff4a02 358 * @brief Enables generating the DMA trigger when the conversion is complete.
AnnaBridge 161:aa5281ff4a02 359 *
AnnaBridge 161:aa5281ff4a02 360 * @param base ADC peripheral base address.
AnnaBridge 161:aa5281ff4a02 361 * @param enable Switcher of the DMA feature. "true" means enabled, "false" means not enabled.
AnnaBridge 161:aa5281ff4a02 362 */
AnnaBridge 161:aa5281ff4a02 363 static inline void ADC_EnableDMA(ADC_Type *base, bool enable)
AnnaBridge 161:aa5281ff4a02 364 {
AnnaBridge 161:aa5281ff4a02 365 if (enable)
AnnaBridge 161:aa5281ff4a02 366 {
AnnaBridge 161:aa5281ff4a02 367 base->GC |= ADC_GC_DMAEN_MASK;
AnnaBridge 161:aa5281ff4a02 368 }
AnnaBridge 161:aa5281ff4a02 369 else
AnnaBridge 161:aa5281ff4a02 370 {
AnnaBridge 161:aa5281ff4a02 371 base->GC &= ~ADC_GC_DMAEN_MASK;
AnnaBridge 161:aa5281ff4a02 372 }
AnnaBridge 161:aa5281ff4a02 373 }
AnnaBridge 161:aa5281ff4a02 374
AnnaBridge 161:aa5281ff4a02 375 /*!
AnnaBridge 161:aa5281ff4a02 376 * @brief Enables the hardware trigger mode.
AnnaBridge 161:aa5281ff4a02 377 *
AnnaBridge 161:aa5281ff4a02 378 * @param base ADC peripheral base address.
AnnaBridge 161:aa5281ff4a02 379 * @param enable Switcher of the trigger mode. "true" means hardware tirgger mode,"false" means software mode.
AnnaBridge 161:aa5281ff4a02 380 */
AnnaBridge 161:aa5281ff4a02 381 #if !(defined(FSL_FEATURE_ADC_SUPPORT_HARDWARE_TRIGGER_REMOVE) && FSL_FEATURE_ADC_SUPPORT_HARDWARE_TRIGGER_REMOVE)
AnnaBridge 161:aa5281ff4a02 382 static inline void ADC_EnableHardwareTrigger(ADC_Type *base, bool enable)
AnnaBridge 161:aa5281ff4a02 383 {
AnnaBridge 161:aa5281ff4a02 384 if (enable)
AnnaBridge 161:aa5281ff4a02 385 {
AnnaBridge 161:aa5281ff4a02 386 base->CFG |= ADC_CFG_ADTRG_MASK;
AnnaBridge 161:aa5281ff4a02 387 }
AnnaBridge 161:aa5281ff4a02 388 else
AnnaBridge 161:aa5281ff4a02 389 {
AnnaBridge 161:aa5281ff4a02 390 base->CFG &= ~ADC_CFG_ADTRG_MASK;
AnnaBridge 161:aa5281ff4a02 391 }
AnnaBridge 161:aa5281ff4a02 392 }
AnnaBridge 161:aa5281ff4a02 393 #endif
AnnaBridge 161:aa5281ff4a02 394
AnnaBridge 161:aa5281ff4a02 395 /*!
AnnaBridge 161:aa5281ff4a02 396 * @brief Configures the hardware compare mode.
AnnaBridge 161:aa5281ff4a02 397 *
AnnaBridge 161:aa5281ff4a02 398 * The hardware compare mode provides a way to process the conversion result automatically by using hardware. Only the
AnnaBridge 161:aa5281ff4a02 399 * result
AnnaBridge 161:aa5281ff4a02 400 * in the compare range is available. To compare the range, see "adc_hardware_compare_mode_t" or the appopriate
AnnaBridge 161:aa5281ff4a02 401 * reference
AnnaBridge 161:aa5281ff4a02 402 * manual for more information.
AnnaBridge 161:aa5281ff4a02 403 *
AnnaBridge 161:aa5281ff4a02 404 * @param base ADC peripheral base address.
AnnaBridge 161:aa5281ff4a02 405 * @param Pointer to "adc_hardware_compare_config_t" structure.
AnnaBridge 161:aa5281ff4a02 406 *
AnnaBridge 161:aa5281ff4a02 407 */
AnnaBridge 161:aa5281ff4a02 408 void ADC_SetHardwareCompareConfig(ADC_Type *base, const adc_hardware_compare_config_t *config);
AnnaBridge 161:aa5281ff4a02 409
AnnaBridge 161:aa5281ff4a02 410 /*!
AnnaBridge 161:aa5281ff4a02 411 * @brief Configures the hardware average mode.
AnnaBridge 161:aa5281ff4a02 412 *
AnnaBridge 161:aa5281ff4a02 413 * The hardware average mode provides a way to process the conversion result automatically by using hardware. The
AnnaBridge 161:aa5281ff4a02 414 * multiple
AnnaBridge 161:aa5281ff4a02 415 * conversion results are accumulated and averaged internally making them easier to read.
AnnaBridge 161:aa5281ff4a02 416 *
AnnaBridge 161:aa5281ff4a02 417 * @param base ADC peripheral base address.
AnnaBridge 161:aa5281ff4a02 418 * @param mode Setting the hardware average mode. See "adc_hardware_average_mode_t".
AnnaBridge 161:aa5281ff4a02 419 */
AnnaBridge 161:aa5281ff4a02 420 void ADC_SetHardwareAverageConfig(ADC_Type *base, adc_hardware_average_mode_t mode);
AnnaBridge 161:aa5281ff4a02 421
AnnaBridge 161:aa5281ff4a02 422 /*!
AnnaBridge 161:aa5281ff4a02 423 * @brief Gets the converter's status flags.
AnnaBridge 161:aa5281ff4a02 424 *
AnnaBridge 161:aa5281ff4a02 425 * @param base ADC peripheral base address.
AnnaBridge 161:aa5281ff4a02 426 *
AnnaBridge 161:aa5281ff4a02 427 * @return Flags' mask if indicated flags are asserted. See "adc_status_flags_t".
AnnaBridge 161:aa5281ff4a02 428 */
AnnaBridge 161:aa5281ff4a02 429 static inline uint32_t ADC_GetStatusFlags(ADC_Type *base)
AnnaBridge 161:aa5281ff4a02 430 {
AnnaBridge 161:aa5281ff4a02 431 return base->GS;
AnnaBridge 161:aa5281ff4a02 432 }
AnnaBridge 161:aa5281ff4a02 433
AnnaBridge 161:aa5281ff4a02 434 /*!
AnnaBridge 161:aa5281ff4a02 435 * @brief Clears the converter's status falgs.
AnnaBridge 161:aa5281ff4a02 436 *
AnnaBridge 161:aa5281ff4a02 437 * @param base ADC peripheral base address.
AnnaBridge 161:aa5281ff4a02 438 * @param mask Mask value for the cleared flags. See "adc_status_flags_t".
AnnaBridge 161:aa5281ff4a02 439 */
AnnaBridge 161:aa5281ff4a02 440 void ADC_ClearStatusFlags(ADC_Type *base, uint32_t mask);
AnnaBridge 161:aa5281ff4a02 441
AnnaBridge 161:aa5281ff4a02 442 #if defined(__cplusplus)
AnnaBridge 161:aa5281ff4a02 443 }
AnnaBridge 161:aa5281ff4a02 444 #endif
AnnaBridge 161:aa5281ff4a02 445
AnnaBridge 161:aa5281ff4a02 446 #endif /* _FSL_ADC_H_ */