CC26xx Driver Library
[aux_adc] AUX Analog to Digital Converter

Functions

void AUXADCDisable (void)
 Disables the ADC. More...
 
void AUXADCEnableAsync (uint32_t refSource, uint32_t trigger)
 Enables the ADC for asynchronous operation. More...
 
void AUXADCEnableSync (uint32_t refSource, uint32_t sampleTime, uint32_t trigger)
 Enables the ADC for synchronous operation. More...
 
void AUXADCDisableInputScaling (void)
 Disables scaling of the ADC input. More...
 
void AUXADCFlushFifo (void)
 Flushes the ADC FIFO. More...
 
static void AUXADCGenManualTrigger (void)
 Generates a single manual ADC trigger. More...
 
static uint32_t AUXADCGetFifoStatus (void)
 Returns flags indicating the status of the ADC FIFO. More...
 
uint32_t AUXADCReadFifo (void)
 Waits for and returns the first sample in the ADC FIFO. More...
 
uint32_t AUXADCPopFifo (void)
 Returns the first sample in the ADC FIFO, without waiting. More...
 
static void AUXADCSelectInput (uint32_t input)
 Selects internal or external input for the ADC. More...
 
int32_t AUXADCGetAdjustmentGain (uint32_t refSource)
 Returns the gain value used when adjusting for ADC gain/offset. More...
 
int32_t AUXADCGetAdjustmentOffset (uint32_t refSource)
 Returns the offset value used when adjusting for ADC gain/offset. More...
 
int32_t AUXADCValueToMicrovolts (int32_t fixedRefVoltage, int32_t adcValue)
 Converts an "adjusted" ADC value to microvolts. More...
 
int32_t AUXADCMicrovoltsToValue (int32_t fixedRefVoltage, int32_t microvolts)
 Converts a number of microvolts to corresponding "adjusted" ADC value. More...
 
int32_t AUXADCAdjustValueForGainAndOffset (int32_t adcValue, int32_t gain, int32_t offset)
 Performs ADC value gain and offset adjustment. More...
 
int32_t AUXADCUnadjustValueForGainAndOffset (int32_t adcValue, int32_t gain, int32_t offset)
 Performs the inverse of the ADC value gain and offset adjustment. More...
 

Detailed Description

Function Documentation

int32_t AUXADCAdjustValueForGainAndOffset ( int32_t  adcValue,
int32_t  gain,
int32_t  offset 
)

Performs ADC value gain and offset adjustment.

This function takes a measured ADC value compensates for the internal gain and offset in the ADC.

Parameters
adcValue12-bit ADC unadjusted value
gainGain adjustment value provided by AUXADCGetAdjustmentGain()
offsetOffset adjustment value provided by AUXADCGetAdjustmentOffset()
Returns
12-bit ADC adjusted value
300 {
301  // Apply gain and offset adjustment
302  adcValue = (((adcValue + offset) * gain) + 16384) / 32768;
303 
304  // Saturate
305  if (adcValue < 0) {
306  return 0;
307  } else if (adcValue > 4095) {
308  return 4095;
309  } else {
310  return adcValue;
311  }
312 }
void AUXADCDisable ( void  )

Disables the ADC.

This function must be called:

88 {
89  // Disable the ADC reference
91 
92  // Assert reset and disable the ADC
94 
95  // Ensure that scaling is enabled by default before next use of the ADC
97 
98  // Disable the ADC clock (no need to wait since IOB_WUC_ADCCLKCTL_ACK goes low immediately)
99  HWREG(AUX_WUC_BASE + AUX_WUC_O_ADCCLKCTL) = 0;
100 
101  // Disable the ADC data interface
102  HWREG(AUX_ANAIF_BASE + AUX_ANAIF_O_ADCCTL) = 0;
103 }
static void ADI8BitsClear(uint32_t ui32Base, uint32_t ui32Reg, uint8_t ui8Val)
Clear specific bits in an 8 bit ADI register.
Definition: adi.h:550

Here is the call graph for this function:

void AUXADCDisableInputScaling ( void  )

Disables scaling of the ADC input.

By default, the ADC operates internally on a version of the input signal that has been scaled down by a factor 1408 / 4095. This function disables that scaling, allowing for a trade-off between dynamic range and and resolution.

Note
This function must only be called while the ADC is disabled, before calling AUXADCEnableSync() or AUXADCEnableAsync().
Different input maximum ratings apply when input scaling is disabled. Violating these may damage the device.
184 {
186 }
static void ADI8BitsSet(uint32_t ui32Base, uint32_t ui32Reg, uint8_t ui8Val)
Set specific bits in a single 8 bit ADI register.
Definition: adi.h:397

Here is the call graph for this function:

void AUXADCEnableAsync ( uint32_t  refSource,
uint32_t  trigger 
)

Enables the ADC for asynchronous operation.

In asynchronous operation, the ADC samples continuously between conversions.

The ADC trigger starts the conversion. Note that the first conversion may be invalid if the sampling period is too short.

ADC input scaling is enabled by default after device reset, and is also re- enabled by AUXADCDisable(). To disable input scaling, call AUXADCDisableInputScaling() before calling AUXADCEnableAsync().

Parameters
refSourceADC reference source:
triggerADC conversion trigger:
112 {
113  // Enable the ADC reference, with the following options:
114  // - SRC: Set when using relative reference
115  // - REF_ON_IDLE: Always cleared since there is no idle state in asynchronous operation
117 
118  // Enable the ADC clock
121 
122  // Enable the ADC data interface
123  if (trigger == AUXADC_TRIGGER_MANUAL) {
124  // Manual trigger: No need to configure event routing from GPT
126  } else {
127  // GPT trigger: Configure event routing via MCU_EV to the AUX domain
128  HWREG(EVENT_BASE + EVENT_O_AUXSEL0) = trigger;
130  }
131 
132  // Configure the ADC
134 
135  // Release reset and enable the ADC
137 }
static void ADI8BitsSet(uint32_t ui32Base, uint32_t ui32Reg, uint8_t ui8Val)
Set specific bits in a single 8 bit ADI register.
Definition: adi.h:397
#define AUXADC_TRIGGER_MANUAL
Definition: aux_adc.h:126

Here is the call graph for this function:

void AUXADCEnableSync ( uint32_t  refSource,
uint32_t  sampleTime,
uint32_t  trigger 
)

Enables the ADC for synchronous operation.

In synchronous operation, the ADC is idle between a conversion and subsequent samplings.

The ADC trigger starts sampling with specified duration, followed by the conversion. Note that the first conversion may be invalid if the initial sampling period is too short.

ADC input scaling is enabled by default after device reset, and is also re- enabled by AUXADCDisable(). To disable input scaling, call AUXADCDisableInputScaling() before calling AUXADCEnableSync().

Parameters
refSourceADC reference source:
sampleTimeADC sampling time:
triggerADC conversion trigger:
146 {
147  // Enable the ADC reference, with the following options:
148  // - SRC: Set when using relative reference
149  // - REF_ON_IDLE: Set when using fixed reference and sample time < 21.3 us
150  uint8_t adcref0 = refSource | ADI_4_AUX_ADCREF0_EN_M;
151  if (!refSource && (sampleTime < AUXADC_SAMPLE_TIME_21P3_US)) {
153  }
155 
156  // Enable the ADC clock
159 
160  // Enable the ADC data interface
161  if (trigger == AUXADC_TRIGGER_MANUAL) {
162  // Manual trigger: No need to configure event routing from GPT
164  } else {
165  // GPT trigger: Configure event routing via MCU_EV to the AUX domain
166  HWREG(EVENT_BASE + EVENT_O_AUXSEL0) = trigger;
168  }
169 
170  // Configure the ADC
172 
173  // Release reset and enable the ADC
175 }
#define AUXADC_SAMPLE_TIME_21P3_US
Definition: aux_adc.h:144
static void ADI8BitsSet(uint32_t ui32Base, uint32_t ui32Reg, uint8_t ui8Val)
Set specific bits in a single 8 bit ADI register.
Definition: adi.h:397
#define AUXADC_TRIGGER_MANUAL
Definition: aux_adc.h:126

Here is the call graph for this function:

void AUXADCFlushFifo ( void  )

Flushes the ADC FIFO.

This empties the FIFO and clears the underflow/overflow flags.

Note: This function must only be called while the ADC is enabled.

195 {
196  HWREGBITW(AUX_ANAIF_BASE + AUX_ANAIF_O_ADCCTL, 1) = 1; // CMD: EN(1) -> FLUSH(3)
197  HWREGBITW(AUX_ANAIF_BASE + AUX_ANAIF_O_ADCCTL, 1) = 0; // CMD: FLUSH(3) -> EN(1)
198 }
static void AUXADCGenManualTrigger ( void  )
inlinestatic

Generates a single manual ADC trigger.

For synchronous mode, the trigger starts sampling followed by conversion. For asynchronous mode, the trigger starts conversion.

303 {
304  HWREG(AUX_ANAIF_BASE + AUX_ANAIF_O_ADCTRIG) = 0;
305 }
int32_t AUXADCGetAdjustmentGain ( uint32_t  refSource)

Returns the gain value used when adjusting for ADC gain/offset.

The function returns the gain value to be used with AUXADCAdjustValueForGainAndOffset() or AUXADCUnadjustValueForGainAndOffset(). The gain value is found during chip manufacturing and is stored in the factory configuration, FCFG1.

Parameters
refSourceADC reference source:
Returns
The gain value to be used in adjustments
235 {
236  int32_t gain;
237  if (refSource == AUXADC_REF_FIXED) {
238  // AUXADC_REF_FIXED ==> ABS_GAIN
240  } else {
241  // AUXADC_REF_VDDS_REL ==> REL_GAIN
243  }
244  return gain;
245 }
#define AUXADC_REF_FIXED
Definition: aux_adc.h:107
int32_t AUXADCGetAdjustmentOffset ( uint32_t  refSource)

Returns the offset value used when adjusting for ADC gain/offset.

The function returns the offset value to be used with AUXADCAdjustValueForGainAndOffset() or AUXADCUnadjustValueForGainAndOffset(). The offset value is found during chip manufacturing and is stored in the factory configuration, FCFG1.

Parameters
refSourceADC reference source:
Returns
The offset value to be used in adjustments
254 {
255  int8_t offset;
256  if ( refSource == AUXADC_REF_FIXED ) {
257  // AUXADC_REF_FIXED ==> ABS_OFFSET
259  } else {
260  // AUXADC_REF_VDDS_REL ==> REL_OFFSET
262  }
263  return offset;
264 }
#define AUXADC_REF_FIXED
Definition: aux_adc.h:107
static uint32_t AUXADCGetFifoStatus ( void  )
inlinestatic

Returns flags indicating the status of the ADC FIFO.

The flags indicate FIFO empty, full and almost full, and whether overflow/underflow has occurred.

Returns
A combination (bitwise OR) of the following flags:
325 {
326  return HWREG(AUX_ANAIF_BASE + AUX_ANAIF_O_ADCFIFOSTAT);
327 }
int32_t AUXADCMicrovoltsToValue ( int32_t  fixedRefVoltage,
int32_t  microvolts 
)

Converts a number of microvolts to corresponding "adjusted" ADC value.

This function can only be used when measuring with fixed ADC reference (AUXADC_REF_FIXED). The specified reference voltage accounts for whether the sampled ADC input is scaled down before conversion or not.

Parameters
fixedRefVoltageFixed reference voltage, in microvolts
microvoltsThe number of microvolts
Returns
The corresponding expected ADC value (adjusted for ADC gain/offset)
286 {
287  // Chop off 4 bits during calculations to avoid 32-bit overflow
288  fixedRefVoltage >>= 4;
289  microvolts >>= 4;
290  return ((microvolts * 4095) + (fixedRefVoltage / 2)) / fixedRefVoltage;
291 }
uint32_t AUXADCPopFifo ( void  )

Returns the first sample in the ADC FIFO, without waiting.

This function does not wait, and must only be called when there is at least one sample in the ADC FIFO. Otherwise the call will generate FIFO underflow (AUXADC_FIFO_UNDERFLOW_M).

Returns
The first (12-bit) sample from the ADC FIFO, or an undefined value if the FIFO is empty
221  {
222 
223  // Return the first sample from the FIFO. If the FIFO is empty, this
224  // generates ADC FIFO underflow
225  return HWREG(AUX_ANAIF_BASE + AUX_ANAIF_O_ADCFIFO);
226 }
uint32_t AUXADCReadFifo ( void  )

Waits for and returns the first sample in the ADC FIFO.

This function waits until there is at least one sample in the ADC FIFO. It then pops and returns the first sample from the FIFO.

Note
This procedure will deadlock if called without setting up ADC trigger generation in advance. The trigger can either be manual or periodical (using a GPT).
Returns
The first (12-bit) sample from the ADC FIFO
206  {
207 
208  // Wait until there is at least one sample in the FIFO
210 
211  // Return the first sample from the FIFO
212  return HWREG(AUX_ANAIF_BASE + AUX_ANAIF_O_ADCFIFO);
213 }
static void AUXADCSelectInput ( uint32_t  input)
inlinestatic

Selects internal or external input for the ADC.

Note that calling this function also selects the same input for AUX_COMPB.

Parameters
inputInternal/external input selection:
382 {
384 }
#define HapiSelectADCCompBInput(a)
Definition: rom.h:160
int32_t AUXADCUnadjustValueForGainAndOffset ( int32_t  adcValue,
int32_t  gain,
int32_t  offset 
)

Performs the inverse of the ADC value gain and offset adjustment.

This function finds the expected measured ADC value, without gain and offset compensation, for a given "ideal" ADC value. The function can for example be used to find ADC value thresholds to be used in Sensor Controller task configurations.

Parameters
adcValue12-bit ADC adjusted value
gainGain adjustment value provided by AUXADCGetAdjustmentGain()
offsetOffset adjustment value provided by AUXADCGetAdjustmentOffset()
Returns
12-bit ADC unadjusted value
321 {
322  // Apply inverse gain and offset adjustment
323  adcValue = (((adcValue * 32768) + (gain / 2)) / gain) - offset;
324 
325  // Saturate
326  if (adcValue < 0) {
327  return 0;
328  } else if (adcValue > 4095) {
329  return 4095;
330  } else {
331  return adcValue;
332  }
333 }
int32_t AUXADCValueToMicrovolts ( int32_t  fixedRefVoltage,
int32_t  adcValue 
)

Converts an "adjusted" ADC value to microvolts.

This function can only be used when measuring with fixed ADC reference (AUXADC_REF_FIXED). The specified reference voltage accounts for whether the sampled ADC input is scaled down before conversion or not.

Parameters
fixedRefVoltageFixed reference voltage, in microvolts
adcValueThe ADC value
Returns
The corresponding number of microvolts
273 {
274  // Chop off 4 bits during calculations to avoid 32-bit overflow
275  fixedRefVoltage >>= 4;
276  return (((adcValue * fixedRefVoltage) + 2047) / 4095) << 4;
277 }

Macro Definition Documentation

#define AUXADC_FIFO_ALMOST_FULL_M   (AUX_ANAIF_ADCFIFOSTAT_ALMOST_FULL_M)
#define AUXADC_FIFO_EMPTY_M   (AUX_ANAIF_ADCFIFOSTAT_EMPTY_M)
#define AUXADC_FIFO_FULL_M   (AUX_ANAIF_ADCFIFOSTAT_FULL_M)
#define AUXADC_FIFO_OVERFLOW_M   (AUX_ANAIF_ADCFIFOSTAT_OVERFLOW_M)
#define AUXADC_FIFO_UNDERFLOW_M   (AUX_ANAIF_ADCFIFOSTAT_UNDERFLOW_M)
#define AUXADC_FIXED_REF_VOLTAGE_NORMAL   4300000
#define AUXADC_FIXED_REF_VOLTAGE_UNSCALED   1478500
#define AUXADC_REF_FIXED   (0 << ADI_4_AUX_ADCREF0_SRC_S)
#define AUXADC_REF_VDDS_REL   (1 << ADI_4_AUX_ADCREF0_SRC_S)
#define AUXADC_SAMPLE_TIME_10P6_US   5
#define AUXADC_SAMPLE_TIME_10P9_MS   15
#define AUXADC_SAMPLE_TIME_170_US   9
#define AUXADC_SAMPLE_TIME_1P37_MS   12
#define AUXADC_SAMPLE_TIME_21P3_US   6

Referenced by AUXADCEnableSync().

#define AUXADC_SAMPLE_TIME_2P73_MS   13
#define AUXADC_SAMPLE_TIME_2P7_US   3
#define AUXADC_SAMPLE_TIME_341_US   10
#define AUXADC_SAMPLE_TIME_42P6_US   7
#define AUXADC_SAMPLE_TIME_5P3_US   4
#define AUXADC_SAMPLE_TIME_5P46_MS   14
#define AUXADC_SAMPLE_TIME_682_US   11
#define AUXADC_SAMPLE_TIME_85P3_US   8
#define AUXADC_TRIGGER_GPT0A   (EVENT_AUXSEL0_EV_GPT0A)
#define AUXADC_TRIGGER_GPT0B   (EVENT_AUXSEL0_EV_GPT0B)
#define AUXADC_TRIGGER_GPT1A   (EVENT_AUXSEL0_EV_GPT1A)
#define AUXADC_TRIGGER_GPT1B   (EVENT_AUXSEL0_EV_GPT1B)
#define AUXADC_TRIGGER_GPT2A   (EVENT_AUXSEL0_EV_GPT2A)
#define AUXADC_TRIGGER_GPT2B   (EVENT_AUXSEL0_EV_GPT2B)
#define AUXADC_TRIGGER_GPT3A   (EVENT_AUXSEL0_EV_GPT3A)
#define AUXADC_TRIGGER_GPT3B   (EVENT_AUXSEL0_EV_GPT3B)
#define AUXADC_TRIGGER_MANUAL   (EVENT_AUXSEL0_EV_NONE)