天天看点

iTOP-4412开发板实现3路ADC数模转换驱动例程

学习下 linux 数模程序驱动的编写,本节我们实现的功能是实现三路

ADC 数模转换。

驱动程序

驱动程序的名字:“itop4412_adc.c”。

要想把这个驱动注册到内核,先把这个驱动程序放到内核的“driver/char”目录下面,如

下图所示:

iTOP-4412开发板实现3路ADC数模转换驱动例程

Makefile

然后打开 drive/char 目录下面的 Makefile,添加:

obj-$(CONFIG_ADC_CTL) += itop4412_adc.o

如下图所示:

iTOP-4412开发板实现3路ADC数模转换驱动例程

添加完成后保存退出。

Kconfig

打开“drive/char”目录下面的 Kconfig,搜索“LEDS_CTL”,找到之后在下面添加

“DS18B20_CTL”,仿照着“LEDS_CTL”写就可以了,添加内容如下:

config 3LADC_CTL

bool "Enable 3LADC config"

default y

help

Enable 3LADC config

添加完成后如下图所示:

iTOP-4412开发板实现3路ADC数模转换驱动例程

修改完成后保存退出。

添加设备到平台文件

最后使用命令“vim arch/arm/mach-exynos/mach-itop4412.c”,打开平台文件。添

加设备,参考 led 的驱动,添加内容一如下:

#ifdef CONFIG_ADC_CTL

struct platform_device s3c_device_adc_ctl = {

.name = "adc_ctl",

.id = -1,

};

#endif

添加完成后如下图所示:

iTOP-4412开发板实现3路ADC数模转换驱动例程

添加内容二如下:

#ifdef CONFIG_ADC_CTL

&s3c_device_adc_ctl,

#endif

添加完成后如下图所示:

iTOP-4412开发板实现3路ADC数模转换驱动例程

修改完成后保存退出。

内核的编译

内核在编译之前应该先对其进行参数配置。具体讲解可以参考 itop-4412 开发板精英使

用手册 5.3.2,这里以 SCP 2G 核心板为例编译 zImage 内核镜像,那么配置文件为

config_for_linux_scp_elite 使用命令 cp cconfig_for_linux_scp_elite .config 配置,

iTOP-4412开发板实现3路ADC数模转换驱动例程

在内核目录下使用 make menuconfig 命令打开内核配置界面,进入 “Device Drivers

--->”→“Character devices --->”→“ADC driver for iTOP4412”,如下图所示,配置

上宏 定义“ADC_CTL”。

iTOP-4412开发板实现3路ADC数模转换驱动例程

配置完成后保存退出,以免出错可以再查看一遍,然后使用编译命令“make zImage”

编译内核。编译完成后在目录

“/home/topeet/android4.0/iTop4412_Kernel_3.0/arch/arm/boot”下找到新生成的

zImage 编译到开发板,启动开发板。开发板启动之后,使用命令“ls

/sys/devices/platform/”可以查看到新注册的 adc_ctl 设 备,如下图所示。

iTOP-4412开发板实现3路ADC数模转换驱动例程

如下图所示,加载之后使用命令“ls /dev”,可以看到新生成了设备节点 adc。

iTOP-4412开发板实现3路ADC数模转换驱动例程

测试程序

名字:“adctest.c”

在 Ubuntu 系统下新建 ada 文件夹,将写好的 “adctest.c” 拷贝到文件夹下,使用

“arm-none-linux-gnueabi-gcc -o adctest adctest.c -static”命令编译应用。 如下图所

示。

iTOP-4412开发板实现3路ADC数模转换驱动例程

将上图中的文件“adctest” 拷贝到 U 盘。 启动开发板,将 U 盘插入开发板,使用命

令“ mount /dev/sda1 /mnt/udisk/”加载 U 盘符, 有三条命令运行小应“adctest”,

第一条使用命令“./mnt/udisk/adctest 0 0”,运行小应用 “adctest”,如下图所

示:

iTOP-4412开发板实现3路ADC数模转换驱动例程

调整滑动电阻器之后,再次使用测试程序,如下图所示,输出数值会有变化。

iTOP-4412开发板实现3路ADC数模转换驱动例程

滑动变阻器向顺时针旋转,阻值会减小,最小为 0;

滑动变阻器向逆时针旋转,阻值会增大,最大为 10k。

第二条使用命令“./mnt/udisk/adctest 1 0”,运行小应用 “adctest”,如下图所

示:

iTOP-4412开发板实现3路ADC数模转换驱动例程

调整滑动电阻器之后,再次使用测试程序,如下图所示,输出数值会有变化

iTOP-4412开发板实现3路ADC数模转换驱动例程

滑动变阻器向顺时针旋转,阻值会减小,最小为 0;

滑动变阻器向逆时针旋转,阻值会增大,最大为 10k。

第三条使用命令“./mnt/udisk/adctest 1 1”,运行小应用 “adctest”,如下图所

示:

iTOP-4412开发板实现3路ADC数模转换驱动例程

调整滑动电阻器之后,再次使用测试程序,如下图所示,输出数值会有变化。

iTOP-4412开发板实现3路ADC数模转换驱动例程

滑动变阻器向顺时针旋转,阻值会减小,最小为 0;

滑动变阻器向逆时针旋转,阻值会增大,最大为 10k。