SWRZ078C January 2018 – December 2020 CC1312R
Periodic ADC trigger at 200 kHz rate can be ignored when XOSC_HF is turned on or off
Revision E and earlier
There is no dedicated clock source selection for the ADC clock. The clock is derived from either XOSC_HF or RCOSC_HF, but defaults to XOSC_HF-derived clock whenever this is turned on.
When the ADC clock source is switched from RCOSC_HF to XOSC_HF-derived clock, the clock will stop for 2 cycles (24 MHz).
When the ADC clock source is switched from XOSC_HF-derived clock to RCOSC_HF-derived clock, the clock will stop for additionally 12 clock cycles, as the RCOSC_HF-derived clock is not ready when switch is done.
The fact that the clock is stopped, together with the difference in frequency between XOSC_HF and RCOSC_HF, may cause the ADC sampling and conversion to finish too late to catch the next trigger.
Use asynchronous sampling.
The sampling period after the issue occurs can be reduced by up to 20% (12 + 1 clock cycles at 24 MHz)
To use the ADC in asynchronous mode from the Sensor Controller:
Call adcEnableAsync()
to enable the ADC, instead of adcEnableSync()
Example:
adcEnableAsync(ADC_REF_FIXED, ADC_TRIGGER_AUX_TIMER0);
To use the ADC in asynchronous mode from the System CPU, by using the ADCBuf driver:
ADCBuf_Params params;
ADCBufCC26X2_ParamsExtension paramsExtension;
ADCBuf_Params_init(¶ms);
ADCBufCC26X2_ParamsExtension_init(¶msExtension);
paramsExtension.samplingMode = ADCBufCC26X2_SAMPING_MODE_ASYNCHRONOUS;
params.custom = ¶msExtension;
To use the ADC in asynchronous mode from the System CPU, by using DriverLib API:
Call AUXADCEnableAsync()
to enable the ADC, instead of AUXADCEnableSync()
Example:
AUXADCEnableAsync(AUXADC_REF_FIXED, AUXADC_TRIGGER_GPT0A);
Please note the difference between the asynchronous and synchronous ADC modes:
Ensure that XOSC_HF is not turned on or off while the ADC is used.
Increase the sampling period by (12+1)/24 µs or more.