mbed library sources. Supersedes mbed-src.

Fork of mbed-dev by mbed official

Committer:
mbed_official
Date:
Mon Nov 09 13:30:11 2015 +0000
Revision:
18:da299f395b9e
Parent:
targets/hal/TARGET_Atmel/TARGET_SAM_CortexM0P/drivers/adc/adc_sam_d_r/adc_feature.h@15:a81a8d6c1dfe
Synchronized with git revision f605825f66bb2e462ff7dbc5fb4ed2dbe979d1c3

Full URL: https://github.com/mbedmicro/mbed/commit/f605825f66bb2e462ff7dbc5fb4ed2dbe979d1c3/

Added support for SAML21

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 15:a81a8d6c1dfe 1 /**
mbed_official 15:a81a8d6c1dfe 2 * \file
mbed_official 15:a81a8d6c1dfe 3 *
mbed_official 15:a81a8d6c1dfe 4 * \brief SAM ADC functionality
mbed_official 15:a81a8d6c1dfe 5 *
mbed_official 15:a81a8d6c1dfe 6 * Copyright (C) 2014-2015 Atmel Corporation. All rights reserved.
mbed_official 15:a81a8d6c1dfe 7 *
mbed_official 15:a81a8d6c1dfe 8 * \asf_license_start
mbed_official 15:a81a8d6c1dfe 9 *
mbed_official 15:a81a8d6c1dfe 10 * \page License
mbed_official 15:a81a8d6c1dfe 11 *
mbed_official 15:a81a8d6c1dfe 12 * Redistribution and use in source and binary forms, with or without
mbed_official 15:a81a8d6c1dfe 13 * modification, are permitted provided that the following conditions are met:
mbed_official 15:a81a8d6c1dfe 14 *
mbed_official 15:a81a8d6c1dfe 15 * 1. Redistributions of source code must retain the above copyright notice,
mbed_official 15:a81a8d6c1dfe 16 * this list of conditions and the following disclaimer.
mbed_official 15:a81a8d6c1dfe 17 *
mbed_official 15:a81a8d6c1dfe 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
mbed_official 15:a81a8d6c1dfe 19 * this list of conditions and the following disclaimer in the documentation
mbed_official 15:a81a8d6c1dfe 20 * and/or other materials provided with the distribution.
mbed_official 15:a81a8d6c1dfe 21 *
mbed_official 15:a81a8d6c1dfe 22 * 3. The name of Atmel may not be used to endorse or promote products derived
mbed_official 15:a81a8d6c1dfe 23 * from this software without specific prior written permission.
mbed_official 15:a81a8d6c1dfe 24 *
mbed_official 15:a81a8d6c1dfe 25 * 4. This software may only be redistributed and used in connection with an
mbed_official 15:a81a8d6c1dfe 26 * Atmel microcontroller product.
mbed_official 15:a81a8d6c1dfe 27 *
mbed_official 15:a81a8d6c1dfe 28 * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
mbed_official 15:a81a8d6c1dfe 29 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
mbed_official 15:a81a8d6c1dfe 30 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
mbed_official 15:a81a8d6c1dfe 31 * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
mbed_official 15:a81a8d6c1dfe 32 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mbed_official 15:a81a8d6c1dfe 33 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
mbed_official 15:a81a8d6c1dfe 34 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
mbed_official 15:a81a8d6c1dfe 35 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
mbed_official 15:a81a8d6c1dfe 36 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
mbed_official 15:a81a8d6c1dfe 37 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
mbed_official 15:a81a8d6c1dfe 38 * POSSIBILITY OF SUCH DAMAGE.
mbed_official 15:a81a8d6c1dfe 39 *
mbed_official 15:a81a8d6c1dfe 40 * \asf_license_stop
mbed_official 15:a81a8d6c1dfe 41 *
mbed_official 15:a81a8d6c1dfe 42 */
mbed_official 15:a81a8d6c1dfe 43 /*
mbed_official 15:a81a8d6c1dfe 44 * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>
mbed_official 15:a81a8d6c1dfe 45 */
mbed_official 15:a81a8d6c1dfe 46 #ifndef ADC_FEATURE_H_INCLUDED
mbed_official 15:a81a8d6c1dfe 47 #define ADC_FEATURE_H_INCLUDED
mbed_official 15:a81a8d6c1dfe 48
mbed_official 15:a81a8d6c1dfe 49 /**
mbed_official 15:a81a8d6c1dfe 50 * \addtogroup asfdoc_sam0_adc_group
mbed_official 15:a81a8d6c1dfe 51 * @{
mbed_official 15:a81a8d6c1dfe 52 */
mbed_official 15:a81a8d6c1dfe 53
mbed_official 15:a81a8d6c1dfe 54 #ifdef __cplusplus
mbed_official 15:a81a8d6c1dfe 55 extern "C" {
mbed_official 15:a81a8d6c1dfe 56 #endif
mbed_official 15:a81a8d6c1dfe 57
mbed_official 15:a81a8d6c1dfe 58 #if ADC_CALLBACK_MODE == true
mbed_official 15:a81a8d6c1dfe 59 # include <system_interrupt.h>
mbed_official 15:a81a8d6c1dfe 60
mbed_official 15:a81a8d6c1dfe 61 #if !defined(__DOXYGEN__)
mbed_official 15:a81a8d6c1dfe 62 extern struct adc_module *_adc_instances[ADC_INST_NUM];
mbed_official 15:a81a8d6c1dfe 63 #endif
mbed_official 15:a81a8d6c1dfe 64
mbed_official 15:a81a8d6c1dfe 65 /** Forward definition of the device instance. */
mbed_official 15:a81a8d6c1dfe 66 struct adc_module;
mbed_official 15:a81a8d6c1dfe 67
mbed_official 15:a81a8d6c1dfe 68 /** Type of the callback functions. */
mbed_official 15:a81a8d6c1dfe 69 typedef void (*adc_callback_t)(struct adc_module *const module);
mbed_official 15:a81a8d6c1dfe 70
mbed_official 15:a81a8d6c1dfe 71 /**
mbed_official 15:a81a8d6c1dfe 72 * \brief ADC Callback enum
mbed_official 15:a81a8d6c1dfe 73 *
mbed_official 15:a81a8d6c1dfe 74 * Callback types for ADC callback driver.
mbed_official 15:a81a8d6c1dfe 75 *
mbed_official 15:a81a8d6c1dfe 76 */
mbed_official 15:a81a8d6c1dfe 77 enum adc_callback {
mbed_official 15:a81a8d6c1dfe 78 /** Callback for buffer received. */
mbed_official 15:a81a8d6c1dfe 79 ADC_CALLBACK_READ_BUFFER,
mbed_official 15:a81a8d6c1dfe 80 /** Callback when window is hit. */
mbed_official 15:a81a8d6c1dfe 81 ADC_CALLBACK_WINDOW,
mbed_official 15:a81a8d6c1dfe 82 /** Callback for error. */
mbed_official 15:a81a8d6c1dfe 83 ADC_CALLBACK_ERROR,
mbed_official 15:a81a8d6c1dfe 84 # if !defined(__DOXYGEN__)
mbed_official 15:a81a8d6c1dfe 85 /** Number of available callbacks. */
mbed_official 15:a81a8d6c1dfe 86 ADC_CALLBACK_N,
mbed_official 15:a81a8d6c1dfe 87 # endif
mbed_official 15:a81a8d6c1dfe 88 };
mbed_official 15:a81a8d6c1dfe 89
mbed_official 15:a81a8d6c1dfe 90 #endif
mbed_official 15:a81a8d6c1dfe 91
mbed_official 15:a81a8d6c1dfe 92 /**
mbed_official 15:a81a8d6c1dfe 93 * \brief ADC reference voltage enum
mbed_official 15:a81a8d6c1dfe 94 *
mbed_official 15:a81a8d6c1dfe 95 * Enum for the possible reference voltages for the ADC.
mbed_official 15:a81a8d6c1dfe 96 *
mbed_official 15:a81a8d6c1dfe 97 */
mbed_official 15:a81a8d6c1dfe 98 enum adc_reference {
mbed_official 15:a81a8d6c1dfe 99 /** 1.0V voltage reference. */
mbed_official 15:a81a8d6c1dfe 100 ADC_REFERENCE_INT1V = ADC_REFCTRL_REFSEL_INT1V,
mbed_official 15:a81a8d6c1dfe 101 /** 1/1.48V<SUB>CC</SUB> reference. */
mbed_official 15:a81a8d6c1dfe 102 ADC_REFERENCE_INTVCC0 = ADC_REFCTRL_REFSEL_INTVCC0,
mbed_official 15:a81a8d6c1dfe 103 /** 1/2V<SUB>CC</SUB> (only for internal V<SUB>CC</SUB> > 2.1V). */
mbed_official 15:a81a8d6c1dfe 104 ADC_REFERENCE_INTVCC1 = ADC_REFCTRL_REFSEL_INTVCC1,
mbed_official 15:a81a8d6c1dfe 105 /** External reference A. */
mbed_official 15:a81a8d6c1dfe 106 ADC_REFERENCE_AREFA = ADC_REFCTRL_REFSEL_AREFA,
mbed_official 15:a81a8d6c1dfe 107 /** External reference B. */
mbed_official 15:a81a8d6c1dfe 108 ADC_REFERENCE_AREFB = ADC_REFCTRL_REFSEL_AREFB,
mbed_official 15:a81a8d6c1dfe 109 };
mbed_official 15:a81a8d6c1dfe 110
mbed_official 15:a81a8d6c1dfe 111 /**
mbed_official 15:a81a8d6c1dfe 112 * \brief ADC clock prescaler enum
mbed_official 15:a81a8d6c1dfe 113 *
mbed_official 15:a81a8d6c1dfe 114 * Enum for the possible clock prescaler values for the ADC.
mbed_official 15:a81a8d6c1dfe 115 *
mbed_official 15:a81a8d6c1dfe 116 */
mbed_official 15:a81a8d6c1dfe 117 enum adc_clock_prescaler {
mbed_official 15:a81a8d6c1dfe 118 /** ADC clock division factor 4. */
mbed_official 15:a81a8d6c1dfe 119 ADC_CLOCK_PRESCALER_DIV4 = ADC_CTRLB_PRESCALER_DIV4,
mbed_official 15:a81a8d6c1dfe 120 /** ADC clock division factor 8. */
mbed_official 15:a81a8d6c1dfe 121 ADC_CLOCK_PRESCALER_DIV8 = ADC_CTRLB_PRESCALER_DIV8,
mbed_official 15:a81a8d6c1dfe 122 /** ADC clock division factor 16. */
mbed_official 15:a81a8d6c1dfe 123 ADC_CLOCK_PRESCALER_DIV16 = ADC_CTRLB_PRESCALER_DIV16,
mbed_official 15:a81a8d6c1dfe 124 /** ADC clock division factor 32. */
mbed_official 15:a81a8d6c1dfe 125 ADC_CLOCK_PRESCALER_DIV32 = ADC_CTRLB_PRESCALER_DIV32,
mbed_official 15:a81a8d6c1dfe 126 /** ADC clock division factor 64. */
mbed_official 15:a81a8d6c1dfe 127 ADC_CLOCK_PRESCALER_DIV64 = ADC_CTRLB_PRESCALER_DIV64,
mbed_official 15:a81a8d6c1dfe 128 /** ADC clock division factor 128. */
mbed_official 15:a81a8d6c1dfe 129 ADC_CLOCK_PRESCALER_DIV128 = ADC_CTRLB_PRESCALER_DIV128,
mbed_official 15:a81a8d6c1dfe 130 /** ADC clock division factor 256. */
mbed_official 15:a81a8d6c1dfe 131 ADC_CLOCK_PRESCALER_DIV256 = ADC_CTRLB_PRESCALER_DIV256,
mbed_official 15:a81a8d6c1dfe 132 /** ADC clock division factor 512. */
mbed_official 15:a81a8d6c1dfe 133 ADC_CLOCK_PRESCALER_DIV512 = ADC_CTRLB_PRESCALER_DIV512,
mbed_official 15:a81a8d6c1dfe 134 };
mbed_official 15:a81a8d6c1dfe 135
mbed_official 15:a81a8d6c1dfe 136 /**
mbed_official 15:a81a8d6c1dfe 137 * \brief ADC resolution enum
mbed_official 15:a81a8d6c1dfe 138 *
mbed_official 15:a81a8d6c1dfe 139 * Enum for the possible resolution values for the ADC.
mbed_official 15:a81a8d6c1dfe 140 *
mbed_official 15:a81a8d6c1dfe 141 */
mbed_official 15:a81a8d6c1dfe 142 enum adc_resolution {
mbed_official 15:a81a8d6c1dfe 143 /** ADC 12-bit resolution. */
mbed_official 15:a81a8d6c1dfe 144 ADC_RESOLUTION_12BIT = ADC_CTRLB_RESSEL_12BIT,
mbed_official 15:a81a8d6c1dfe 145 /** ADC 16-bit resolution using oversampling and decimation. */
mbed_official 15:a81a8d6c1dfe 146 ADC_RESOLUTION_16BIT = ADC_CTRLB_RESSEL_16BIT,
mbed_official 15:a81a8d6c1dfe 147 /** ADC 10-bit resolution. */
mbed_official 15:a81a8d6c1dfe 148 ADC_RESOLUTION_10BIT = ADC_CTRLB_RESSEL_10BIT,
mbed_official 15:a81a8d6c1dfe 149 /** ADC 8-bit resolution. */
mbed_official 15:a81a8d6c1dfe 150 ADC_RESOLUTION_8BIT = ADC_CTRLB_RESSEL_8BIT,
mbed_official 15:a81a8d6c1dfe 151 /** ADC 13-bit resolution using oversampling and decimation. */
mbed_official 15:a81a8d6c1dfe 152 ADC_RESOLUTION_13BIT,
mbed_official 15:a81a8d6c1dfe 153 /** ADC 14-bit resolution using oversampling and decimation. */
mbed_official 15:a81a8d6c1dfe 154 ADC_RESOLUTION_14BIT,
mbed_official 15:a81a8d6c1dfe 155 /** ADC 15-bit resolution using oversampling and decimation. */
mbed_official 15:a81a8d6c1dfe 156 ADC_RESOLUTION_15BIT,
mbed_official 15:a81a8d6c1dfe 157 /** ADC 16-bit result register for use with averaging. When using this mode
mbed_official 15:a81a8d6c1dfe 158 * the ADC result register will be set to 16-bit wide, and the number of
mbed_official 15:a81a8d6c1dfe 159 * samples to accumulate and the division factor is configured by the
mbed_official 15:a81a8d6c1dfe 160 * \ref adc_config.accumulate_samples and \ref adc_config.divide_result
mbed_official 15:a81a8d6c1dfe 161 * members in the configuration struct.
mbed_official 15:a81a8d6c1dfe 162 */
mbed_official 15:a81a8d6c1dfe 163 ADC_RESOLUTION_CUSTOM,
mbed_official 15:a81a8d6c1dfe 164 };
mbed_official 15:a81a8d6c1dfe 165
mbed_official 15:a81a8d6c1dfe 166 /**
mbed_official 15:a81a8d6c1dfe 167 * \brief ADC window monitor mode enum
mbed_official 15:a81a8d6c1dfe 168 *
mbed_official 15:a81a8d6c1dfe 169 * Enum for the possible window monitor modes for the ADC.
mbed_official 15:a81a8d6c1dfe 170 *
mbed_official 15:a81a8d6c1dfe 171 */
mbed_official 15:a81a8d6c1dfe 172 enum adc_window_mode {
mbed_official 15:a81a8d6c1dfe 173 /** No window mode. */
mbed_official 15:a81a8d6c1dfe 174 ADC_WINDOW_MODE_DISABLE = ADC_WINCTRL_WINMODE_DISABLE,
mbed_official 15:a81a8d6c1dfe 175 /** RESULT > WINLT. */
mbed_official 15:a81a8d6c1dfe 176 ADC_WINDOW_MODE_ABOVE_LOWER = ADC_WINCTRL_WINMODE_MODE1,
mbed_official 15:a81a8d6c1dfe 177 /** RESULT < WINUT. */
mbed_official 15:a81a8d6c1dfe 178 ADC_WINDOW_MODE_BELOW_UPPER = ADC_WINCTRL_WINMODE_MODE2,
mbed_official 15:a81a8d6c1dfe 179 /** WINLT < RESULT < WINUT. */
mbed_official 15:a81a8d6c1dfe 180 ADC_WINDOW_MODE_BETWEEN = ADC_WINCTRL_WINMODE_MODE3,
mbed_official 15:a81a8d6c1dfe 181 /** !(WINLT < RESULT < WINUT). */
mbed_official 15:a81a8d6c1dfe 182 ADC_WINDOW_MODE_BETWEEN_INVERTED = ADC_WINCTRL_WINMODE_MODE4,
mbed_official 15:a81a8d6c1dfe 183 };
mbed_official 15:a81a8d6c1dfe 184
mbed_official 15:a81a8d6c1dfe 185 /**
mbed_official 15:a81a8d6c1dfe 186 * \brief ADC gain factor selection enum
mbed_official 15:a81a8d6c1dfe 187 *
mbed_official 15:a81a8d6c1dfe 188 * Enum for the possible gain factor values for the ADC.
mbed_official 15:a81a8d6c1dfe 189 *
mbed_official 15:a81a8d6c1dfe 190 */
mbed_official 15:a81a8d6c1dfe 191 enum adc_gain_factor {
mbed_official 15:a81a8d6c1dfe 192 /** 1x gain. */
mbed_official 15:a81a8d6c1dfe 193 ADC_GAIN_FACTOR_1X = ADC_INPUTCTRL_GAIN_1X,
mbed_official 15:a81a8d6c1dfe 194 /** 2x gain. */
mbed_official 15:a81a8d6c1dfe 195 ADC_GAIN_FACTOR_2X = ADC_INPUTCTRL_GAIN_2X,
mbed_official 15:a81a8d6c1dfe 196 /** 4x gain. */
mbed_official 15:a81a8d6c1dfe 197 ADC_GAIN_FACTOR_4X = ADC_INPUTCTRL_GAIN_4X,
mbed_official 15:a81a8d6c1dfe 198 /** 8x gain. */
mbed_official 15:a81a8d6c1dfe 199 ADC_GAIN_FACTOR_8X = ADC_INPUTCTRL_GAIN_8X,
mbed_official 15:a81a8d6c1dfe 200 /** 16x gain. */
mbed_official 15:a81a8d6c1dfe 201 ADC_GAIN_FACTOR_16X = ADC_INPUTCTRL_GAIN_16X,
mbed_official 15:a81a8d6c1dfe 202 /** 1/2x gain. */
mbed_official 15:a81a8d6c1dfe 203 ADC_GAIN_FACTOR_DIV2 = ADC_INPUTCTRL_GAIN_DIV2,
mbed_official 15:a81a8d6c1dfe 204 };
mbed_official 15:a81a8d6c1dfe 205
mbed_official 15:a81a8d6c1dfe 206 /**
mbed_official 15:a81a8d6c1dfe 207 * \brief ADC event action enum
mbed_official 15:a81a8d6c1dfe 208 *
mbed_official 15:a81a8d6c1dfe 209 * Enum for the possible actions to take on an incoming event.
mbed_official 15:a81a8d6c1dfe 210 *
mbed_official 15:a81a8d6c1dfe 211 */
mbed_official 15:a81a8d6c1dfe 212 enum adc_event_action {
mbed_official 15:a81a8d6c1dfe 213 /** Event action disabled. */
mbed_official 15:a81a8d6c1dfe 214 ADC_EVENT_ACTION_DISABLED = 0,
mbed_official 15:a81a8d6c1dfe 215 /** Flush ADC and start conversion. */
mbed_official 15:a81a8d6c1dfe 216 ADC_EVENT_ACTION_FLUSH_START_CONV = ADC_EVCTRL_SYNCEI,
mbed_official 15:a81a8d6c1dfe 217 /** Start conversion. */
mbed_official 15:a81a8d6c1dfe 218 ADC_EVENT_ACTION_START_CONV = ADC_EVCTRL_STARTEI,
mbed_official 15:a81a8d6c1dfe 219 };
mbed_official 15:a81a8d6c1dfe 220
mbed_official 15:a81a8d6c1dfe 221 /**
mbed_official 15:a81a8d6c1dfe 222 * \brief ADC positive MUX input selection enum
mbed_official 15:a81a8d6c1dfe 223 *
mbed_official 15:a81a8d6c1dfe 224 * Enum for the possible positive MUX input selections for the ADC.
mbed_official 15:a81a8d6c1dfe 225 *
mbed_official 15:a81a8d6c1dfe 226 */
mbed_official 15:a81a8d6c1dfe 227 enum adc_positive_input {
mbed_official 15:a81a8d6c1dfe 228 /** ADC0 pin. */
mbed_official 15:a81a8d6c1dfe 229 ADC_POSITIVE_INPUT_PIN0 = ADC_INPUTCTRL_MUXPOS_PIN0,
mbed_official 15:a81a8d6c1dfe 230 /** ADC1 pin. */
mbed_official 15:a81a8d6c1dfe 231 ADC_POSITIVE_INPUT_PIN1 = ADC_INPUTCTRL_MUXPOS_PIN1,
mbed_official 15:a81a8d6c1dfe 232 /** ADC2 pin. */
mbed_official 15:a81a8d6c1dfe 233 ADC_POSITIVE_INPUT_PIN2 = ADC_INPUTCTRL_MUXPOS_PIN2,
mbed_official 15:a81a8d6c1dfe 234 /** ADC3 pin. */
mbed_official 15:a81a8d6c1dfe 235 ADC_POSITIVE_INPUT_PIN3 = ADC_INPUTCTRL_MUXPOS_PIN3,
mbed_official 15:a81a8d6c1dfe 236 /** ADC4 pin. */
mbed_official 15:a81a8d6c1dfe 237 ADC_POSITIVE_INPUT_PIN4 = ADC_INPUTCTRL_MUXPOS_PIN4,
mbed_official 15:a81a8d6c1dfe 238 /** ADC5 pin. */
mbed_official 15:a81a8d6c1dfe 239 ADC_POSITIVE_INPUT_PIN5 = ADC_INPUTCTRL_MUXPOS_PIN5,
mbed_official 15:a81a8d6c1dfe 240 /** ADC6 pin. */
mbed_official 15:a81a8d6c1dfe 241 ADC_POSITIVE_INPUT_PIN6 = ADC_INPUTCTRL_MUXPOS_PIN6,
mbed_official 15:a81a8d6c1dfe 242 /** ADC7 pin. */
mbed_official 15:a81a8d6c1dfe 243 ADC_POSITIVE_INPUT_PIN7 = ADC_INPUTCTRL_MUXPOS_PIN7,
mbed_official 15:a81a8d6c1dfe 244 /** ADC8 pin. */
mbed_official 15:a81a8d6c1dfe 245 ADC_POSITIVE_INPUT_PIN8 = ADC_INPUTCTRL_MUXPOS_PIN8,
mbed_official 15:a81a8d6c1dfe 246 /** ADC9 pin. */
mbed_official 15:a81a8d6c1dfe 247 ADC_POSITIVE_INPUT_PIN9 = ADC_INPUTCTRL_MUXPOS_PIN9,
mbed_official 15:a81a8d6c1dfe 248 /** ADC10 pin. */
mbed_official 15:a81a8d6c1dfe 249 ADC_POSITIVE_INPUT_PIN10 = ADC_INPUTCTRL_MUXPOS_PIN10,
mbed_official 15:a81a8d6c1dfe 250 /** ADC11 pin. */
mbed_official 15:a81a8d6c1dfe 251 ADC_POSITIVE_INPUT_PIN11 = ADC_INPUTCTRL_MUXPOS_PIN11,
mbed_official 15:a81a8d6c1dfe 252 /** ADC12 pin. */
mbed_official 15:a81a8d6c1dfe 253 ADC_POSITIVE_INPUT_PIN12 = ADC_INPUTCTRL_MUXPOS_PIN12,
mbed_official 15:a81a8d6c1dfe 254 /** ADC13 pin. */
mbed_official 15:a81a8d6c1dfe 255 ADC_POSITIVE_INPUT_PIN13 = ADC_INPUTCTRL_MUXPOS_PIN13,
mbed_official 15:a81a8d6c1dfe 256 /** ADC14 pin. */
mbed_official 15:a81a8d6c1dfe 257 ADC_POSITIVE_INPUT_PIN14 = ADC_INPUTCTRL_MUXPOS_PIN14,
mbed_official 15:a81a8d6c1dfe 258 /** ADC15 pin. */
mbed_official 15:a81a8d6c1dfe 259 ADC_POSITIVE_INPUT_PIN15 = ADC_INPUTCTRL_MUXPOS_PIN15,
mbed_official 15:a81a8d6c1dfe 260 /** ADC16 pin. */
mbed_official 15:a81a8d6c1dfe 261 ADC_POSITIVE_INPUT_PIN16 = ADC_INPUTCTRL_MUXPOS_PIN16,
mbed_official 15:a81a8d6c1dfe 262 /** ADC17 pin. */
mbed_official 15:a81a8d6c1dfe 263 ADC_POSITIVE_INPUT_PIN17 = ADC_INPUTCTRL_MUXPOS_PIN17,
mbed_official 15:a81a8d6c1dfe 264 /** ADC18 pin. */
mbed_official 15:a81a8d6c1dfe 265 ADC_POSITIVE_INPUT_PIN18 = ADC_INPUTCTRL_MUXPOS_PIN18,
mbed_official 15:a81a8d6c1dfe 266 /** ADC19 pin. */
mbed_official 15:a81a8d6c1dfe 267 ADC_POSITIVE_INPUT_PIN19 = ADC_INPUTCTRL_MUXPOS_PIN19,
mbed_official 15:a81a8d6c1dfe 268 /** Temperature reference. */
mbed_official 15:a81a8d6c1dfe 269 ADC_POSITIVE_INPUT_TEMP = ADC_INPUTCTRL_MUXPOS_TEMP,
mbed_official 15:a81a8d6c1dfe 270 /** Bandgap voltage. */
mbed_official 15:a81a8d6c1dfe 271 ADC_POSITIVE_INPUT_BANDGAP = ADC_INPUTCTRL_MUXPOS_BANDGAP,
mbed_official 15:a81a8d6c1dfe 272 /** 1/4 scaled core supply. */
mbed_official 15:a81a8d6c1dfe 273 ADC_POSITIVE_INPUT_SCALEDCOREVCC = ADC_INPUTCTRL_MUXPOS_SCALEDCOREVCC,
mbed_official 15:a81a8d6c1dfe 274 /** 1/4 scaled I/O supply. */
mbed_official 15:a81a8d6c1dfe 275 ADC_POSITIVE_INPUT_SCALEDIOVCC = ADC_INPUTCTRL_MUXPOS_SCALEDIOVCC,
mbed_official 15:a81a8d6c1dfe 276 /** DAC input. */
mbed_official 15:a81a8d6c1dfe 277 ADC_POSITIVE_INPUT_DAC = ADC_INPUTCTRL_MUXPOS_DAC,
mbed_official 15:a81a8d6c1dfe 278 };
mbed_official 15:a81a8d6c1dfe 279
mbed_official 15:a81a8d6c1dfe 280 /**
mbed_official 15:a81a8d6c1dfe 281 * \brief ADC negative MUX input selection enum
mbed_official 15:a81a8d6c1dfe 282 *
mbed_official 15:a81a8d6c1dfe 283 * Enum for the possible negative MUX input selections for the ADC.
mbed_official 15:a81a8d6c1dfe 284 *
mbed_official 15:a81a8d6c1dfe 285 */
mbed_official 15:a81a8d6c1dfe 286 enum adc_negative_input {
mbed_official 15:a81a8d6c1dfe 287 /** ADC0 pin. */
mbed_official 15:a81a8d6c1dfe 288 ADC_NEGATIVE_INPUT_PIN0 = ADC_INPUTCTRL_MUXNEG_PIN0,
mbed_official 15:a81a8d6c1dfe 289 /** ADC1 pin. */
mbed_official 15:a81a8d6c1dfe 290 ADC_NEGATIVE_INPUT_PIN1 = ADC_INPUTCTRL_MUXNEG_PIN1,
mbed_official 15:a81a8d6c1dfe 291 /** ADC2 pin. */
mbed_official 15:a81a8d6c1dfe 292 ADC_NEGATIVE_INPUT_PIN2 = ADC_INPUTCTRL_MUXNEG_PIN2,
mbed_official 15:a81a8d6c1dfe 293 /** ADC3 pin. */
mbed_official 15:a81a8d6c1dfe 294 ADC_NEGATIVE_INPUT_PIN3 = ADC_INPUTCTRL_MUXNEG_PIN3,
mbed_official 15:a81a8d6c1dfe 295 /** ADC4 pin. */
mbed_official 15:a81a8d6c1dfe 296 ADC_NEGATIVE_INPUT_PIN4 = ADC_INPUTCTRL_MUXNEG_PIN4,
mbed_official 15:a81a8d6c1dfe 297 /** ADC5 pin. */
mbed_official 15:a81a8d6c1dfe 298 ADC_NEGATIVE_INPUT_PIN5 = ADC_INPUTCTRL_MUXNEG_PIN5,
mbed_official 15:a81a8d6c1dfe 299 /** ADC6 pin. */
mbed_official 15:a81a8d6c1dfe 300 ADC_NEGATIVE_INPUT_PIN6 = ADC_INPUTCTRL_MUXNEG_PIN6,
mbed_official 15:a81a8d6c1dfe 301 /** ADC7 pin. */
mbed_official 15:a81a8d6c1dfe 302 ADC_NEGATIVE_INPUT_PIN7 = ADC_INPUTCTRL_MUXNEG_PIN7,
mbed_official 15:a81a8d6c1dfe 303 /** Internal ground. */
mbed_official 15:a81a8d6c1dfe 304 ADC_NEGATIVE_INPUT_GND = ADC_INPUTCTRL_MUXNEG_GND,
mbed_official 15:a81a8d6c1dfe 305 /** I/O ground. */
mbed_official 15:a81a8d6c1dfe 306 ADC_NEGATIVE_INPUT_IOGND = ADC_INPUTCTRL_MUXNEG_IOGND,
mbed_official 15:a81a8d6c1dfe 307 };
mbed_official 15:a81a8d6c1dfe 308
mbed_official 15:a81a8d6c1dfe 309 /**
mbed_official 15:a81a8d6c1dfe 310 * \brief ADC number of accumulated samples enum
mbed_official 15:a81a8d6c1dfe 311 *
mbed_official 15:a81a8d6c1dfe 312 * Enum for the possible numbers of ADC samples to accumulate.
mbed_official 15:a81a8d6c1dfe 313 * This setting is only used when the \ref ADC_RESOLUTION_CUSTOM
mbed_official 15:a81a8d6c1dfe 314 * resolution setting is used.
mbed_official 15:a81a8d6c1dfe 315 *
mbed_official 15:a81a8d6c1dfe 316 */
mbed_official 15:a81a8d6c1dfe 317 enum adc_accumulate_samples {
mbed_official 15:a81a8d6c1dfe 318 /** No averaging. */
mbed_official 15:a81a8d6c1dfe 319 ADC_ACCUMULATE_DISABLE = ADC_AVGCTRL_SAMPLENUM_1,
mbed_official 15:a81a8d6c1dfe 320 /** Average 2 samples. */
mbed_official 15:a81a8d6c1dfe 321 ADC_ACCUMULATE_SAMPLES_2 = ADC_AVGCTRL_SAMPLENUM_2,
mbed_official 15:a81a8d6c1dfe 322 /** Average 4 samples. */
mbed_official 15:a81a8d6c1dfe 323 ADC_ACCUMULATE_SAMPLES_4 = ADC_AVGCTRL_SAMPLENUM_4,
mbed_official 15:a81a8d6c1dfe 324 /** Average 8 samples. */
mbed_official 15:a81a8d6c1dfe 325 ADC_ACCUMULATE_SAMPLES_8 = ADC_AVGCTRL_SAMPLENUM_8,
mbed_official 15:a81a8d6c1dfe 326 /** Average 16 samples. */
mbed_official 15:a81a8d6c1dfe 327 ADC_ACCUMULATE_SAMPLES_16 = ADC_AVGCTRL_SAMPLENUM_16,
mbed_official 15:a81a8d6c1dfe 328 /** Average 32 samples. */
mbed_official 15:a81a8d6c1dfe 329 ADC_ACCUMULATE_SAMPLES_32 = ADC_AVGCTRL_SAMPLENUM_32,
mbed_official 15:a81a8d6c1dfe 330 /** Average 64 samples. */
mbed_official 15:a81a8d6c1dfe 331 ADC_ACCUMULATE_SAMPLES_64 = ADC_AVGCTRL_SAMPLENUM_64,
mbed_official 15:a81a8d6c1dfe 332 /** Average 128 samples. */
mbed_official 15:a81a8d6c1dfe 333 ADC_ACCUMULATE_SAMPLES_128 = ADC_AVGCTRL_SAMPLENUM_128,
mbed_official 15:a81a8d6c1dfe 334 /** Average 256 samples. */
mbed_official 15:a81a8d6c1dfe 335 ADC_ACCUMULATE_SAMPLES_256 = ADC_AVGCTRL_SAMPLENUM_256,
mbed_official 15:a81a8d6c1dfe 336 /** Average 512 samples. */
mbed_official 15:a81a8d6c1dfe 337 ADC_ACCUMULATE_SAMPLES_512 = ADC_AVGCTRL_SAMPLENUM_512,
mbed_official 15:a81a8d6c1dfe 338 /** Average 1024 samples. */
mbed_official 15:a81a8d6c1dfe 339 ADC_ACCUMULATE_SAMPLES_1024 = ADC_AVGCTRL_SAMPLENUM_1024,
mbed_official 15:a81a8d6c1dfe 340 };
mbed_official 15:a81a8d6c1dfe 341
mbed_official 15:a81a8d6c1dfe 342 /**
mbed_official 15:a81a8d6c1dfe 343 * \brief ADC possible dividers for the result register
mbed_official 15:a81a8d6c1dfe 344 *
mbed_official 15:a81a8d6c1dfe 345 * Enum for the possible division factors to use when accumulating
mbed_official 15:a81a8d6c1dfe 346 * multiple samples. To keep the same resolution for the averaged
mbed_official 15:a81a8d6c1dfe 347 * result and the actual input value, the division factor must
mbed_official 15:a81a8d6c1dfe 348 * be equal to the number of samples accumulated. This setting is only
mbed_official 15:a81a8d6c1dfe 349 * used when the \ref ADC_RESOLUTION_CUSTOM resolution setting is used.
mbed_official 15:a81a8d6c1dfe 350 */
mbed_official 15:a81a8d6c1dfe 351 enum adc_divide_result {
mbed_official 15:a81a8d6c1dfe 352 /** Don't divide result register after accumulation. */
mbed_official 15:a81a8d6c1dfe 353 ADC_DIVIDE_RESULT_DISABLE = 0,
mbed_official 15:a81a8d6c1dfe 354 /** Divide result register by 2 after accumulation. */
mbed_official 15:a81a8d6c1dfe 355 ADC_DIVIDE_RESULT_2 = 1,
mbed_official 15:a81a8d6c1dfe 356 /** Divide result register by 4 after accumulation. */
mbed_official 15:a81a8d6c1dfe 357 ADC_DIVIDE_RESULT_4 = 2,
mbed_official 15:a81a8d6c1dfe 358 /** Divide result register by 8 after accumulation. */
mbed_official 15:a81a8d6c1dfe 359 ADC_DIVIDE_RESULT_8 = 3,
mbed_official 15:a81a8d6c1dfe 360 /** Divide result register by 16 after accumulation. */
mbed_official 15:a81a8d6c1dfe 361 ADC_DIVIDE_RESULT_16 = 4,
mbed_official 15:a81a8d6c1dfe 362 /** Divide result register by 32 after accumulation. */
mbed_official 15:a81a8d6c1dfe 363 ADC_DIVIDE_RESULT_32 = 5,
mbed_official 15:a81a8d6c1dfe 364 /** Divide result register by 64 after accumulation. */
mbed_official 15:a81a8d6c1dfe 365 ADC_DIVIDE_RESULT_64 = 6,
mbed_official 15:a81a8d6c1dfe 366 /** Divide result register by 128 after accumulation. */
mbed_official 15:a81a8d6c1dfe 367 ADC_DIVIDE_RESULT_128 = 7,
mbed_official 15:a81a8d6c1dfe 368 };
mbed_official 15:a81a8d6c1dfe 369
mbed_official 15:a81a8d6c1dfe 370 #if ADC_CALLBACK_MODE == true
mbed_official 15:a81a8d6c1dfe 371 /**
mbed_official 15:a81a8d6c1dfe 372 * Enum for the possible ADC interrupt flags.
mbed_official 15:a81a8d6c1dfe 373 */
mbed_official 15:a81a8d6c1dfe 374 enum adc_interrupt_flag {
mbed_official 15:a81a8d6c1dfe 375 /** ADC result ready. */
mbed_official 15:a81a8d6c1dfe 376 ADC_INTERRUPT_RESULT_READY = ADC_INTFLAG_RESRDY,
mbed_official 15:a81a8d6c1dfe 377 /** Window monitor match. */
mbed_official 15:a81a8d6c1dfe 378 ADC_INTERRUPT_WINDOW = ADC_INTFLAG_WINMON,
mbed_official 15:a81a8d6c1dfe 379 /** ADC result overwritten before read. */
mbed_official 15:a81a8d6c1dfe 380 ADC_INTERRUPT_OVERRUN = ADC_INTFLAG_OVERRUN,
mbed_official 15:a81a8d6c1dfe 381 };
mbed_official 15:a81a8d6c1dfe 382 #endif
mbed_official 15:a81a8d6c1dfe 383
mbed_official 15:a81a8d6c1dfe 384 /**
mbed_official 15:a81a8d6c1dfe 385 * \brief ADC oversampling and decimation enum
mbed_official 15:a81a8d6c1dfe 386 *
mbed_official 15:a81a8d6c1dfe 387 * Enum for the possible numbers of bits resolution can be increased by when
mbed_official 15:a81a8d6c1dfe 388 * using oversampling and decimation.
mbed_official 15:a81a8d6c1dfe 389 *
mbed_official 15:a81a8d6c1dfe 390 */
mbed_official 15:a81a8d6c1dfe 391 enum adc_oversampling_and_decimation {
mbed_official 15:a81a8d6c1dfe 392 /** Don't use oversampling and decimation mode. */
mbed_official 15:a81a8d6c1dfe 393 ADC_OVERSAMPLING_AND_DECIMATION_DISABLE = 0,
mbed_official 15:a81a8d6c1dfe 394 /** 1 bit resolution increase. */
mbed_official 15:a81a8d6c1dfe 395 ADC_OVERSAMPLING_AND_DECIMATION_1BIT,
mbed_official 15:a81a8d6c1dfe 396 /** 2 bits resolution increase. */
mbed_official 15:a81a8d6c1dfe 397 ADC_OVERSAMPLING_AND_DECIMATION_2BIT,
mbed_official 15:a81a8d6c1dfe 398 /** 3 bits resolution increase. */
mbed_official 15:a81a8d6c1dfe 399 ADC_OVERSAMPLING_AND_DECIMATION_3BIT,
mbed_official 15:a81a8d6c1dfe 400 /** 4 bits resolution increase. */
mbed_official 15:a81a8d6c1dfe 401 ADC_OVERSAMPLING_AND_DECIMATION_4BIT
mbed_official 15:a81a8d6c1dfe 402 };
mbed_official 15:a81a8d6c1dfe 403
mbed_official 15:a81a8d6c1dfe 404 /**
mbed_official 15:a81a8d6c1dfe 405 * \brief Window monitor configuration structure
mbed_official 15:a81a8d6c1dfe 406 *
mbed_official 15:a81a8d6c1dfe 407 * Window monitor configuration structure.
mbed_official 15:a81a8d6c1dfe 408 */
mbed_official 15:a81a8d6c1dfe 409 struct adc_window_config {
mbed_official 15:a81a8d6c1dfe 410 /** Selected window mode. */
mbed_official 15:a81a8d6c1dfe 411 enum adc_window_mode window_mode;
mbed_official 15:a81a8d6c1dfe 412 /** Lower window value. */
mbed_official 15:a81a8d6c1dfe 413 int32_t window_lower_value;
mbed_official 15:a81a8d6c1dfe 414 /** Upper window value. */
mbed_official 15:a81a8d6c1dfe 415 int32_t window_upper_value;
mbed_official 15:a81a8d6c1dfe 416 };
mbed_official 15:a81a8d6c1dfe 417
mbed_official 15:a81a8d6c1dfe 418 /**
mbed_official 15:a81a8d6c1dfe 419 * \brief ADC event enable/disable structure.
mbed_official 15:a81a8d6c1dfe 420 *
mbed_official 15:a81a8d6c1dfe 421 * Event flags for the ADC module. This is used to enable and
mbed_official 15:a81a8d6c1dfe 422 * disable events via \ref adc_enable_events() and \ref adc_disable_events().
mbed_official 15:a81a8d6c1dfe 423 */
mbed_official 15:a81a8d6c1dfe 424 struct adc_events {
mbed_official 15:a81a8d6c1dfe 425 /** Enable event generation on conversion done. */
mbed_official 15:a81a8d6c1dfe 426 bool generate_event_on_conversion_done;
mbed_official 15:a81a8d6c1dfe 427 /** Enable event generation on window monitor. */
mbed_official 15:a81a8d6c1dfe 428 bool generate_event_on_window_monitor;
mbed_official 15:a81a8d6c1dfe 429 };
mbed_official 15:a81a8d6c1dfe 430
mbed_official 15:a81a8d6c1dfe 431 /**
mbed_official 15:a81a8d6c1dfe 432 * \brief Gain and offset correction configuration structure
mbed_official 15:a81a8d6c1dfe 433 *
mbed_official 15:a81a8d6c1dfe 434 * Gain and offset correction configuration structure.
mbed_official 15:a81a8d6c1dfe 435 * Part of the \ref adc_config struct and will be initialized by
mbed_official 15:a81a8d6c1dfe 436 * \ref adc_get_config_defaults.
mbed_official 15:a81a8d6c1dfe 437 */
mbed_official 15:a81a8d6c1dfe 438 struct adc_correction_config {
mbed_official 15:a81a8d6c1dfe 439 /**
mbed_official 15:a81a8d6c1dfe 440 * Enables correction for gain and offset based on values of gain_correction and
mbed_official 15:a81a8d6c1dfe 441 * offset_correction if set to true.
mbed_official 15:a81a8d6c1dfe 442 */
mbed_official 15:a81a8d6c1dfe 443 bool correction_enable;
mbed_official 15:a81a8d6c1dfe 444 /**
mbed_official 15:a81a8d6c1dfe 445 * This value defines how the ADC conversion result is compensated for gain
mbed_official 15:a81a8d6c1dfe 446 * error before written to the result register. This is a fractional value,
mbed_official 15:a81a8d6c1dfe 447 * 1-bit integer plus an 11-bit fraction, therefore
mbed_official 15:a81a8d6c1dfe 448 * 1/2 <= gain_correction < 2. Valid \c gain_correction values ranges from
mbed_official 15:a81a8d6c1dfe 449 * \c 0b010000000000 to \c 0b111111111111.
mbed_official 15:a81a8d6c1dfe 450 */
mbed_official 15:a81a8d6c1dfe 451 uint16_t gain_correction;
mbed_official 15:a81a8d6c1dfe 452 /**
mbed_official 15:a81a8d6c1dfe 453 * This value defines how the ADC conversion result is compensated for
mbed_official 15:a81a8d6c1dfe 454 * offset error before written to the result register. This is a 12-bit
mbed_official 15:a81a8d6c1dfe 455 * value in two's complement format.
mbed_official 15:a81a8d6c1dfe 456 */
mbed_official 15:a81a8d6c1dfe 457 int16_t offset_correction;
mbed_official 15:a81a8d6c1dfe 458 };
mbed_official 15:a81a8d6c1dfe 459
mbed_official 15:a81a8d6c1dfe 460 /**
mbed_official 15:a81a8d6c1dfe 461 * \brief Pin scan configuration structure
mbed_official 15:a81a8d6c1dfe 462 *
mbed_official 15:a81a8d6c1dfe 463 * Pin scan configuration structure. Part of the \ref adc_config struct and will
mbed_official 15:a81a8d6c1dfe 464 * be initialized by \ref adc_get_config_defaults.
mbed_official 15:a81a8d6c1dfe 465 */
mbed_official 15:a81a8d6c1dfe 466 struct adc_pin_scan_config {
mbed_official 15:a81a8d6c1dfe 467 /**
mbed_official 15:a81a8d6c1dfe 468 * Offset (relative to selected positive input) of the first input pin to be
mbed_official 15:a81a8d6c1dfe 469 * used in pin scan mode.
mbed_official 15:a81a8d6c1dfe 470 */
mbed_official 15:a81a8d6c1dfe 471 uint8_t offset_start_scan;
mbed_official 15:a81a8d6c1dfe 472 /**
mbed_official 15:a81a8d6c1dfe 473 * Number of input pins to scan in pin scan mode. A value below two will
mbed_official 15:a81a8d6c1dfe 474 * disable pin scan mode.
mbed_official 15:a81a8d6c1dfe 475 */
mbed_official 15:a81a8d6c1dfe 476 uint8_t inputs_to_scan;
mbed_official 15:a81a8d6c1dfe 477 };
mbed_official 15:a81a8d6c1dfe 478
mbed_official 15:a81a8d6c1dfe 479 /**
mbed_official 15:a81a8d6c1dfe 480 * \brief ADC configuration structure
mbed_official 15:a81a8d6c1dfe 481 *
mbed_official 15:a81a8d6c1dfe 482 * Configuration structure for an ADC instance. This structure should be
mbed_official 15:a81a8d6c1dfe 483 * initialized by the \ref adc_get_config_defaults()
mbed_official 15:a81a8d6c1dfe 484 * function before being modified by the user application.
mbed_official 15:a81a8d6c1dfe 485 */
mbed_official 15:a81a8d6c1dfe 486 struct adc_config {
mbed_official 15:a81a8d6c1dfe 487 /** GCLK generator used to clock the peripheral. */
mbed_official 15:a81a8d6c1dfe 488 enum gclk_generator clock_source;
mbed_official 15:a81a8d6c1dfe 489 /** Voltage reference. */
mbed_official 15:a81a8d6c1dfe 490 enum adc_reference reference;
mbed_official 15:a81a8d6c1dfe 491 /** Clock prescaler. */
mbed_official 15:a81a8d6c1dfe 492 enum adc_clock_prescaler clock_prescaler;
mbed_official 15:a81a8d6c1dfe 493 /** Result resolution. */
mbed_official 15:a81a8d6c1dfe 494 enum adc_resolution resolution;
mbed_official 15:a81a8d6c1dfe 495 /** Gain factor. */
mbed_official 15:a81a8d6c1dfe 496 enum adc_gain_factor gain_factor;
mbed_official 15:a81a8d6c1dfe 497 /** Positive MUX input. */
mbed_official 15:a81a8d6c1dfe 498 enum adc_positive_input positive_input;
mbed_official 15:a81a8d6c1dfe 499 /** Negative MUX input. For singled-ended conversion mode, the negative
mbed_official 15:a81a8d6c1dfe 500 * input must be connected to ground. This ground could be the internal
mbed_official 15:a81a8d6c1dfe 501 * GND, IOGND or an external ground connected to a pin. */
mbed_official 15:a81a8d6c1dfe 502 enum adc_negative_input negative_input;
mbed_official 15:a81a8d6c1dfe 503 /** Number of ADC samples to accumulate when using the
mbed_official 15:a81a8d6c1dfe 504 * \c ADC_RESOLUTION_CUSTOM mode.Note: if the result width increases,
mbed_official 15:a81a8d6c1dfe 505 * result resolution will be changed accordingly.
mbed_official 15:a81a8d6c1dfe 506 */
mbed_official 15:a81a8d6c1dfe 507 enum adc_accumulate_samples accumulate_samples;
mbed_official 15:a81a8d6c1dfe 508 /** Division ration when using the ADC_RESOLUTION_CUSTOM mode. */
mbed_official 15:a81a8d6c1dfe 509 enum adc_divide_result divide_result;
mbed_official 15:a81a8d6c1dfe 510 /** Left adjusted result. */
mbed_official 15:a81a8d6c1dfe 511 bool left_adjust;
mbed_official 15:a81a8d6c1dfe 512 /** Enables differential mode if true.
mbed_official 15:a81a8d6c1dfe 513 * if false, ADC will run in singled-ended mode. */
mbed_official 15:a81a8d6c1dfe 514 bool differential_mode;
mbed_official 15:a81a8d6c1dfe 515 /** Enables free running mode if true. */
mbed_official 15:a81a8d6c1dfe 516 bool freerunning;
mbed_official 15:a81a8d6c1dfe 517 /** Enables ADC in standby sleep mode if true. */
mbed_official 15:a81a8d6c1dfe 518 bool run_in_standby;
mbed_official 15:a81a8d6c1dfe 519 /**
mbed_official 15:a81a8d6c1dfe 520 * Enables reference buffer offset compensation if true.
mbed_official 15:a81a8d6c1dfe 521 * This will increase the accuracy of the gain stage, but decreases the input
mbed_official 15:a81a8d6c1dfe 522 * impedance; therefore the startup time of the reference must be increased.
mbed_official 15:a81a8d6c1dfe 523 */
mbed_official 15:a81a8d6c1dfe 524 bool reference_compensation_enable;
mbed_official 15:a81a8d6c1dfe 525 /**
mbed_official 15:a81a8d6c1dfe 526 * This value (0-63) control the ADC sampling time in number of half ADC
mbed_official 15:a81a8d6c1dfe 527 * prescaled clock cycles (depends of \c ADC_PRESCALER value), thus
mbed_official 15:a81a8d6c1dfe 528 * controlling the ADC input impedance. Sampling time is set according to
mbed_official 15:a81a8d6c1dfe 529 * the formula:
mbed_official 15:a81a8d6c1dfe 530 * Sample time = (sample_length+1) * (ADCclk / 2).
mbed_official 15:a81a8d6c1dfe 531 */
mbed_official 15:a81a8d6c1dfe 532 uint8_t sample_length;
mbed_official 15:a81a8d6c1dfe 533 /** Window monitor configuration structure. */
mbed_official 15:a81a8d6c1dfe 534 struct adc_window_config window;
mbed_official 15:a81a8d6c1dfe 535 /** Gain and offset correction configuration structure. */
mbed_official 15:a81a8d6c1dfe 536 struct adc_correction_config correction;
mbed_official 15:a81a8d6c1dfe 537 /** Event action to take on incoming event. */
mbed_official 15:a81a8d6c1dfe 538 enum adc_event_action event_action;
mbed_official 15:a81a8d6c1dfe 539 /** Pin scan configuration structure. */
mbed_official 15:a81a8d6c1dfe 540 struct adc_pin_scan_config pin_scan;
mbed_official 15:a81a8d6c1dfe 541 };
mbed_official 15:a81a8d6c1dfe 542
mbed_official 15:a81a8d6c1dfe 543 /**
mbed_official 15:a81a8d6c1dfe 544 * \brief ADC software device instance structure.
mbed_official 15:a81a8d6c1dfe 545 *
mbed_official 15:a81a8d6c1dfe 546 * ADC software instance structure, used to retain software state information
mbed_official 15:a81a8d6c1dfe 547 * of an associated hardware module instance.
mbed_official 15:a81a8d6c1dfe 548 *
mbed_official 15:a81a8d6c1dfe 549 * \note The fields of this structure should not be altered by the user
mbed_official 15:a81a8d6c1dfe 550 * application; they are reserved for module-internal use only.
mbed_official 15:a81a8d6c1dfe 551 */
mbed_official 15:a81a8d6c1dfe 552 struct adc_module {
mbed_official 15:a81a8d6c1dfe 553 #if !defined(__DOXYGEN__)
mbed_official 15:a81a8d6c1dfe 554 /** Pointer to ADC hardware module. */
mbed_official 15:a81a8d6c1dfe 555 Adc *hw;
mbed_official 15:a81a8d6c1dfe 556 /** Keep reference configuration so we know when enable is called. */
mbed_official 15:a81a8d6c1dfe 557 enum adc_reference reference;
mbed_official 15:a81a8d6c1dfe 558 # if ADC_CALLBACK_MODE == true
mbed_official 15:a81a8d6c1dfe 559 /** Array to store callback functions. */
mbed_official 15:a81a8d6c1dfe 560 adc_callback_t callback[ADC_CALLBACK_N];
mbed_official 15:a81a8d6c1dfe 561 /** Pointer to buffer used for ADC results. */
mbed_official 15:a81a8d6c1dfe 562 volatile uint16_t *job_buffer;
mbed_official 15:a81a8d6c1dfe 563 /** Remaining number of conversions in current job. */
mbed_official 15:a81a8d6c1dfe 564 volatile uint16_t remaining_conversions;
mbed_official 15:a81a8d6c1dfe 565 /** Bit mask for callbacks registered. */
mbed_official 15:a81a8d6c1dfe 566 uint8_t registered_callback_mask;
mbed_official 15:a81a8d6c1dfe 567 /** Bit mask for callbacks enabled. */
mbed_official 15:a81a8d6c1dfe 568 uint8_t enabled_callback_mask;
mbed_official 15:a81a8d6c1dfe 569 /** Holds the status of the ongoing or last conversion job. */
mbed_official 15:a81a8d6c1dfe 570 volatile enum status_code job_status;
mbed_official 15:a81a8d6c1dfe 571 /** If software triggering is needed. */
mbed_official 15:a81a8d6c1dfe 572 bool software_trigger;
mbed_official 15:a81a8d6c1dfe 573 # endif
mbed_official 15:a81a8d6c1dfe 574 #endif
mbed_official 15:a81a8d6c1dfe 575 };
mbed_official 15:a81a8d6c1dfe 576
mbed_official 15:a81a8d6c1dfe 577 #if !defined(__DOXYGEN__)
mbed_official 15:a81a8d6c1dfe 578
mbed_official 15:a81a8d6c1dfe 579 /**
mbed_official 15:a81a8d6c1dfe 580 * \brief Determines if the hardware module(s) are currently synchronizing to the bus.
mbed_official 15:a81a8d6c1dfe 581 *
mbed_official 15:a81a8d6c1dfe 582 * Checks to see if the underlying hardware peripheral module(s) are currently
mbed_official 15:a81a8d6c1dfe 583 * synchronizing across multiple clock domains to the hardware bus. This
mbed_official 15:a81a8d6c1dfe 584 * function can be used to delay further operations on a module until such time
mbed_official 15:a81a8d6c1dfe 585 * that it is ready, to prevent blocking delays for synchronization in the
mbed_official 15:a81a8d6c1dfe 586 * user application.
mbed_official 15:a81a8d6c1dfe 587 *
mbed_official 15:a81a8d6c1dfe 588 * \param[in] module_inst Pointer to the ADC software instance struct
mbed_official 15:a81a8d6c1dfe 589 *
mbed_official 15:a81a8d6c1dfe 590 * \return Synchronization status of the underlying hardware module(s).
mbed_official 15:a81a8d6c1dfe 591 *
mbed_official 15:a81a8d6c1dfe 592 * \retval true if the module synchronization is ongoing
mbed_official 15:a81a8d6c1dfe 593 * \retval false if the module has completed synchronization
mbed_official 15:a81a8d6c1dfe 594 */
mbed_official 15:a81a8d6c1dfe 595 static inline bool adc_is_syncing(
mbed_official 15:a81a8d6c1dfe 596 struct adc_module *const module_inst)
mbed_official 15:a81a8d6c1dfe 597 {
mbed_official 15:a81a8d6c1dfe 598 /* Sanity check arguments */
mbed_official 15:a81a8d6c1dfe 599 Assert(module_inst);
mbed_official 15:a81a8d6c1dfe 600
mbed_official 15:a81a8d6c1dfe 601 Adc *const adc_module = module_inst->hw;
mbed_official 15:a81a8d6c1dfe 602
mbed_official 15:a81a8d6c1dfe 603 if (adc_module->STATUS.reg & ADC_STATUS_SYNCBUSY) {
mbed_official 15:a81a8d6c1dfe 604 return true;
mbed_official 15:a81a8d6c1dfe 605 }
mbed_official 15:a81a8d6c1dfe 606
mbed_official 15:a81a8d6c1dfe 607 return false;
mbed_official 15:a81a8d6c1dfe 608 }
mbed_official 15:a81a8d6c1dfe 609 #endif
mbed_official 15:a81a8d6c1dfe 610
mbed_official 15:a81a8d6c1dfe 611 /**
mbed_official 15:a81a8d6c1dfe 612 * \name ADC Gain and Pin Scan Mode
mbed_official 15:a81a8d6c1dfe 613 * @{
mbed_official 15:a81a8d6c1dfe 614 */
mbed_official 15:a81a8d6c1dfe 615
mbed_official 15:a81a8d6c1dfe 616 /**
mbed_official 15:a81a8d6c1dfe 617 * \brief Sets ADC gain factor
mbed_official 15:a81a8d6c1dfe 618 *
mbed_official 15:a81a8d6c1dfe 619 * Sets the ADC gain factor to a specified gain setting.
mbed_official 15:a81a8d6c1dfe 620 *
mbed_official 15:a81a8d6c1dfe 621 * \param[in] module_inst Pointer to the ADC software instance struct
mbed_official 15:a81a8d6c1dfe 622 * \param[in] gain_factor Gain factor value to set
mbed_official 15:a81a8d6c1dfe 623 */
mbed_official 15:a81a8d6c1dfe 624 static inline void adc_set_gain(
mbed_official 15:a81a8d6c1dfe 625 struct adc_module *const module_inst,
mbed_official 15:a81a8d6c1dfe 626 const enum adc_gain_factor gain_factor)
mbed_official 15:a81a8d6c1dfe 627 {
mbed_official 15:a81a8d6c1dfe 628 /* Sanity check arguments */
mbed_official 15:a81a8d6c1dfe 629 Assert(module_inst);
mbed_official 15:a81a8d6c1dfe 630 Assert(module_inst->hw);
mbed_official 15:a81a8d6c1dfe 631
mbed_official 15:a81a8d6c1dfe 632 Adc *const adc_module = module_inst->hw;
mbed_official 15:a81a8d6c1dfe 633
mbed_official 15:a81a8d6c1dfe 634 while (adc_is_syncing(module_inst)) {
mbed_official 15:a81a8d6c1dfe 635 /* Wait for synchronization */
mbed_official 15:a81a8d6c1dfe 636 }
mbed_official 15:a81a8d6c1dfe 637
mbed_official 15:a81a8d6c1dfe 638 /* Set new gain factor */
mbed_official 15:a81a8d6c1dfe 639 adc_module->INPUTCTRL.reg =
mbed_official 15:a81a8d6c1dfe 640 (adc_module->INPUTCTRL.reg & ~ADC_INPUTCTRL_GAIN_Msk) |
mbed_official 15:a81a8d6c1dfe 641 (gain_factor);
mbed_official 15:a81a8d6c1dfe 642 }
mbed_official 15:a81a8d6c1dfe 643
mbed_official 15:a81a8d6c1dfe 644 /**
mbed_official 15:a81a8d6c1dfe 645 * \brief Sets the ADC pin scan mode
mbed_official 15:a81a8d6c1dfe 646 *
mbed_official 15:a81a8d6c1dfe 647 * Configures the pin scan mode of the ADC module. In pin scan mode, the first
mbed_official 15:a81a8d6c1dfe 648 * conversion will start at the configured positive input + start_offset. When
mbed_official 15:a81a8d6c1dfe 649 * a conversion is done, a conversion will start on the next input, until
mbed_official 15:a81a8d6c1dfe 650 * \c inputs_to_scan number of conversions are made.
mbed_official 15:a81a8d6c1dfe 651 *
mbed_official 15:a81a8d6c1dfe 652 * \param[in] module_inst Pointer to the ADC software instance struct
mbed_official 15:a81a8d6c1dfe 653 * \param[in] inputs_to_scan Number of input pins to perform a conversion on
mbed_official 15:a81a8d6c1dfe 654 * (must be two or more)
mbed_official 15:a81a8d6c1dfe 655 * \param[in] start_offset Offset of first pin to scan (relative to
mbed_official 15:a81a8d6c1dfe 656 * configured positive input)
mbed_official 15:a81a8d6c1dfe 657 *
mbed_official 15:a81a8d6c1dfe 658 * \return Status of the pin scan configuration set request.
mbed_official 15:a81a8d6c1dfe 659 *
mbed_official 15:a81a8d6c1dfe 660 * \retval STATUS_OK Pin scan mode has been set successfully
mbed_official 15:a81a8d6c1dfe 661 * \retval STATUS_ERR_INVALID_ARG Number of input pins to scan or offset has
mbed_official 15:a81a8d6c1dfe 662 * an invalid value
mbed_official 15:a81a8d6c1dfe 663 */
mbed_official 15:a81a8d6c1dfe 664 static inline enum status_code adc_set_pin_scan_mode(
mbed_official 15:a81a8d6c1dfe 665 struct adc_module *const module_inst,
mbed_official 15:a81a8d6c1dfe 666 uint8_t inputs_to_scan,
mbed_official 15:a81a8d6c1dfe 667 const uint8_t start_offset)
mbed_official 15:a81a8d6c1dfe 668
mbed_official 15:a81a8d6c1dfe 669 {
mbed_official 15:a81a8d6c1dfe 670 /* Sanity check arguments */
mbed_official 15:a81a8d6c1dfe 671 Assert(module_inst);
mbed_official 15:a81a8d6c1dfe 672 Assert(module_inst->hw);
mbed_official 15:a81a8d6c1dfe 673
mbed_official 15:a81a8d6c1dfe 674 Adc *const adc_module = module_inst->hw;
mbed_official 15:a81a8d6c1dfe 675
mbed_official 15:a81a8d6c1dfe 676 if (inputs_to_scan > 0) {
mbed_official 15:a81a8d6c1dfe 677 /*
mbed_official 15:a81a8d6c1dfe 678 * Number of input sources included is the value written to INPUTSCAN
mbed_official 15:a81a8d6c1dfe 679 * plus 1.
mbed_official 15:a81a8d6c1dfe 680 */
mbed_official 15:a81a8d6c1dfe 681 inputs_to_scan--;
mbed_official 15:a81a8d6c1dfe 682 }
mbed_official 15:a81a8d6c1dfe 683
mbed_official 15:a81a8d6c1dfe 684 if (inputs_to_scan > (ADC_INPUTCTRL_INPUTSCAN_Msk >> ADC_INPUTCTRL_INPUTSCAN_Pos) ||
mbed_official 15:a81a8d6c1dfe 685 start_offset > (ADC_INPUTCTRL_INPUTOFFSET_Msk >> ADC_INPUTCTRL_INPUTOFFSET_Pos)) {
mbed_official 15:a81a8d6c1dfe 686 /* Invalid number of input pins */
mbed_official 15:a81a8d6c1dfe 687 return STATUS_ERR_INVALID_ARG;
mbed_official 15:a81a8d6c1dfe 688 }
mbed_official 15:a81a8d6c1dfe 689
mbed_official 15:a81a8d6c1dfe 690 while (adc_is_syncing(module_inst)) {
mbed_official 15:a81a8d6c1dfe 691 /* Wait for synchronization */
mbed_official 15:a81a8d6c1dfe 692 }
mbed_official 15:a81a8d6c1dfe 693
mbed_official 15:a81a8d6c1dfe 694 /* Set pin scan mode */
mbed_official 15:a81a8d6c1dfe 695 adc_module->INPUTCTRL.reg =
mbed_official 15:a81a8d6c1dfe 696 (adc_module->INPUTCTRL.reg &
mbed_official 15:a81a8d6c1dfe 697 ~(ADC_INPUTCTRL_INPUTSCAN_Msk | ADC_INPUTCTRL_INPUTOFFSET_Msk)) |
mbed_official 15:a81a8d6c1dfe 698 (start_offset << ADC_INPUTCTRL_INPUTOFFSET_Pos) |
mbed_official 15:a81a8d6c1dfe 699 (inputs_to_scan << ADC_INPUTCTRL_INPUTSCAN_Pos);
mbed_official 15:a81a8d6c1dfe 700
mbed_official 15:a81a8d6c1dfe 701 return STATUS_OK;
mbed_official 15:a81a8d6c1dfe 702 }
mbed_official 15:a81a8d6c1dfe 703
mbed_official 15:a81a8d6c1dfe 704 /**
mbed_official 15:a81a8d6c1dfe 705 * \brief Disables pin scan mode
mbed_official 15:a81a8d6c1dfe 706 *
mbed_official 15:a81a8d6c1dfe 707 * Disables pin scan mode. The next conversion will be made on only one pin
mbed_official 15:a81a8d6c1dfe 708 * (the configured positive input pin).
mbed_official 15:a81a8d6c1dfe 709 *
mbed_official 15:a81a8d6c1dfe 710 * \param[in] module_inst Pointer to the ADC software instance struct
mbed_official 15:a81a8d6c1dfe 711 */
mbed_official 15:a81a8d6c1dfe 712 static inline void adc_disable_pin_scan_mode(
mbed_official 15:a81a8d6c1dfe 713 struct adc_module *const module_inst)
mbed_official 15:a81a8d6c1dfe 714 {
mbed_official 15:a81a8d6c1dfe 715 /* Disable pin scan mode */
mbed_official 15:a81a8d6c1dfe 716 adc_set_pin_scan_mode(module_inst, 0, 0);
mbed_official 15:a81a8d6c1dfe 717 }
mbed_official 15:a81a8d6c1dfe 718
mbed_official 15:a81a8d6c1dfe 719 /** @} */
mbed_official 15:a81a8d6c1dfe 720
mbed_official 15:a81a8d6c1dfe 721 #ifdef __cplusplus
mbed_official 15:a81a8d6c1dfe 722 }
mbed_official 15:a81a8d6c1dfe 723 #endif
mbed_official 15:a81a8d6c1dfe 724
mbed_official 15:a81a8d6c1dfe 725 /** @} */
mbed_official 15:a81a8d6c1dfe 726
mbed_official 15:a81a8d6c1dfe 727 #endif /* ADC_FEATURE_H_INCLUDED */
mbed_official 15:a81a8d6c1dfe 728