ADC Exported Functions

group ADC_Exported_Functions

Functions

void ADC_DeInit(ADC_TypeDef *ADCx)

Deinitialize the ADC peripheral registers to their default reset values (turn off ADC clock).

rtl876x_adc.h

Example usage

void driver_adc_init(void)
{
   // Turn off the clock.
   ADC_DeInit(ADC);
}

Parameters:

ADCx[in] Specify ADC peripheral, can only be ADC.

Returns:

None.

void ADC_Init(ADC_TypeDef *ADCx, ADC_InitTypeDef *ADC_InitStruct)

Initialize the ADC peripheral according to the specified parameters in the ADC_InitStruct.

rtl876x_adc.h

Example usage

void driver_adc_init(void)
{
   // Turn on the clock.
   RCC_PeriphClockCmd(APBPeriph_ADC, APBPeriph_ADC_CLOCK, ENABLE);

   ADC_InitTypeDef ADC_InitStruct;
   ADC_StructInit(&ADC_InitStruct);
   ADC_InitStruct.ADC_SchIndex[0] = EXT_SINGLE_ENDED(0);
   ADC_InitStruct.ADC_SchIndex[1] = EXT_SINGLE_ENDED(1);
   ADC_InitStruct.ADC_Bitmap = 0x03;
   // Add other initialization parameters that need to be configured here.
   ADC_Init(ADC, &ADC_InitStruct);
}

Parameters:
  • ADCx[in] selected ADC peripheral.

  • ADC_InitStruct[in] pointer to an ADC_InitTypeDef structure that contains the configuration information for the specified ADC peripheral

Returns:

None.

void ADC_StructInit(ADC_InitTypeDef *ADC_InitStruct)

Fill each ADC_InitStruct member with its default value.

rtl876x_adc.h

Example usage

void driver_adc_init(void)
{
   // Turn on the clock.
   RCC_PeriphClockCmd(APBPeriph_ADC, APBPeriph_ADC_CLOCK, ENABLE);

   ADC_InitTypeDef ADC_InitStruct;
   ADC_StructInit(&ADC_InitStruct);
   ADC_InitStruct.ADC_SchIndex[0] = EXT_SINGLE_ENDED(0);
   ADC_InitStruct.ADC_SchIndex[1] = EXT_SINGLE_ENDED(1);
   ADC_InitStruct.ADC_Bitmap = 0x03;
   // Add other initialization parameters that need to be configured here.
   ADC_Init(ADC, &ADC_InitStruct);
}

Parameters:

ADC_InitStruct[in] Pointer to an ADC_InitTypeDef structure which will be initialized.

Returns:

None.

void ADC_Cmd(ADC_TypeDef *ADCx, uint8_t adcMode, FunctionalState NewState)

Enable or disable the ADC peripheral.

rtl876x_adc.h

Example usage

void board_adc_init(void)
{
    Pad_Config(P2_0, PAD_SW_MODE, PAD_IS_PWRON, PAD_PULL_NONE, PAD_OUT_DISABLE,
               PAD_OUT_LOW);

    Pad_Config(P2_1, PAD_SW_MODE, PAD_IS_PWRON, PAD_PULL_NONE, PAD_OUT_DISABLE,
               PAD_OUT_LOW);
}

void driver_adc_init(void)
{
   // Open clock
   RCC_PeriphClockCmd(APBPeriph_ADC, APBPeriph_ADC_CLOCK, ENABLE);

   ADC_InitTypeDef ADC_InitStruct;
   ADC_StructInit(&ADC_InitStruct);
   ADC_InitStruct.ADC_SchIndex[0] = EXT_SINGLE_ENDED(0);
   ADC_InitStruct.ADC_SchIndex[1] = EXT_SINGLE_ENDED(1);
   ADC_InitStruct.ADC_Bitmap = 0x03;
   // Add other initialization parameters here.
   ADC_Init(ADC, &ADC_InitStruct);

   ADC_INTConfig(ADC, ADC_INT_ONE_SHOT_DONE, ENABLE);
}

void adc_demo(void)
{
   board_adc_init();
   driver_adc_init();
   ADC_Cmd(ADC, ADC_ONE_SHOT_MODE, ENABLE);
}

Parameters:
  • ADCx[in] Specify ADC peripheral.

  • adcMode[in] ADC operation mode selection. This parameter can be one of the following values, which refer to ADC Operation Mode.

    • ADC_ONE_SHOT_MODE: One shot mode.

    • ADC_CONTINUOUS_MODE: Continuous sampling mode.

  • NewState[in] New state of the ADC peripheral. This parameter can be: ENABLE or DISABLE.

Returns:

None.

void ADC_INTConfig(ADC_TypeDef *ADCx, uint32_t ADC_INT, FunctionalState NewState)

Enable or disable the specified ADC interrupts.

rtl876x_adc.h

Example usage

void driver_adc_init(void)
{
   // Open clock
   RCC_PeriphClockCmd(APBPeriph_ADC, APBPeriph_ADC_CLOCK, ENABLE);

   ADC_InitTypeDef ADC_InitStruct;
   ADC_StructInit(&ADC_InitStruct);
   ADC_InitStruct.ADC_SchIndex[0] = EXT_SINGLE_ENDED(0);
   ADC_InitStruct.ADC_SchIndex[1] = EXT_SINGLE_ENDED(1);
   ADC_InitStruct.ADC_Bitmap = 0x03;
   // Add other initialization parameters here.
   ADC_Init(ADC, &ADC_InitStruct);

   ADC_INTConfig(ADC, ADC_INT_FIFO_RD_ERR, ENABLE);
   ADC_INTConfig(ADC, ADC_INT_ONE_SHOT_DONE, ENABLE);
}

Parameters:
  • ADCx[in] Specify ADC peripheral.

  • ADC_INT[in] Specify the ADC interrupt sources to be enabled or disabled. This parameter can be any combination of the following values, which refer to ADC Interrupts Definition.

    • ADC_INT_FIFO_RD_REQ : ADC FIFO size >= burst size interrupt.

    • ADC_INT_FIFO_RD_ERR : ADC FIFO underflow interrupt.

    • ADC_INT_FIFO_THD : ADC FIFO size > thd interrupt.

    • ADC_INT_FIFO_FULL : ADC FIFO full interrupt.

    • ADC_INT_ONE_SHOT_DONE : ADC one shot mode done interrupt.

    • ADC_INT_FIFO_OVERFLOW : ADC FIFO overflow interrupt.

  • NewState[in] New state of the specified ADC interrupt. This parameter can be: ENABLE or DISABLE.

Returns:

None.

uint16_t ADC_ReadRawData(ADC_TypeDef *ADCx, uint8_t index)

Read ADC data according to specific channel.

rtl876x_adc.h

Example usage

void board_adc_init(void)
{
    Pad_Config(P2_0, PAD_SW_MODE, PAD_IS_PWRON, PAD_PULL_NONE, PAD_OUT_DISABLE,
               PAD_OUT_LOW);

    Pad_Config(P2_1, PAD_SW_MODE, PAD_IS_PWRON, PAD_PULL_NONE, PAD_OUT_DISABLE,
               PAD_OUT_LOW);
}

void driver_adc_init(void)
{
   // Open clock
   RCC_PeriphClockCmd(APBPeriph_ADC, APBPeriph_ADC_CLOCK, ENABLE);

   ADC_InitTypeDef ADC_InitStruct;
   ADC_StructInit(&ADC_InitStruct);
   ADC_InitStruct.ADC_SchIndex[0] = EXT_SINGLE_ENDED(0);
   ADC_InitStruct.ADC_SchIndex[1] = EXT_SINGLE_ENDED(1);
   ADC_InitStruct.ADC_Bitmap = 0x03;
   // Add other initialization parameters here.
   ADC_Init(ADC, &ADC_InitStruct);

   ADC_INTConfig(ADC, ADC_INT_ONE_SHOT_DONE, ENABLE);
}

void adc_demo(void)
{
   board_adc_init();
   driver_adc_init();
   ADC_Cmd(ADC, ADC_ONE_SHOT_MODE, ENABLE);
   while(ADC_GetINTStatus(ADC, ADC_INT_ONE_SHOT_DONE) == RESET);
   uint16_t raw_data_0 = ADC_ReadRawData(ADC, 0);
   uint16_t raw_data_1 = ADC_ReadRawData(ADC, 1);
}

Parameters:
  • ADCx[in] Specify ADC peripheral.

  • index[in] Can be 0 to 15.

Returns:

The 12-bit converted ADC raw data.

uint16_t ADC_ReadAvgRawData(ADC_TypeDef *ADCx)

Get ADC average data from ADC schedule table 0.

rtl876x_adc.h

Example usage

void board_adc_init(void)
{
    Pad_Config(P2_0, PAD_SW_MODE, PAD_IS_PWRON, PAD_PULL_NONE, PAD_OUT_DISABLE,
               PAD_OUT_LOW);
}

void driver_adc_init(void)
{
   // open clock
   RCC_PeriphClockCmd(APBPeriph_ADC, APBPeriph_ADC_CLOCK, ENABLE);

   ADC_InitTypeDef ADC_InitStruct;
   ADC_StructInit(&ADC_InitStruct);
   ADC_InitStruct.ADC_SchIndex[0] = EXT_SINGLE_ENDED(0);
   ADC_InitStruct.ADC_Bitmap = 0x01;
   ADC_InitStruct.ADC_DataAvgEn  = ADC_DATA_AVERAGE_ENABLE;
   ADC_InitStruct.ADC_DataAvgSel = ADC_DATA_AVERAGE_OF_2;
   // Add other initialization parameters here.
   ADC_Init(ADC, &ADC_InitStruct);

   ADC_INTConfig(ADC, ADC_INT_ONE_SHOT_DONE, ENABLE);
}

void adc_demo(void)
{
   board_adc_init();
   driver_adc_init();
   ADC_Cmd(ADC, ADC_ONE_SHOT_MODE, ENABLE);
   while(ADC_GetINTStatus(ADC, ADC_INT_ONE_SHOT_DONE) == RESET);
   uint16_t raw_data = 0;
   raw_data = ADC_ReadAvgRawData(ADC);
}

Parameters:

ADCx[in] Specify ADC peripheral.

Returns:

The 10 bits integer data + 2 bits fractional ADC raw data.

uint16_t ADC_ReadFIFO(ADC_TypeDef *ADCx)

Get raw data from ADC FIFO.

rtl876x_adc.h

Example usage

void board_adc_init(void)
{
    Pad_Config(P2_0, PAD_SW_MODE, PAD_IS_PWRON, PAD_PULL_NONE, PAD_OUT_DISABLE,
               PAD_OUT_LOW);
}

void driver_adc_init(void)
{
   // open clock
   RCC_PeriphClockCmd(APBPeriph_ADC, APBPeriph_ADC_CLOCK, ENABLE);

   ADC_InitTypeDef ADC_InitStruct;
   ADC_StructInit(&ADC_InitStruct);
   ADC_InitStruct.ADC_SchIndex[0] = EXT_SINGLE_ENDED(0);
   ADC_InitStruct.ADC_Bitmap = 0x01;
   ADC_InitStruct.ADC_DataWriteToFifo = ADC_DATA_WRITE_TO_FIFO_DISABLE;
   ADC_Init(ADC, &ADC_InitStruct);

   ADC_INTConfig(ADC, ADC_INT_ONE_SHOT_DONE, ENABLE);
}

void adc_demo(void)
{
   board_adc_init();
   driver_adc_init();
   ADC_Cmd(ADC, ADC_ONE_SHOT_MODE, ENABLE);
   while(ADC_GetINTStatus(ADC, ADC_INT_ONE_SHOT_DONE) == RESET);
   uint16_t raw_data = 0;
   raw_data = ADC_ReadFIFO(ADC);
}

Parameters:

ADCx[in] selected ADC peripheral.

Returns:

ADC FIFO data.

void ADC_ReadFIFOData(ADC_TypeDef *ADCx, uint16_t *outBuf, uint16_t num)

Get data from ADC FIFO.

rtl876x_adc.h

Example usage

void adc_demo(void)
{
   // ADC already start
   uint16_t raw_data[32] = {0};
   uint8_t data_len = ADC_GetFIFODataLen(ADC);
   ADC_ReadFIFOData(ADC, raw_data, data_len);
}

Parameters:
  • ADCx[in] Specify ADC peripheral.

  • outBuf[out] Buffer to save data read from ADC FIFO.

  • num[in] Number of data to be read.

Returns:

None.

uint8_t ADC_GetFIFODataLen(ADC_TypeDef *ADCx)

Get ADC FIFO data number.

rtl876x_adc.h

Example usage

void adc_demo(void)
{
   // ADC already start
   uint16_t raw_data[32] = {0};
   uint8_t data_len = ADC_GetFIFODataLen(ADC);
   ADC_ReadFIFOData(ADC, raw_data, data_len);
}

Parameters:

ADCx[in] selected ADC peripheral.

Returns:

Current data number in ADC FIFO.

void ADC_SchIndexConfig(ADC_TypeDef *ADCx, uint8_t adcMode, uint16_t Index)

Config ADC schedule table index.

rtl876x_adc.h

Example usage

void adc_demo(void)
{
  ADC_SchIndexConfig(ADC, INTERNAL_VBAT_MODE, 0);
}

Parameters:
Returns:

None.

void ADC_SchTableConfig(ADC_TypeDef *ADCx, uint16_t Index, uint8_t adcMode)

Config ADC schedule table.

Parameters:
Returns:

none.

void ADC_BitMapConfig(ADC_TypeDef *ADCx, uint16_t bitMap, FunctionalState NewState)

Config ADC bit map.

rtl876x_adc.h

Example usage

void adc_demo(void)
{
  uint16_t bit_map = 0x03;
  ADC_BitMapConfig(ADC, bit_map, ENABLE);
}

Parameters:
  • ADCx[in] Specify ADC peripheral.

  • bitMap[in] ADC channel map.

  • NewState[in] New state of the ADC peripheral. This parameter can be: ENABLE or DISABLE.

Returns:

None.

void ADC_ManualPowerOnCmd(ADC_TypeDef *ADCx, FunctionalState NewState)

Power on ADC manually.

rtl876x_adc.h

Example usage

void adc_demo(void)
{
  ADC_ManualPowerOnCmd(ADC, ENABLE);
}

Parameters:
  • ADCx[in] Specify ADC peripheral.

  • NewState[in] New state of the ADC power on. This parameter can be: ENABLE or DISABLE. If enabled, ADC power will always be on until disabled.

Returns:

None.

void ADC_WriteFIFOCmd(ADC_TypeDef *ADCx, FunctionalState NewState)

Enable or disable stop FIFO from writing data.

rtl876x_adc.h

Example usage

void adc_demo(void)
{
  ADC_WriteFIFOCmd(ADC, ENABLE);
}

Parameters:
  • ADCx[in] Specify ADC peripheral.

  • NewState[in] New state of the ADC FIFO write. This parameter can be: ENABLE or DISABLE.

Returns:

None.

void ADC_BypassCmd(uint8_t ChannelNum, FunctionalState NewState)

Config ADC bypass resistor.

rtl876x_adc.h

Example usage

void adc_demo(void)
{
  ADC_BypassCmd(0, ENABLE);
}

Note

The input voltage of channel pin using bypass mode cannot exceed 0.9V!

Parameters:
  • ChannelNum[in] External channel number, can be 0~7.

  • NewState[in] Specify whether the channel enables bypass mode. This parameter can be: ENABLE or DISABLE.

Returns:

None.

ITStatus ADC_GetINTStatus(ADC_TypeDef *ADCx, uint32_t ADC_INT)

Check whether the specified ADC interrupt flag is set.

rtl876x_adc.h

Example usage

void adc_demo(void)
{
    ITStatus int_status = RESET;
    int_status = ADC_GetINTStatus(ADC, ADC_INT_FIFO_OVERFLOW);
}

Parameters:
  • ADCx[in] selected ADC peripheral.

  • ADC_INT[in] Specify the interrupt flag to check. This parameter can be one of the following values, which refer to ADC Interrupts Definition.

    • ADC_INT_FIFO_OVERFLOW: ADC FIFO overflow interrupt.

    • ADC_INT_ONE_SHOT_DONE: ADC once convert end interrupt.

    • ADC_INT_FIFO_FULL: ADC FIFO full interrupt.

    • ADC_INT_FIFO_THD: FIFO larger than threshold interrupt.

    • ADC_INT_FIFO_RD_ERR: ADC FIFO underflow interrupt.

    • ADC_INT_FIFO_RD_REQ: ADC FIFO size >= burst size interrupt.

Returns:

The new state of ADC_INT (SET or RESET).

void ADC_ClearINTPendingBit(ADC_TypeDef *ADCx, uint32_t ADC_INT)

Clear the ADC interrupt pending bit.

rtl876x_adc.h

Example usage

void adc_demo(void)
{
  ADC_ClearINTPendingBit(ADC, ADC_INT_FIFO_OVERFLOW);
}

Parameters:
  • ADCx[in] Specify ADC peripheral.

  • ADC_INT[in] Specify the interrupt pending bit to clear. This parameter can be any combination of the following values, which refer to ADC Interrupts Definition.

    • ADC_INT_FIFO_OVERFLOW: ADC FIFO overflow interrupt.

    • ADC_INT_ONE_SHOT_DONE: ADC once convert end interrupt.

    • ADC_INT_FIFO_FULL: ADC FIFO full interrupt.

    • ADC_INT_FIFO_THD: FIFO larger than threshold interrupt.

    • ADC_INT_FIFO_RD_ERR: ADC FIFO underflow interrupt.

    • ADC_INT_FIFO_RD_REQ: ADC FIFO size >= burst size interrupt.

Returns:

None.

void ADC_ClearFIFO(ADC_TypeDef *ADCx)

Clear ADC FIFO.

rtl876x_adc.h

Example usage

void adc_demo(void)
{
  ADC_ClearFIFO(ADC);
}

Parameters:

ADCx[in] Specify ADC peripheral.

Returns:

None.

uint8_t ADC_GetAllFlagStatus(ADC_TypeDef *ADCx)

Get all ADC interrupt flag status.

rtl876x_adc.h

Example usage

void adc_demo(void)
{
  uint8_t all_flag_status = 0;
  all_flag_status = ADC_GetAllFlagStatus(ADC);
}

Parameters:

ADCx[in] Specify ADC peripheral.

Returns:

All ADC interrupt status. ADC Interrupts Definition.

bool ADC_CalibrationInit(void)

Initialize the voltage conversion.

adc_lib.h

Example usage

bool adc_k_status = false;
adc_k_status = ADC_CalibrationInit();

Parameters:

None.[in]

Return values:
  • true – ADC voltage calibration correct.

  • false:. – ADC voltage calibration incorrect.

Returns:

The status of ADC calibration.

float ADC_GetVoltage(const ADC_SampleMode vSampleMode, int32_t vSampleData, ADC_ErrorStatus *pErrorStatus)

Obtain the actual voltage value.

adc_lib.h

Example usage

float sample_voltage = 0;
sample_voltage = ADC_GetVoltage(BYPASS_SINGLE_MODE, (int32_t)sample_data, &error_status);

Parameters:
  • vSampleMode[in] ADC operation mode.

  • vSampleData[in] ADC sample data.

  • pErrorStatus[in] This parameter can be a value of ADC_ErrorStatus.

Returns:

actual voltage value.

uint16_t ADC_GetResistance(void)

Obtain the actual resistance value.

adc_lib.h

Example usage

uint32_t value = ADC_GetResistance();

Parameters:

None.[in]

Returns:

resistance value.