Rockchip Developer Guide Linux SARADC
:::info 文档信息
文档标识:RK-KF-YF-079 · 发布版本:V1.0.0 · 发布日期:2019-12-23 · 页数:4 · 语言:英文
原始文档:Rockchip_Developer_Guide_Linux_SARADC_CN.pdf
:::
章节大纲
- Rockchip Developer Guide Linux SARADC(P1)
- SARADC 驱动(P2)
- 驱动文件(P2)
- DTS 节点配置(P2)
- SARADC 使用(P2)
- 内核配置(P3)
- SARADC常用接口(P3)
- SARADC 驱动(P2)
在线预览
若预览无法显示,请直接下载 PDF 后用本地阅读器打开。
| 日期 | 版本 | 作者 | 修改说明 |
|---|---|---|---|
| 2019.12.23 | V1.0 | 薛小明 | 初始发布 |
SARADC 驱动驱动文件DTS 节点配置SARADC 使用内核配置SARADC常用接口
SARADC 驱动
驱动文件
驱动文件所在位置:drivers/iio/adc/rockchip_saradc.c
DTS 节点配置
DTS 配置参考文档为 Documentation/devicetree/bindings/iio/adc/rockchip-saradc.txt ,本文主要说明如下参数:
interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH 0>;
转换完成,产生中断信号。
io-channel-cells = <1>;
必须为1,详见iio-bindings.txt。
vref-supply = <&vccadc_ref>;
saradc值对应的参考电压,需要根据具体的硬件环境设置,最大为1.8V,对应的saradc值为1024,电压和adc值成线性关系。
SARADC 使用
- 依赖"iio"框架,需要初始化 struct iio_dev 结构体,具体请看 rockchip_saradc_probe 函数当中的indio_dev ,最后调用 iio_device_register(indio_dev) 注册 indio_dev , 等待"input"框架使用。2. 以"adc-key"为例,需要初始化 struct input_polled_dev ,具体请看drivers/input/keyboard/adc-keys.c 当中的 adc_keys_probe 函数,调用input_register_polled_device(poll_dev); 将 poll_dev 注册进"input"框架。3. 当使用 getevent 测试时候,假设 adc-key 为event0,则 getevent -s /dev/input/event0 ,会有如下调用关系:adc_keys_poll -> iio_read_channel_processed -> iio_channel_read -> chan- >indio_dev ->info->read_raw(rockchip_saradc_read_raw) -> iio_convert_raw_to_processed_unlocked
rockchip_saradc_read_raw 是重要函数,逐条分析:
1. writel_relaxed(8, info->regs + SARADC_DLY_PU_SOC);
设置power up到开始采样的间隔为8个sclk周期。2. writel(SARADC_CTRL_POWER_CTRL | (chan->channel & SARADC_CTRL_CHN_MASK) | SARADC_CTRL_IRQ_ENABLE,info->regs + SARADC_CTRL); a) "power up saradc" b) 设置采样通道c) 使能中断,开始采样3. wait_for_completion_timeout(&info->completion, SARADC_TIMEOUT)等待saradc完成采样,并产生中断。4. *val = info->last_val; 将采样数据存放在val中。5. 最后调用 iio_convert_raw_to_processed_unlocked 将采样数据转换成对应的电压值。
中断处理过程: rockchip_saradc_isr 函数:
1. info->last_val = readl_relaxed(info->regs + SARADC_DATA);
保存数据,提供给上面的第4步使用。
2. writel_relaxed(0, info->regs + SARADC_CTRL);
清中断,并且"power down saradc",关闭saradc。
一个完整的采样过程是 rockchip_saradc_read_raw 配置saradc,打开saradc,开始采样,等待中断,中断函数中清除中断,关闭saradc。
内核配置
Symbol: ROCKCHIP_SARADC [=y] Type : tristate Prompt: Rockchip SARADC driver Location: -> Device Drivers -> Industrial I/O support (IIO [=y]) (1) -> Analog to digital converters Defined at drivers/iio/adc/Kconfig:319 Depends on: IIO [=y] && (ARCH_ROCKCHIP [=y] || ARM && COMPILE_TEST [=n]) && RESET_CONTROLLER [=y]
SARADC常用接口
1.可以通过用户态接口获取adc值,其中*表示adc第多少通道:
cat /sys/bus/iio/devices/iio\:device0/in_voltage*_raw
例如 channle0:
cat /sys/bus/iio/devices/iio\:device0/in_voltage0_raw
2.内核常用接口:获取adc值: iio_read_channel_raw()
获取电压: iio_read_channel_processed()