|
|
@@ -129,8 +129,12 @@ static inline void adc_ll_digi_set_fsm_time(uint32_t rst_wait, uint32_t start_wa
|
|
|
*/
|
|
|
static inline void adc_ll_set_sample_cycle(uint32_t sample_cycle)
|
|
|
{
|
|
|
- //To be added including RTC_CNTR reg and functions
|
|
|
- abort();
|
|
|
+ /* Should be called before writing I2C registers. */
|
|
|
+ SET_PERI_REG_MASK(RTC_CNTL_ANA_CONF_REG, RTC_CNTL_SAR_I2C_PU_M);
|
|
|
+ CLEAR_PERI_REG_MASK(ANA_CONFIG_REG, I2C_SAR_M);
|
|
|
+ SET_PERI_REG_MASK(ANA_CONFIG2_REG, ANA_SAR_CFG2_M);
|
|
|
+
|
|
|
+ REGI2C_WRITE_MASK(I2C_SAR_ADC, ADC_SAR1_SAMPLE_CYCLE_ADDR, sample_cycle);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -720,16 +724,32 @@ static inline void adc_ll_calibration_init(adc_ll_num_t adc_n)
|
|
|
/**
|
|
|
* Configure the registers for ADC calibration. You need to call the ``adc_ll_calibration_finish`` interface to resume after calibration.
|
|
|
*
|
|
|
- * @note Different ADC units and different attenuation options use different calibration data (initial data).
|
|
|
- *
|
|
|
* @param adc_n ADC index number.
|
|
|
- * @param channel adc channel number.
|
|
|
+ * @param channel Not used
|
|
|
* @param internal_gnd true: Disconnect from the IO port and use the internal GND as the calibration voltage.
|
|
|
* false: Use IO external voltage as calibration voltage.
|
|
|
*/
|
|
|
static inline void adc_ll_calibration_prepare(adc_ll_num_t adc_n, adc_channel_t channel, bool internal_gnd)
|
|
|
{
|
|
|
- abort();
|
|
|
+ /* Should be called before writing I2C registers. */
|
|
|
+ SET_PERI_REG_MASK(RTC_CNTL_ANA_CONF_REG, RTC_CNTL_SAR_I2C_PU_M);
|
|
|
+ CLEAR_PERI_REG_MASK(ANA_CONFIG_REG, I2C_SAR_M);
|
|
|
+ SET_PERI_REG_MASK(ANA_CONFIG2_REG, ANA_SAR_CFG2_M);
|
|
|
+
|
|
|
+ /* Enable/disable internal connect GND (for calibration). */
|
|
|
+ if (adc_n == ADC_NUM_1) {
|
|
|
+ if (internal_gnd) {
|
|
|
+ REGI2C_WRITE_MASK(I2C_SAR_ADC, ADC_SAR1_ENCAL_GND_ADDR, 1);
|
|
|
+ } else {
|
|
|
+ REGI2C_WRITE_MASK(I2C_SAR_ADC, ADC_SAR1_ENCAL_GND_ADDR, 0);
|
|
|
+ }
|
|
|
+ } else { //adc_n == ADC_NUM_2
|
|
|
+ if (internal_gnd) {
|
|
|
+ REGI2C_WRITE_MASK(I2C_SAR_ADC, ADC_SAR2_ENCAL_GND_ADDR, 1);
|
|
|
+ } else {
|
|
|
+ REGI2C_WRITE_MASK(I2C_SAR_ADC, ADC_SAR2_ENCAL_GND_ADDR, 0);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -739,7 +759,11 @@ static inline void adc_ll_calibration_prepare(adc_ll_num_t adc_n, adc_channel_t
|
|
|
*/
|
|
|
static inline void adc_ll_calibration_finish(adc_ll_num_t adc_n)
|
|
|
{
|
|
|
- abort();
|
|
|
+ if (adc_n == ADC_NUM_1) {
|
|
|
+ REGI2C_WRITE_MASK(I2C_SAR_ADC, ADC_SAR1_ENCAL_GND_ADDR, 0);
|
|
|
+ } else { //adc_n == ADC_NUM_2
|
|
|
+ REGI2C_WRITE_MASK(I2C_SAR_ADC, ADC_SAR2_ENCAL_GND_ADDR, 0);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|