当前位置: 首页 > 文档资料 > YoC 编程基础 >

DAC

优质
小牛编辑
121浏览
2023-12-01

对于不同底层驱动的dac操作实现,统一封装成本文所述hal dac接口。 hal相关头文件位于目录:include/aos/hal hal相关实现位于具体的mcu目录下,如:platform/mcu/stm32f1xx/hal/

函数名称功能描述
hal_dac_init初始化指定DAC
hal_dac_start开始DAC输出
hal_dac_stop停止DAC输出
hal_dac_set_value设置DAC输出值
hal_dac_get_value获取当前DAC输出值
hal_dac_finalize关闭指定DAC

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

相关结数据结构

dac_dev_t

typedef struct {
    uint8_t port;   /* dac port */
    void   *priv;   /* priv data */
} dac_dev_t;

hal_dac_init

初始化指定DAC

函数原型

int32_t hal_dac_init(dac_dev_t *dac);

参数

参数名称出入参参数描述参数示例
dac_dev_t *dac入参DAC设备描述用户自定义一个dac_dev_t结构体

返回值

返回成功或失败, 返回0表示DAC初始化成功,非0表示失败

调用示例

#define DAC1_PORT_NUM 1
/* define dev */
dac_dev_t dac1;
/* dac port set */
dac1.port = DAC1_PORT_NUM;
ret = hal_dac_init(&dac1);

hal_dac_start

开始DAC输出

函数原型

int32_t hal_dac_start(dac_dev_t *dac, uint32_t channel);

参数

参数名称出入参参数描述参数示例
dac_dev_t *dac入参DAC设备描述使用hal_dac_init传入参数
uint32_t channel入参输出通道号0

返回值

返回成功或失败, 返回0表示DAC开始输出成功,非0表示失败

调用示例

ret = hal_dac_start(&dac1, 0);

hal_dac_stop

停止DAC输出

函数原型

int32_t hal_dac_stop(dac_dev_t *dac, uint32_t channel);

参数

参数名称出入参参数描述参数示例
dac_dev_t *dac入参DAC设备描述使用hal_dac_init传入参数
uint32_t channel入参输出通道号0

返回值

返回成功或失败, 返回0表示DAC停止成功,非0表示失败

调用示例

ret = hal_dac_stop(&dac1, 0);

hal_dac_set_value

设置DAC输出值

函数原型

int32_t hal_dac_set_value(dac_dev_t *dac, uint32_t channel, uint32_t data);

参数

参数名称出入参参数描述参数示例
dac_dev_t *dac入参DAC设备描述使用hal_dac_init传入参数
uint32_t channel入参输出通道号0
uint32_t data入参输出值10

返回值

返回成功或失败, 返回0表示DAC输出值设定成功,非0表示失败

调用示例

ret = hal_dac_set_value(&dac1, 0, 10);

hal_dac_get_value

获取当前DAC输出值

函数原型

int32_t hal_dac_get_value(dac_dev_t *dac, uint32_t channel);

参数

参数名称出入参参数描述参数示例
dac_dev_t *dac入参DAC设备描述使用hal_dac_init传入参数
uint32_t channel入参输出通道号0

返回值

返回DAC输出值,获取失败返回负数。

调用示例

int value;
value = hal_dac_get_value(&dac1, 0);

hal_dac_finalize

关闭指定DAC

函数原型

int32_t hal_dac_finalize(dac_dev_t *dac);

参数

参数名称出入参参数描述参数示例
adc_dev_t *adc入参ADC设备描述使用hal_adc_init时传入adc_dev_t结构体

返回值

返回成功或失败, 返回0表示DAC关闭成功,非0表示失败

调用示例

ret = hal_dac_finalize(&dac1);

使用

添加该组件

在相应的platform/mcu的mk内,添加对应hal文件的编译包含。

包含头文件

#include "aos/hal/dac.h"

使用示例

#include <aos/hal/dac.h>

#define DAC1_PORT_NUM 1
#define DAC1_CHANNEL_NUM 1

/* define dev */
dac_dev_t dac1;

int application_start(int argc, char *argv[])
{
    int ret   = -1;
    int value = 0;
    static int count = 0;

    /* dac port set */
    dac1.port = DAC1_PORT_NUM;

    /* init dac1 with the given settings */
    ret = hal_dac_init(&dac1);
    if (ret != 0) {
        printf("dac1 init error !\n");
    }

    value = 10;

    ret = hal_dac_set_value(&dac1, DAC1_CHANNEL_NUM, value);
    if (ret != 0) {
        printf("dac1 set value error !\n");
    }

    /* start dac output */
    ret = hal_dac_start(&dac1, DAC1_CHANNEL_NUM);
    if (ret != 0) {
        printf("dac1 start error !\n");
    }

    while(1) {
        if (count == 10) {
            /* finalize dac1 */
            hal_dac_finalize(&dac1);
        }

        /* sleep 500ms */
        aos_msleep(500);

        count++;
    };
}

注:port为逻辑端口号,其与物理端口号的对应关系见具体的对接实现

移植说明
   新建hal_dac_xxmcu.c和hal_dac_xxmcu.h的文件,并将这两个文件放到platform/mcu/xxmcu/hal目录下。在hal_dac_xxmcu.c中实现所需要的hal函数,hal_dac_xxmcu.h中放置相关宏定义。<br />       参考platform/mcu/stm32l4xx/src/STM32L496G-Discovery/hal/hal_dac_stm32l4.c