基于Linux的高速模数转换器AD7859L的应用

2009-04-17 06:49:24来源: 电子设计工程

  1 引言

  在嵌入式系统中基于ARM微核的嵌入式处理器已经成为市场主流。随着ARM技术的广泛应用,建立面向ARM构架的嵌入式操作系统成为测量行业的热点问题。在LINUX操作系统中添加新的外部设备时,只需为其添加对应的驱动程序即可。介绍另一种驱动程序的编写方式,即采用MISC类设备。其实质也是一个字符设备。可将用户各种不同的驱动设备类型合成到一种类型中,共用一个主设备号,通过不同的次设备号和设备节点名来区分。可方便管理这些驱动模块。字符型的驱动设备模块在挂载时都要分配主设备号、次设备号和创建设备节点名,在卸载驱动设备时还必须同时删掉设备节点名。通过采用MISC类设备,在挂载设备驱动时无须再用到mknod命令分配主设备号、次设备号和创建设备节点名,在insmodl挂载之后,只须mdev—s就能自动装配/dev目录下的设备文件。

  2 AD7859L的引脚功能描述和寄存器

  AD7859L的引脚功能描述如表1所示。

AD7859L的引脚功能描述表 

  AD7859L包含一个控制寄存器,A/D转换输出寄存器,状态寄存器,测试寄存器和10位校正寄存器。控制寄存器只能写入,A/D转换输出寄存器和状态寄存器只能读取,测试寄存器和校正寄存器是可读可写的。

  向AD7859L写入数据时,数据宽度必须是16位。16位数据写入AD7859L时,既可作为一个16位字,也可作为2个8位字节,取决于引脚W/B上的逻辑电平。当W/B接高电平时,16位数据从DB0传输到DBl5,DB0为最低位,DBl5为最高位。当W/B接低电平时,引脚DB8/HBEN作为高字节使能,2个8位字节的数据从DB0传输到DB7,DB0为最低位,DB7为最高位。当以2个8位字节写入数据时,必须先写低字节,再写高字节。16位数据的最高2位ADDRl、ADDR0,通过编码决定访问哪一个寄存器,后面的14位数据写入该寄存器。表2为编码分布。

  读寄存器时必须先设置控制寄存器的DB6和DB7位,即RDSLTO和RDSLTl。这2位通过编码决定访问哪一个寄存器。上电时这2位初始值是00,因此读取操作访问的寄存器是A/D转换输出寄存器。同写寄存器一样,字模式或者字节模式均可以。当以字节模式读校正寄存器时,必须先读低字节。

  3 AD7859L驱动程序

  操作系统一般提供设备驱动程序完成对特定硬件的控制,以建立应用程序和设备之间的抽象接口,而不是应用程序直接操作硬件。设备驱动程序实际上是操作硬件的软件,是内核中具有最高特权级的、驻留内存的、可共享的底层硬件处理例程。

  采用MISC类设备来添加AD7859L驱动。AD7859L的结构体定义语句如下:

AD7859L的结构体定义语句 

AD7859L的结构体定义语句 

写寄存器地址编码分布 

  从2.6版本内核开始引入了platform这个概念,在开发底层驱动程序时,首先要确认设备的地址、中断向量号。在内核中添加AD7859L的地址、中断号、设备节点名。设备驱动在加载时首先需要调用的入口函数module_init(),该函数完成设备驱动的初始化工作,如寄存器置位、结构体赋值等,其中最重要的工作就是向内核注册该设备。在应用程序中打开设备文件,然后利用ioctl()函数向驱动传递各种控制命令。每一次A/D转换完成后都会产生中断,调用中断响应函数,将转换好的数据写到缓冲区中。当用户需要读取A/D转换的数据时,通过调用read()函数,读取缓冲区数据。驱动程序结构如图1所示。

驱动程序结构图 

  3.1 平台资源

  在2.6内核中将每个设备的资源用结构platform_device描述,该结构体在/include/linux/platform_device.h中定义。AD7859L驱动的平台资源如下。在文件/arch/arm/roach—s3c2410/devs.c中添加下述结构体。

结构体 

结构体 

  该宏定义在map.h文件中。第二组描述了AD7859L设备的中断向量号。flags描述资源类型,设备驱动会根据flags来获取相应的资源信息。在结构体static struct platform_device*smdk2410_devices[]__initdata添加上述s3c_device_ad7859ADC平台资源。该结构体在/arch/arm/mach—s3c2410/mach—smdk2410.C文件中定义。

  3.2 MISC类设备

  在AD7859L的结构体内创建一个miscdevice类型设备驱动的结构体指针,增添一个misc类型设备。该结构体在/include/miscdevice.h中定义。

结构体 

  在AD7859L驱动的probe函数中调用misc_register(stmctmiscdevice*misc)函数,对misc类设备注册,这个函数会为内核注册一个misc类型设备,如果minor被设置为MISCDYNAMIC_MINOR,系统会动态的为该设备分配一个次设备号,用以区分其他的设备。不同类型的设备调用的设备注册和注销函数有所不同。misc类设备的注销函数为misc_deregister(struct miscdevice}misc)。成功均返回零,否则返回一个错误代码。

结构体 

  3.3 应用

  测试的应用程序相对简单,利用open函数打开设备文件,通过ioctl函数设置AD7859L的各个采样参数,包括选择哪几路通道进行采样,采样的时间间隔,采样的方式等等。利用read函数读取缓冲区数据,在程序退出时调用close函数关闭设备文件。

  4 结语

  AD7859L是一款高速、低功耗的模数转换器,在测量行业有着很广阔的应用前景。随着大家对Linux的认可,嵌入式Linux会被越来越多的人所接受。通过介绍在Linux下以MISC类设备方式开发AD7859L的设备驱动程序,让大家更清楚的理解MISC类型设备的操作方法。

关键字:AD7859L  驱动  MISC类设备  高速数据采集

编辑:金海 引用地址:http://www.eeworld.com.cn/mndz/2009/0417/article_1493.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
AD7859L
驱动
MISC类设备
高速数据采集

小广播

独家专题更多

富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
走,跟Molex一起去看《中国电子消费品趋势》!
走,跟Molex一起去看《中国电子消费品趋势》!
 
带你走进LED王国——Microchip LED应用专题
带你走进LED王国——Microchip LED应用专题
 
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved