全部文档
OneOS简介 硬件支持 快速开发指南 编译构造工具 API参考文档 高级语言 用户编程手册 应用笔记 FAQ

ADC设备


API 列表

函数 说明
os_device_find() 根据ADC设备名称寻找设备并获取设备指针
os_device_open() 打开设备
os_device_control() 控制ADC设备
os_device_read() 读取ADC设备数据(电压值:mV)
os_device_close() 关闭设备

os_device_find

该函数根据ADC设备名查找对应的ADC设备,函数原型如下:

os_device_t *os_device_find(const char *name);
参数 说明
name ADC设备名称
返回 说明
设备指针 查找到对应设备将返回相应的设备指针
OS_NULL 没有找到设备

os_device_open

该函数用于开启ADC设备,函数原型如下:

os_err_t os_device_open(os_device_t *dev, os_uint16_t oflag);
参数 说明
dev 设备名称
oflag 打开设备模式标志,以只读模式打开,即OS_DEVICE_OFLAG_RDONLY
返回 说明
OS_EOK 设备打开成功
其他错误码 设备打开失败

os_device_control

该函数用于控制ADC设备通道开关,函数原型如下:

os_err_t os_device_control(os_device_t *dev, int cmd, void *arg);
参数 说明
dev ADC设备指针
cmd 命令控制字,可取值:OS_ADC_CMD_ENABLE/OS_ADC_CMD_DISABLE
arg 控制的参数无效,直接给:OS_NULL
返回 说明
OS_EOK 函数执行成功
OS_ENOSYS 执行失败,设备不支持 control 接口
其他错误码 执行失败

os_device_read

该函数用于读取ADC通道采样值(mV),函数原型如下:

os_size_t os_device_read(os_device_t *dev, os_off_t pos, void *buffer, os_size_t size);
参数 说明
dev ADC设备指针
pos ADC通道
buffer ADC数据缓存指针
size ADC数据大小,以字节为单位
返回 说明
读到数据的实际大小 返回数据大小,以字节为单位
<= 0 读取失败

os_device_close

该函数用于关闭设备,函数原型如下:

os_err_t os_device_close(os_device_t *dev);
参数 说明
dev 设备指针
返回 说明
OS_EOK 关闭设备成功
OS_ERROR 设备已经完全关闭,不能重复关闭设备
其他错误码 关闭设备失败

使用示例

ADC设备使用示例

本例读取ADC的数据,并输出。

#include <drv_cfg.h>
#include <shell.h>

int adc_sample(int argc, char **argv)
{
    os_uint8_t  channel;
    os_int32_t  adc_databuf;
    os_err_t    ret = OS_EOK;

    os_device_t *adc_dev;

    if (argc != 3)
    {
        os_kprintf("usage: adc_sample read <channel>\r\n");
        os_kprintf("       adc_sample read 0 \r\n");
        return -1;
    }

    channel  = strtol(argv[2], OS_NULL, 0);

    /* find device */
    adc_dev = os_device_find("adc");
    if (adc_dev == OS_NULL)
    {
        os_kprintf("adc device not find! \r\n");
        return -1;
    }

    /* open adc */
    os_device_open(adc, OS_DEVICE_OFLAG_RDONLY);
    ret = os_device_control(adc_dev, OS_ADC_CMD_ENABLE, OS_NULL);
    if (ret != OS_EOK)
    {
        os_kprintf("adc device cannot start! \r\n");
        return -1;
    }

    ret = os_device_read(adc_dev, channel, &adc_databuf, sizeof(adc_databuf));
    if (ret == sizeof(adc_databuf))
    {
        os_kprintf("adc channle: %d voltage value: %d\n",channel, adc_databuf);
    }
    else
    {
        os_kprintf("adc read failed %d.\r\n", ret);
    }

    os_device_control(adc_dev, OS_ADC_CMD_DISABLE, OS_NULL);
    os_device_close(adc_dev);
    return ret;
}

SH_CMD_EXPORT(adc_sample, adc_sample, "test set adc");

运行结果如下:

sh />adc_sample read 0
adc channle: 0 voltage value: 514

results matching ""

    No results matching ""

    返回顶部