CC26xx Driver Library
[aux_adc.h] 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
304 {
305  // Apply gain and offset adjustment
306  adcValue = (((adcValue + offset) * gain) + 16384) / 32768;
307 
308  // Saturate
309  if (adcValue < 0) {
310  return 0;
311  } else if (adcValue > 4095) {
312  return 4095;
313  } else {
314  return adcValue;
315  }
316 }
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  // Flush the FIFO before disabling the clocks
99  HWREGBITW(AUX_ANAIF_BASE + AUX_ANAIF_O_ADCCTL, 1) = 1; // CMD: EN(1) -> FLUSH(3)
100  HWREGBITW(AUX_ANAIF_BASE + AUX_ANAIF_O_ADCCTL, 1) = 0; // CMD: FLUSH(3) -> EN(1)
101 
102  // Disable the ADC clock (no need to wait since IOB_WUC_ADCCLKCTL_ACK goes low immediately)
104 
105  // Disable the ADC data interface
106  HWREG(AUX_ANAIF_BASE + AUX_ANAIF_O_ADCCTL) = 0;
107 }
static void ADI8BitsClear(uint32_t ui32Base, uint32_t ui32Reg, uint8_t ui8Val)
Clear specific bits in an 8 bit ADI register.
Definition: adi.h:514

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.
188 {
190 }
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:373

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:
116 {
117  // Enable the ADC reference, with the following options:
118  // - SRC: Set when using relative reference
119  // - REF_ON_IDLE: Always cleared since there is no idle state in asynchronous operation
121 
122  // Enable the ADC clock
125 
126  // Enable the ADC data interface
127  if (trigger == AUXADC_TRIGGER_MANUAL) {
128  // Manual trigger: No need to configure event routing from GPT
130  } else {
131  // GPT trigger: Configure event routing via MCU_EV to the AUX domain
132  HWREG(EVENT_BASE + EVENT_O_AUXSEL0) = trigger;
134  }
135 
136  // Configure the ADC
138 
139  // Release reset and enable the ADC
141 }
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:373
#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:
150 {
151  // Enable the ADC reference, with the following options:
152  // - SRC: Set when using relative reference
153  // - REF_ON_IDLE: Set when using fixed reference and sample time < 21.3 us
154  uint8_t adcref0 = refSource | ADI_4_AUX_ADCREF0_EN_M;
155  if (!refSource && (sampleTime < AUXADC_SAMPLE_TIME_21P3_US)) {
157  }
159 
160  // Enable the ADC clock
163 
164  // Enable the ADC data interface
165  if (trigger == AUXADC_TRIGGER_MANUAL) {
166  // Manual trigger: No need to configure event routing from GPT
168  } else {
169  // GPT trigger: Configure event routing via MCU_EV to the AUX domain
170  HWREG(EVENT_BASE + EVENT_O_AUXSEL0) = trigger;
172  }
173 
174  // Configure the ADC
176 
177  // Release reset and enable the ADC
179 }
#define AUXADC_SAMPLE_TIME_21P3_US
Definition: aux_adc.h:153
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:373
#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.

199 {
200  HWREGBITW(AUX_ANAIF_BASE + AUX_ANAIF_O_ADCCTL, 1) = 1; // CMD: EN(1) -> FLUSH(3)
201  HWREGBITW(AUX_ANAIF_BASE + AUX_ANAIF_O_ADCCTL, 1) = 0; // CMD: FLUSH(3) -> EN(1)
202 }
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.

312 {
313  HWREG(AUX_ANAIF_BASE + AUX_ANAIF_O_ADCTRIG) = 0;
314 }
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
239 {
240  int32_t gain;
241  if (refSource == AUXADC_REF_FIXED) {
242  // AUXADC_REF_FIXED ==> ABS_GAIN
244  } else {
245  // AUXADC_REF_VDDS_REL ==> REL_GAIN
247  }
248  return gain;
249 }
#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
258 {
259  int8_t offset;
260  if ( refSource == AUXADC_REF_FIXED ) {
261  // AUXADC_REF_FIXED ==> ABS_OFFSET
263  } else {
264  // AUXADC_REF_VDDS_REL ==> REL_OFFSET
266  }
267  return offset;
268 }
#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:
334 {
335  return HWREG(AUX_ANAIF_BASE + AUX_ANAIF_O_ADCFIFOSTAT);
336 }
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)
290 {
291  // Chop off 4 bits during calculations to avoid 32-bit overflow
292  fixedRefVoltage >>= 4;
293  microvolts >>= 4;
294  return ((microvolts * 4095) + (fixedRefVoltage / 2)) / fixedRefVoltage;
295 }
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
225  {
226 
227  // Return the first sample from the FIFO. If the FIFO is empty, this
228  // generates ADC FIFO underflow
229  return HWREG(AUX_ANAIF_BASE + AUX_ANAIF_O_ADCFIFO);
230 }
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
210  {
211 
212  // Wait until there is at least one sample in the FIFO
214 
215  // Return the first sample from the FIFO
216  return HWREG(AUX_ANAIF_BASE + AUX_ANAIF_O_ADCFIFO);
217 }
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:
391 {
393 }
#define HapiSelectADCCompBInput(a)
Definition: rom.h:156
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
325 {
326  // Apply inverse gain and offset adjustment
327  adcValue = (((adcValue * 32768) + (gain / 2)) / gain) - offset;
328 
329  // Saturate
330  if (adcValue < 0) {
331  return 0;
332  } else if (adcValue > 4095) {
333  return 4095;
334  } else {
335  return adcValue;
336  }
337 }
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
277 {
278  // Chop off 4 bits during calculations to avoid 32-bit overflow
279  fixedRefVoltage >>= 4;
280  return (((adcValue * fixedRefVoltage) + 2047) / 4095) << 4;
281 }

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_GPT0A_CMP   (EVENT_AUXSEL0_EV_GPT0A_CMP)
#define AUXADC_TRIGGER_GPT0B   (EVENT_AUXSEL0_EV_GPT0B)
#define AUXADC_TRIGGER_GPT0B_CMP   (EVENT_AUXSEL0_EV_GPT0B_CMP)
#define AUXADC_TRIGGER_GPT1A   (EVENT_AUXSEL0_EV_GPT1A)
#define AUXADC_TRIGGER_GPT1A_CMP   (EVENT_AUXSEL0_EV_GPT1A_CMP)
#define AUXADC_TRIGGER_GPT1B   (EVENT_AUXSEL0_EV_GPT1B)
#define AUXADC_TRIGGER_GPT1B_CMP   (EVENT_AUXSEL0_EV_GPT1B_CMP)
#define AUXADC_TRIGGER_GPT2A   (EVENT_AUXSEL0_EV_GPT2A)
#define AUXADC_TRIGGER_GPT2A_CMP   (EVENT_AUXSEL0_EV_GPT2A_CMP)
#define AUXADC_TRIGGER_GPT2B   (EVENT_AUXSEL0_EV_GPT2B)
#define AUXADC_TRIGGER_GPT2B_CMP   (EVENT_AUXSEL0_EV_GPT2B_CMP)
#define AUXADC_TRIGGER_GPT3A   (EVENT_AUXSEL0_EV_GPT3A)
#define AUXADC_TRIGGER_GPT3A_CMP   (EVENT_AUXSEL0_EV_GPT3A_CMP)
#define AUXADC_TRIGGER_GPT3B   (EVENT_AUXSEL0_EV_GPT3B)
#define AUXADC_TRIGGER_GPT3B_CMP   (EVENT_AUXSEL0_EV_GPT3B_CMP)
#define AUXADC_TRIGGER_MANUAL   (EVENT_AUXSEL0_EV_NONE)