Q群:
电话:
邮箱:
地址:
函数 | 说明 |
---|---|
os_device_find() | 根据ADC设备名称寻找设备并获取设备指针 |
os_device_open() | 打开设备 |
os_device_control() | 控制ADC设备 |
os_device_read() | 读取ADC设备数据(电压值:mV) |
os_device_close() | 关闭设备 |
该函数根据ADC设备名查找对应的ADC设备,函数原型如下:
os_device_t *os_device_find(const char *name);
参数 | 说明 |
---|---|
name | ADC设备名称 |
返回 | 说明 |
设备指针 | 查找到对应设备将返回相应的设备指针 |
OS_NULL | 没有找到设备 |
该函数用于开启ADC设备,函数原型如下:
os_err_t os_device_open(os_device_t *dev, os_uint16_t oflag);
参数 | 说明 |
---|---|
dev | 设备名称 |
oflag | 打开设备模式标志,以只读模式打开,即OS_DEVICE_OFLAG_RDONLY |
返回 | 说明 |
OS_EOK | 设备打开成功 |
其他错误码 | 设备打开失败 |
该函数用于控制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 接口 |
其他错误码 | 执行失败 |
该函数用于读取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_err_t os_device_close(os_device_t *dev);
参数 | 说明 |
---|---|
dev | 设备指针 |
返回 | 说明 |
OS_EOK | 关闭设备成功 |
OS_ERROR | 设备已经完全关闭,不能重复关闭设备 |
其他错误码 | 关闭设备失败 |
本例读取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