1 引言
在嵌入式系统中基于ARM微核的嵌入式处理器已经成为市场主流。随着ARM技术的广泛应用,建立面向ARM构架的嵌入式操作系统成为测量行业的热点问题。在LINUX操作系统中添加新的外部设备时,只需为其添加对应的驱动程序即可。介绍另一种驱动程序的编写方式,即采用MISC类设备。其实质也是一个字符设备。可将用户各种不同的驱动设备类型合成到一种类型中,共用一个主设备号,通过不同的次设备号和设备节点名来区分。可方便管理这些驱动模块。字符型的驱动设备模块在挂载时都要分配主设备号、次设备号和创建设备节点名,在卸载驱动设备时还必须同时删掉设备节点名。通过采用MISC类设备,在挂载设备驱动时无须再用到mknod命令分配主设备号、次设备号和创建设备节点名,在insmodl挂载之后,只须mdev—s就能自动装配/dev目录下的设备文件。
2 AD7859L的引脚功能描述和寄存器
AD7859L的引脚功能描述如表1所示。
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的结构体定义语句如下:
从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类型设备的操作方法。
关键字:Linux MISC类设备 AD7859L 驱动程序
引用地址:
Linux的MISC类设备AD7859L的驱动程序开发
推荐阅读最新更新时间:2024-03-16 15:55
基于Linux的嵌入式闸门智能监控系统
引言 闸门系统是水资源调度中重要的组成部分,国内目前多采用手动和部分电动的操作方式,真正实现闸门的智能控制还少有报道。文中采用的是基于Linux 操作系统的嵌入式技术,实现水利工程闸门的集视频监控与水位、闸位、库容、流量等参数实时监控一体化的本地/ 远程自动监控。 Linux 与嵌入式系统 嵌入式系统是一种以应用为中心,以计算机技术为基础,软件硬件可裁剪,适应实际应用对功能、可靠性、成本、体积、功耗等要求严格的专用计算机系统。它面向特定应用,有较高的可靠性和较长的市场生命周期。由于嵌入式系统的功能越来越复杂,硬件条件越来越好,选择合适的嵌入式操作系统成为系统开发的关键问题。 目前嵌入式系统的开发方法主要有两种:
[工业控制]
风河推出通过CC EAL4+安全认证的嵌入式Linux平台
风河公司(Wind River)日前宣布推出通过CC EAL4+安全认证的Wind River Linux Secure平台,这是市场上第一套通过EAL4+通用标准评估保证等级认证的商用嵌入式Linux平台;该认证经由美国国家信息安全保证联盟(National Information Assurance Partnership,NIAP) 依据《通用作业系统保护规范(GP-OSPP)》予以验证并核准。 针对那些必须达到严格的安全标准和加密技术规范的机构组织,Wind River Linux Secure提供了一套高安全性的商用现货(COTS)嵌入式Linux解决方案,其安全标准及加密技术规范包括了常见的CC EAL4+以及
[工业控制]
TQ2440 学习笔记—— 9、嵌入式编程基础知识【arm-linux-gcc 选项】
自己刚开始看的时候,总是沉不下心,后面硬是硬着头皮看完!现在再重新看一遍,做下记录!方便以后阅读,因为有些东西挺容易忘的。 一、交叉编译工具选项说明 1、arm-linux-gcc 选项 一个C/C++ 文件要经过预处理、编译、汇编、和链接 等4个步骤才能变成可执行文件;在Windows 下我们只需要单机几个按钮即可编译,但在ARM平台上,我们必须使用交叉编译工具。 预处理:——得到 ” .i “文件。 使用的工具 arm-linux-cpp 编译:——将上述的” .i “文件“翻译”成汇编代码。 使用的工具为ccl(它的名字就是ccl,不是arm-linux-ccl) 汇编:——将上一步的代码翻译成符合一
[单片机]
基于三星S3C2410的ARM-Linux电子控制油门设计
引言 巡航控制系统(CCS)是20世纪60年代发展起来的,又称为恒速行驶系统。巡航控制系统工作时,ECU根据各种传感器输送来的信号判断汽车的运行状况,通过执行元件自动调节节气门的开度使汽车的行驶速度与设定的车速保持一致。汽车在良好路面上长时间行驶时,驾驶员启动巡航控制系统并设定行驶速度,不需驾驶员操纵加速踏板,通过巡航控制系统即可自动保持既定的行驶速度,不仅减轻了驾驶员的劳动强度,同时利用先进的电子控制技术控制节气门的开度,比驾驶员操纵节气门更精确,汽车燃料经济性、排放污染性也可得到改善。 1 系统原理 1.1 电控油门原理 工作时,由驾驶员发出转速的控制指令,由节气门开度传感器采集发动机的转速参数,并把信
[单片机]
DM9000的驱动在TQ2440+linux2.6.32下的移植
这里我们主要阐述DM9000的驱动在TQ2440+linux2.6.32下的移植,分俩部分,一是驱动移植,一是测试程序 硬件平台:TQ2440,DM9000EP 内核 : linux2.6.32 编译工具: codesource出品 arm-linux-none-gnueabi-4.3.3 文件系统: busybox1.1.11+yaffs 在此推荐一个文档: http://singleboy.blog.163.com/blog/static/5490019420115141426387/ mini2440的,在移植过程中参考了此文,鸣谢 一、DM9000驱动移植 主要修改俩个文件,一是mach-smdk2440.c,一
[单片机]
I2C串行总线标准驱动程序(C51)
I2C串行总线标准驱动程序(C51)-万能程序 /*------------------------------------------------------------------------------------------ I2C.c 1.1b ===================================================================================*/ #i nclude reg51.h #i nclude intrins.h unsigned char SystemError; sbit SCL= P1^6; //定义串行时钟线所在口 使用时根据自己
[单片机]
嵌入式Linux系统下Microwindows的应用
摘要:通过对嵌入式GUI软件Microwindows进行分析并与X window进行对比,阐述Microwindows用于嵌入式设备上的优点;简要论述Microwindows的体系结构和图形应用程序接口;介绍其设备驱动特性、API、客户机/服务器模型、画图机制和FLTK。
关键词:嵌入式系统 Microwindows Linux
引言
在进入后PC时代以后,嵌入式设备以一种无法抑制的迅猛速度普及和发展到日常生活及工作当中,众多知名开发商为了抢占市场和争夺利润,竞相推出各种性能优异的软硬件及内核芯片。鉴于以视窗为代表的桌面操作模式取得巨大成功,该模式目前已成为国内外开发者们在嵌入式设备中的首选方案。
近几年,随着Linux技
[应用]
基于ARM-Linux和CDMA的远程视频监控系统
0 引言 CDMA(码分多址)无线网络具有覆盖面广,高效、低成本的特点,CDMA网络的数据传输速率可达200kb/s,这里开发的嵌入式远程视频监控系统就是充分利用CDMA无线网络技术和嵌入式系统的特点而搭建的数据传输系统,特别适合边远偏僻或不具备常规网络传输条件的地方使用,例如车载视频监控系统、交通路口(车牌实时监视)及城市路灯的监控等。 1 嵌入式Linux系统 嵌入式系统是以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应对功能、可靠性、成本、体积、功耗要求严格的专用计算机系统,目前嵌入式系统已经无处不在,从汽车、家用微波炉、PDA(个人数字助理)、电视机、到工控生产现场、通信、仪器、仪表、汽车、船舶、航空、航天、军事装备
[嵌入式]