新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于ARM-Linux的MAX1303接口与驱动程序设计

基于ARM-Linux的MAX1303接口与驱动程序设计

作者:时间:2016-10-10来源:网络收藏

结构struct file_operations中的open字段对应着系统调用中的open函数。在应用程序中,通过open函数打开对应的设备文件时,内核会跳转到此函数指针处。此函数指针的实现,主要完成初始化工作。这包括的初始化配置和LPC3250驱动相关的寄存器设置。的初始化包括工作模式选择、量程范围选择、单端/差分输入选择、初始化通道选择。对于这四项,本系统全部使用默认设置:外部时钟模式;-Vref到+Vref的测量范围;单端输入;初始化输入通道0。所以,在open中不用配置MAX1303。对LPC3250的寄存器配置也比较简单,需要完成的配置有:片选信号拉高;时钟信号拉低;处理器输出拉低。
Write字段需要接收应用程序从用户空间传递到内核的的数据,然后将此数据通过GPO_17端口发送给MAX1303。这些数据主要用于修改MAX1303的配置,例如通道选择。向MAX1303写数据时需要注意MAX1303电气特性中的两个时间参数Tcss和Tcspw。Tcss对应着芯片的片选信号被拉低后到第一个时钟到来前所必需的时间间隔。Tcspw对应着写模拟输入配置字节、模式控制字节、转换启动字节时,任意两者之间的时间间隔。这两个时间参数都必须大于40 ns,且没有上限。本系统中,在Read中写转换启动字节,write中只做通道的切换,其他配置都使用默认的。
Read字段是MAX1303驱动的关键点。它负责读取采样结果,并将结果传递给应用程序。在read中,首先是用8个时钟向MAX1303写转换起始字节,然后使用8个是时钟周期等待AD转换完成。最后使用16个时钟周期读取MAX1303输出的转换结果。由于转换结果是以串行方式输出,故需要将读取的数据拼凑起来。又由于ARM使用的是端口3的GPI_06管脚读取MAX1303的输出数据,且对于端口3的操作是以32位进行的,所以还需要考虑拼接端口3的哪个数据位。本文的处理方式是先将端口3读出的数据右移6位。具体的操作代码如下:
d.JPG
release对应着系统调用中的close函数。它需要完成这个驱动所涉及的配置寄存器的复位,操作过程与open相反。在还原寄存器的默认设置后,打印一条设备文件关闭的信息,供应用程序开发者调试时观察使用。

4 Linux应用程序设计与测试
本文介绍的应用程序是整个系统的一部分,这里仅供测试使用。测试的功能主要是驱动中的write和read功能。由于的read中没有对读取的采样值做处理,所以得到的数据还不是输入信号的实际值,应用程序必须对数据进行处理。由于MAX1303采用单端、双极性输入,所以处理公式为:
e.JPG
式中,实际值的单位是毫伏;采样值是从MAX1303读取的数据;FSR是满量程范围,对于本系统,FSR是2*Vref;本系统采用内部电压基准,Vref的理论值是4.096 V,但实际系统中会有一定的漂移,范围一般在4.056 V到4.136 V之间。
为了测试,应用程序每秒读取一次两个通道的数据,并打印。应用程序的流程图如图4所示。

本文引用地址:http://www.eepw.com.cn/article/201610/306026.htm

f.JPG


根据应用程序的打印结果和CH1、CH2的实际输入,系统采样结果正确,系统运行稳定。

5 结论
A/D转换器在数据采集系统和智能控制系统中有极其重要的用途。嵌入式Linux在现代的嵌入式系统中也被广泛应用。本文描述的16位AD芯片的Linux驱动和硬件设计不仅在笔者所开发的系统中具有实际工程应用价值,同时,对其他具有SPI的AD芯片的硬件设计和Linux设计也有一定的参考价值。


上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭