ADC

给RT-Thread添加ADC驱动框架

发布于 2018-05-07 22:31:18


# ADC驱动框架

ADC(Analog-to-Digital Converter)

基本功能:按通道号获取原始值

# RT-Thread的ADC实现

1. 为省空间,所以的ADC通道合并为一个设备: RTDeviceClassMiscellaneous
2. 使用pos参数作为通道号

## 接口

`
struct rt
adcops
{
rt
errt (*convert)(struct rtdevice device, int channel, int value);
};

struct rtdeviceadc
{
struct rtdevice parent;
const struct rt
adcops *ops;
};
```

ADC只需要实现转换接口,输入参数为通道号。


### 返回值的定义

暂定为原始值,数据类型为int,支持负数。

## read

```
static rt
sizet adcread(rtdevicet dev, rtofft pos, void *buffer, rtsizet size)
{
rt
errt result = RTEOK;
rtsizet i;
struct rtdeviceadc adc = (struct rtdeviceadc )dev;
int value = (int )buffer;

if(!adc->ops->convert)
{
return 0;
}

for(i=0; i {
result = adc->ops->convert(dev, pos + i, value);
if(result != RT_EOK)
{
return 0;
}
value++;
}

return i;
}
```

### pos

pos参数为通道编号,每次可以读取多个通道。


### size

统一定义为byte,避免歧义。
每一个通道的大小是 sizeof(int)

注意: pos与size的定义并不相同。



查看更多

关注者
0
被浏览
3.8k
4 个回答
aozima
aozima 2018-05-07
拒绝白嫖,拒绝键盘侠!

占位: 驱动示例与测试

dev = rt_device_find("adc");
rt_device_open(dev, RT_DEVICE_FLAG_RDONLY);

int value;
rt_device_read(dev, channel, &value, sizeof(value));

baidu.jpg

yygkqzh
yygkqzh 2018-06-07
谢谢楼主分享 明天调试看看
flyangus
flyangus 2018-06-07
如何对应到具体硬件上去?
mreasonlee
mreasonlee 2019-04-14
代码中的-&gt 是转码错误,请同学们注意下。

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览