ADC
介绍
对于不同底层驱动的adc操作实现,统一封装成本文所述hal adc接口。 hal相关头文件位于目录:include/aos/hal hal相关实现位于具体的mcu目录下,如:platform/mcu/stm32f1xx/hal/
API列表
函数名称 | 功能描述 |
---|---|
hal_adc_init | 初始化指定ADC |
hal_adc_value_get | 获取ADC单次采样值 |
hal_adc_value_multiple_get | 获取ADC多次采样值 |
hal_adc_finalize | 关闭指定ADC |
API详情
相关宏定义
#define HAL_WAIT_FOREVER 0xFFFFFFFFU
相关数据结构
adc_dev_t
typedef struct {
uint8_t port; /* adc port */
adc_config_t config; /* adc config */
void *priv; /* priv data */
} adc_dev_t;
adc_config_t
typedef struct {
uint32_t sampling_cycle; /* sampling period in number of ADC clock cycles */
} adc_config_t;
hal_adc_init
初始化指定ADC
函数原型
int32_t hal_adc_init(adc_dev_t *adc);
参数
参数名称 | 出入参 | 参数描述 | 参数示例 |
---|---|---|---|
adc_dev_t *adc | 入参 | ADC设备描述 | 用户自定义一个adc_dev_t结构体 |
返回值
返回成功或失败, 返回0表示ADC初始化成功,非0表示失败
调用示例
#define ADC1_PORT_NUM 1
/* define dev */
adc_dev_t adc1;
/* adc port set */
adc1.port = ADC1_PORT_NUM;
/* set sampling_cycle */
adc1.config.sampling_cycle = 100;
/* init adc1 with the given settings */
ret = hal_adc_init(&adc1);
hal_adc_value_get
获取ADC单次采样值
函数原型
int32_t hal_adc_value_get(adc_dev_t *adc, uint32_t *output, uint32_t timeout);
参数
参数名称 | 出入参 | 参数描述 | 参数示例 |
---|---|---|---|
adc_dev_t *adc | 入参 | ADC设备描述 | 使用hal_adc_init时传入adc_dev_t结构体 |
uint32_t *output | 出参 | 数据缓冲区 | int value; 传入&value |
uint32_t timeout | 入参 | 超时时间,单位ms | HAL_WAIT_FOREVER |
返回值
返回成功或失败, 返回0表示ADC时间获取成功,非0表示失败
调用示例
int value = 0;
adc_dev_t adc1;
ret = hal_adc_value_get(&adc1, &value, HAL_WAIT_FOREVER);
hal_adc_value_multiple_get
获取ADC多次采样值
函数原型
int32_t hal_adc_value_multiple_get(adc_dev_t *adc, uint32_t *output, size_t num, uint32_t timeout);
参数
参数名称 | 出入参 | 参数描述 | 参数示例 |
---|---|---|---|
adc_dev_t *adc | 入参 | ADC设备描述 | 使用hal_adc_init时传入adc_dev_t结构体 |
uint32_t *output | 出参 | 数据缓冲区 | int value; 传入&value |
size_t num | 入参 | ADC转换次数 | |
uint32_t timeout | 入参 | 超时时间,单位ms | HAL_WAIT_FOREVER |
返回值
返回成功或失败, 返回0表示ADC时间获取成功,非0表示失败
调用示例
hal_adc_finalize
关闭指定ADC
函数原型
int32_t hal_adc_finalize(adc_dev_t *adc);
参数
参数名称 | 出入参 | 参数描述 | 参数示例 |
---|---|---|---|
adc_dev_t *adc | 入参 | ADC设备描述 | 使用hal_adc_init时传入adc_dev_t结构体 |
返回值
返回成功或失败, 返回0表示ADC去初始化成功,非0表示失败
调用示例
ret = hal_adc_finalize(&adc1);
使用
添加该组件
在相应的platform/mcu的mk内,添加对应hal文件的编译包含。
包含头文件
#include "aos/hal/adc.h"
使用示例
#include <aos/hal/adc.h>
#define ADC1_PORT_NUM 1
/* define dev */
adc_dev_t adc1;
int application_start(int argc, char *argv[])
{
int32_t ret = -1;
int value = 0;
adc_config_t adc_cfg;
/* adc port set */
adc1.port = ADC1_PORT_NUM;
/* set sampling_cycle */
adc1.config.sampling_cycle = 100;
/* init adc1 with the given settings */
ret = hal_adc_init(&adc1);
if (ret != 0) {
printf("adc1 init error !\n");
}
/* get adc value */
ret = hal_adc_value_get(&adc1, &value, HAL_WAIT_FOREVER);
if (ret != 0) {
printf("adc1 vaule get error !\n");
}
/* finalize adc1 */
hal_adc_finalize(&adc1);
while(1) {
/* sleep 500ms */
aos_msleep(500);
};
}
注:port为逻辑端口号,其与物理端口号的对应关系见具体的对接实现
移植说明
新建hal_adc_xxmcu.c和hal_adc_xxmcu.h的文件,并将这两个文件放到platform/mcu/xxmcu/hal目录下。在hal_adc_xxmcu.c中实现所需要的hal函数,hal_adc_xxmcu.h中放置相关宏定义。<br /> 参考platform/mcu/stm32l4xx/src/STM32L496G-Discovery/hal/hal_adc_stm32l4.c