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);
}