Skip to main content

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)

在线预览​

若预览无法显示,请直接下载 PDF 后用本地阅读器打开。


日期版本作者修改说明
2019.12.23V1.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 使用​

  1. 依赖"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()