历史上的今天
返回首页

历史上的今天

今天是:2025年02月19日(星期三)

正在发生

2018年02月19日 | Linux的MISC类设备AD7859L的驱动程序开发

2018-02-19 来源:eefocus

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类型设备的操作方法。


推荐阅读

史海拾趣

峰岹(Fortior Tech )公司的发展小趣事

对于大型温室排气扇自动控制电路,网友们可能会提出一系列问题,这些问题涵盖了设计、功能、维护、能效以及安全性等多个方面。以下是一些常见问题及其回答示例:

1. 如何设计自动控制系统以确保温室内的温度和湿度保持在最佳范围?

回答
设计自动控制系统时,通常会集成温度传感器和湿度传感器,这些传感器实时监测温室内的环境参数,并将数据发送给控制器(如PLC或微控制器)。控制器根据预设的阈值(如温度上限、下限,湿度目标范围等)判断是否需要启动或调整排气扇的转速。此外,还可以加入光照强度、CO₂浓度等传感器,以更全面地控制温室环境。

2. 排气扇的自动启停是如何实现的?

回答
排气扇的自动启停通常通过继电器或固态继电器(SSR)控制。当控制器判断需要调整温室环境时,会发送信号给继电器,继电器闭合或断开电路,从而控制排气扇的电源通断。对于需要调节风速的排气扇,则可能采用变频驱动器(VFD)来控制电机的转速。

3. 如何保证自动控制系统在断电后能够恢复工作状态?

回答
为了确保系统在断电后能恢复工作状态,可以设计非易失性存储器(如EEPROM)来保存关键参数和设置。当系统重新上电时,控制器会读取这些参数并自动恢复到断电前的配置状态。此外,还可以加入备用电源(如UPS)来确保在短暂停电期间系统能够继续运行。

4. 如何提高自动控制系统的能效?

回答
提高能效的方法包括:

  • 使用高效节能的排气扇和电机。
  • 采用智能控制算法,如PID控制,精确调节排气扇的转速以匹配实际需求,避免过度或不足排气。
  • 引入自然通风策略,在适宜条件下减少机械通风的使用。
  • 定期检查和维护系统,确保传感器准确、设备无故障运行。

5. 自动控制系统在应对极端天气条件时有哪些安全措施?

回答
在应对极端天气条件时,自动控制系统应具备以下安全措施:

  • 增设防雷击保护装置,防止雷电对系统造成损害。
  • 设计防水防尘的传感器和控制器外壳,确保在恶劣天气下仍能正常工作。
  • 监控系统的运行状态,设置故障报警和自动停机功能,一旦检测到异常情况立即采取措施。
  • 备份关键数据和设置,以防数据丢失导致系统无法恢复。

这些问题和回答涵盖了大型温室排气扇自动控制电路的主要关注点,有助于理解和设计更加高效、安全、可靠的自动控制系统。

Amecon Magnetics公司的发展小趣事

随着电子行业的快速发展,对高性能磁性材料的需求日益增长。Amecon Magnetics公司敏锐地捕捉到这一市场机遇,加大了在技术研发上的投入。通过不断的技术创新,公司成功开发出一系列具有高性能、高稳定性的磁性材料产品,满足了市场对于高质量磁性材料的需求,从而赢得了客户的信任和市场的认可。

Bharat Electronics Ltd公司的发展小趣事

作为电子行业的领军企业,BEL始终注重技术创新和研发。公司不断投入大量资源用于新产品的研发和创新,努力引领行业趋势。近年来,BEL在无人机、太阳能电池组等领域取得了显著成果,推出了一系列具有创新性和市场竞争力的产品,为公司的持续发展注入了新的活力。

DIOTECH公司的发展小趣事

DIOTECH公司成立于电子行业的黄金时期,凭借其创始人在半导体领域的深厚造诣,公司迅速在高性能处理器领域取得了技术突破。通过不断优化产品设计和生产工艺,DIOTECH的产品在性能和稳定性上均达到了行业领先水平,逐渐赢得了市场的认可。随着智能手机的普及,DIOTECH的高性能处理器成为了市场上的抢手货,公司的营收和市场份额均实现了快速增长。

Allied Controls Incorporated公司的发展小趣事

为了进一步提升市场份额和品牌影响力,DIOTECH公司开始加大市场拓展力度。通过参加国际电子展会、举办新品发布会等活动,公司成功吸引了全球范围内的客户和合作伙伴的关注。同时,公司还加强了品牌建设,通过一系列营销活动提升了品牌知名度和美誉度。这些努力使得DIOTECH逐渐成为了电子行业内的知名品牌。

CLARE公司的发展小趣事

随着技术的不断进步和市场的日益成熟,CLARE公司开始致力于产品的创新和升级。公司研发团队紧跟科技前沿,不断探索新技术、新材料和新工艺的应用,推出了一系列具有创新性和领先性的电子产品。这些产品不仅满足了客户的需求,还引领了市场的潮流,进一步提升了CLARE公司的品牌影响力和市场竞争力。

问答坊 | AI 解惑

如何快速学好电子技术

这个问题很大,解决这个问题是一个系统工程,首先需要时间,还要多看书和多实践。   电子技术、无线电维修技术绝不是一门容易学好、短时间内能够掌握的科学。由于这门科学所涉及的方方面面很多,各方面又相互联系,只有在整体上了解、初步掌 ...…

查看全部问答>

部分资料___原STC单片机生厂商 笙泉科技 Megawin_8051

http://forum.eetchina.com/FORUM_POST_10011_1200108209_0.HTM…

查看全部问答>

ADS J-TAG 串口驱动 安装视频

ADS  J-TAG  串口驱动  安装视频   无声.…

查看全部问答>

关于一个数码管驱动电路的理解

一个数码管的驱动电路 这是我的51板子上的一个数码管的驱动电路。 是个四位数码管,8个段码直接接IO口,四个共阳极各自通过一个9012扩流驱动。 先上图: 这个电路的工作原理很容易理解: 三极管工作在 开关状态。 (个人感觉那个4.7K电阻有点 ...…

查看全部问答>

视频采集卡不支持directshow,有厂家SDK包,有没有办法解决成支持WDM或VFM驱动,另外有没有同时支持Video和显卡的多路采集卡?

我想做一个图像采集的程序,由于目前有一块采集卡,但不支持DirectShow的WDM和VFM驱动,有没有办法解决这个问题, 另外有没有同时支持Video和显卡两种信号同时采集的多路采集卡?请高手一定指点一下,,有由本人只有几分了,所以很抱歉,万分感谢 ...…

查看全部问答>

有没有对手机软件开发感兴趣的刚毕业的同学?

朋友公司在招人,要求熟悉c/vc++,学历大专或本科,专业不限。 有感兴趣的朋友请把简历发到comey@163.com,我帮忙推荐 谢谢!…

查看全部问答>

新手关于89C51中断优先级问题

今天实验了外部中断INT0和外部中断INT1,书上说自然优先级INT0>INT1,可是我在实验中发现:当发生INT1的时候,INT0并不能中断INT1的执行,要等到INT1执行完毕了,才会执行INT0中断,体现不出这个自然优先级;而设置INT0为最高优先级时,才体现出来 ...…

查看全部问答>

请教单片机与internet通讯问题

我现在正在做一个利用gprs功能实现单片机与公网上的一台主机进行通讯的项目,开发模块组件是at89s52和西门子mc39i,自己找了很多资料看。接入一个开通了gprs功能的全球通gsm卡,利用串口调试得出下面的结果: at OK at+cgdcont=1,\"IP\",\"cmnet ...…

查看全部问答>

vector.asm

最近在用C编使用中断的小程序   ,书上说要将vector.asm一块加到工程中编译,     .ref _c_int0,_nothing,_INT1_ISR         .sect     \\".vectors\\" RESET   ...…

查看全部问答>

为什么我接受不到我发的东西那??????

#include #include #define  NOP() _nop_()  /* 定义空指令 */ sbit LS138A = P2^2;          //定义138译码器的输入A脚由P2.2控制 sbit LS138B = P2^3;       &nbs ...…

查看全部问答>