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详情

请参考include/aos/hal/adc.h

相关宏定义

#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

results matching ""

    No results matching ""