1.3. gpadc

gpadc API是系统提供的用于adc采集的接口

相关枚举变量在adc_api.h

1.3.1. adc_init

功能:

adc功能初始化,一般在板级配置.c文件已经默认调用,用户无需再重复调用。

原型:

void adc_init();

参数:

返回值

1.3.2. adc_add_sample_ch

添加一个指定的 adc 通道到采集队列,采集队列最大支持10个采集通道。

最大支持通道数由 gpadc.h 文件中 ADC_MAX_CH 宏控制。

原型:

u32 adc_add_sample_ch(enum AD_CH ch);

参数:

ch

指定通道

返回值

指定通道所在队列的编号

1.3.3. adc_delete_ch

删除一个指定的adc采集通道。

原型:

u32 adc_delete_ch(enum AC_CH ch);

参数:

ch

指定通道

返回值

指定通道所在队列的编号

1.3.4. adc_set_sample_period

设置一个指定通道的采样周期。调用 adc_add_sample_ch 后默认设置为 0。

原型:

u32 adc_set_sample_period(enum AD_CH ch, u32 ms);

参数:

ch

指定通道

ms

采样周期,单位:ms

返回值

指定通道所在队列的编号

1.3.5. adc_get_value

获取一个指定通道的 adc 原始值。

原型:

u32 adc_get_value(enum AD_CH ch);

参数:

ch

指定通道

返回值

adc原始值

1.3.6. adc_get_voltage

获取一个指定通道的实际电压值,单位mv。

原型:

u32 adc_get_voltage(enum AD_CH ch);

参数:

ch

指定通道

返回值

实际电压值 单位:mv

1.3.7. adc_get_value_blocking

阻塞式获取一个指定通道的 adc 原始值。会立即获取,调用时不需要延时等待。

原型:

u32 adc_get_value_blocking(enum AD_CH ch);

参数:

ch

指定通道

返回值

adc原始值

1.3.8. adc_get_voltage_blocking

阻塞式获取一个指定通道的实际电压值。会立即获取,调用时不需要延时等待。

原型:

u32 adc_get_voltage_blocking(enum AD_CH ch);

参数:

ch

指定通道

返回值

实际电压值 单位:mv

1.3.9. adc_value_to_voltage

将 adc 原始值转换为电压值。使用传入的 vbg 值进行电压值换算。

原型:

u32 adc_value_to_voltage(u32 adc_vbg, u32 adc_value);

参数:

adc_vbg

传入的vbg参考值

adc_value

adc原始值

返回值

实际电压值 单位:mv

1.3.10. adc_value_to_voltage_filter

将adc原始值转换为电压值。使用内部滤波后的 vbg 值进行电压换算。(推荐使用)

原型:

u32 adc_value_to_voltage_filter(u32 adc_value);

参数:

adc_value

adc原始值

返回值

实际电压值 单位:mv

1.3.11. adc_io2ch

将传入的 IO 口转换成对应的 AD_CH 并返回。

原型:

u32 adc_io2ch(enum gpio_group gpio);

参数:

gpio

指定IO口

返回值

adc_ch

1.3.12. adc_io_ch_set

设置 IO 通道的模式。调用 adc_add_ch 后默认为浮空输入模式。

原型:

void adc_io_set_mode(enum AD_CH ch, enum gpio_mode mode);

参数:

返回值

1.3.13. 参考demo

具体demo代码可以参考 adc_api.c 里的adc_test_demo();

void adc_test_demo(void)
{
    adc_init(); //板级配置中默认会调用,实际使用时无需重复调用。

    u32 user_ad_ch = adc_io2ch(IO_PORTA_02); //获取 PA2 对应的 AD_CH。

    adc_add_sample_ch(user_ad_ch); //添加 PA2 到采集队列。
    adc_set_sample_period(user_ad_ch, 500); //设置 PA2 的采样周期为500ms。

    u32 user_ad_value = adc_get_value(user_ad_ch); //获取 PA2 的 ad原始值。
    printf("user_ad_value = %d\n", user_ad_value);

    u32 user_ad_voltage = adc_get_voltage(user_ad_ch); //获取 PA2 的电压值,单位:mv。
    printf("user_ad_voltage = %d mv\n", user_ad_voltage);

    user_ad_voltage = adc_value_to_voltage_filter(user_ad_value); //将采集到的 ad原始值转换成电压值,单位:mv。
    printf("user_ad_value = %d ------> user_ad_voltage = %d mv\n", user_ad_value, user_ad_voltage);

    u32 adc_value_pa6 = adc_get_value_blocking(adc_io2ch(IO_PORTA_06)); //阻塞式获取 PA6 的 ad原始值。
    printf("adc_value_pa6 = %d\n", adc_value_pa6);

    u32 adc_voltage_pa6 = adc_get_voltage_blocking(adc_io2ch(IO_PORTA_06)); //阻塞式获取 PA6 的电压值,单位:mv。
    printf("adc_voltage_pa6 = %d\n", adc_voltage_pa6);
}