DAC
介绍
对于不同底层驱动的dac操作实现,统一封装成本文所述hal dac接口。 hal相关头文件位于目录:include/aos/hal hal相关实现位于具体的mcu目录下,如:platform/mcu/stm32f1xx/hal/
API列表
函数名称 | 功能描述 |
---|---|
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 |
API详情
相关结数据结构
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