嵌入Linux的ARM9处理器LPC3250与16位AD采样芯片

发布者:码农闲散人最新更新时间:2018-03-19 来源: eefocus关键字:Linux  ARM9处理器  LPC3250  AD采样芯片 手机看文章 扫描二维码
随时随地手机看文章

    本文针对数据采集与处理系统的应用需求,设计了嵌入Linux的ARM9处理器LPC3250与16位AD采样芯片MAX1303的硬件接口和驱动程序。首先,描述了LPC3250和MAX1303的性能、特点以及硬件接口电路设计方案。然后,在硬件平台的基础上,详细地阐述了嵌入式Linux下MAXl303驱动程序的组成模块和具体实现方法,并给出了部分源代码以及对设备驱动的测试方法。测试结果表明,系统工作正常、稳定,采样结果正确,具有实际工程应用价值。

    在数据采集系统中,通常是通过传感器将自然世界的物理量转化成电量,电量是模拟量,必须经过模/数转换才能被系统的处理器读取。现在的很多微处理器都有片内AD,但这些AD多数是8位、10位或者12位,有时候很难满足精度要求。所以需要利用处理器的接口资源外扩精度较高的AD芯片。然而精度越高,价格越贵。所以在选择AD芯片时,必须充分考虑这两个方面。本系统在对采样精度和价格进行权衡后,决定选择16位模/数转换器。由于设计的数据采集系统放置于环境恶劣的野外,所以全部器件都要满足工业级标准,所以最终选择了MAXIM公司的MAX1303。处理器选用了恩智普公司的ARM9微处理器LPC3250。在此基础上,设计了硬件连接,以及Linux2.6.29内核下的设备驱动程序,并通过编写的应用程序对驱动程序进行了测试。

1 芯片介绍
1.1 LPC3250简介
    LPC3250是恩智普公司推出的、采用RISC结构、基于ARM926EJ-S内核的32位工业级处理器,可工作于-40~+85℃的范围内。它的最高工作频率可达266 MHz,具有完整的存储管理单元(MMU),可以嵌入Linux/Wince等需要MMU支持的操作系统;高达256 kB的内部SRAM可用于数据和代码存储;32 kB数据高速缓存和32 kB指令高速缓存;矢量浮点协处理器具有硬件浮点计算功能。另外,片内有SD/MMC卡主机控制器和以太网控制器使系统实现文件存储和以太网功能变得简单,这对于数据采集系统非常有用。
1.2 AD芯片MAX1303简介
    MAX1303是MAXIM公司推出的工业级、低功耗、多量程、16位精度的模/数转换芯片,采用+5 V单电源供电,最高采样率可达115kbps。可使用+4.096 V片上基准或者3.800到4.136 V之间的外部电压基准。采用20引脚的TSOP封装。它的引脚如图1所示。

a.JPG

    
    从引脚图可以看出,芯片外部有多种电源引脚,这些引脚对应芯片内部独立的功能模块。对芯片采用独立的电源供电可以尽可能的使工作环境保持低噪声。第16、17引脚在使用外部电压基准时分别连接AVDD和基准电压,在使用芯片内部基准时,分别通过0.01μF和1μF的电容旁路到AGND1即可。其他引脚功能如表1所示。
    CH0-CH4支持4路单端输入,或者2路差分输入。SSTRB在AD转换器的某些工作模式下可指示转换状态。另外4种数字接口可通过SPI/OSPI /MICROWIRE兼容的串行接口与2.7 V至5.25 V的系统连接。
    MAX1303支持7种单端输入范围或者3种差分输入范围,有7种工作模式。这些都可以通过输入控制字进行配置。


2 系统硬件设计
    已提到,模/数转换器MAX1303可以通过SPI/QSPI/MICROWIRE兼容的串行接口进行控制。由于SPI比较常见,并且协议简单,本系统使用SPI协议控制此AD芯片。然而,虽然LPC3250有内置的SPI控制器,但本系统选择使用LPC3250的GPI/O口模拟SPI接口对MAX1303进行控制。下面分析原因。
    已提到,MAX1303有7中工作模式,其中,有3种用于数据采集。这3种工作模式是:外部时钟模式;外部采集模式;内部时钟模式。这3种采集模式各有优缺点。外部时钟模式的吞吐率最高,同时,给处理器带来的负担也最高;内部时钟模式吞吐率次之,能适当减轻处理器的负担;外部采集模式的吞吐率最低,但却能最大限度的减轻处理器负担。由于LPC3250性能强大,所以系统在采集数据时,使用吞吐率高的外部时钟模式。然而,使用外部时钟模式时,不像使用内部时钟模式和外部采集模式,处理器向MAX1303写完控制字和转换启动字后,只需等待MAX1303的SSTRB引脚输出的转换结束信号,然后就可以读取转换结果。使用外部时钟模式,需要精确的控制时钟个数,这使得在驱动程序中,要经常修改SPI的相关控制器,而且还要通过查询来确定时钟的个数。如果使用LPC3250的GPI/O口模拟SPI协议控制AD芯片就简单的多。控制GPO口不断翻转输出电平就可以产生时钟信号,而且可随意控制时钟个数。对于发送数据,只需要简单的把数据字节的每个位根据时钟变化通过GPI口输出给AD芯片。读取数据与发送数据是一个相反的过程,但类似。

b.JPG

    
    所以,用GPI/O口模拟SPI总线控制MAX1303非常简单。本系统有两路模拟信号需要采集,使用单端输入,MAX1303的另外两个输入端接地。LPC3250与MAX1303的硬件连接如图2所示。

3 Linux下设备驱动程序设计
    设备驱动程序是应用程序和硬件之间的桥梁,它为应用程序屏蔽硬件细节,并将硬件封装成一个文件的形式。当应用程序需要操作硬件时,只需操作硬件相对应的设备文件即可。Linux对设备的分类有许多种,常见的分类是将设备分成3种:字符设备、块设备、网络设备。这三类设备对应3种设备文件。不同设备的开发模式以及与内核的接口也不相同。MAX1303属于字符设备,本文将分析Linux2.6.29内核下MAX 1303的字符设备驱动设计方法。
    设备驱动程序与应用程序不同,应用程序从main函数开始执行,而驱动程序在被安装时,则是从module_init宏指定的函数处开始执行。module_init宏指定的函数被称为模块加载函数,它可以看成是驱动程序的入口。它通常完成地址映射,向内核注册并初始化cdev结构,创建设备文件等工作。模块加载函数的程序流程图如图3所示。

c.JPG

    
    与模块加载函数对应的,有一个模块卸载函数,此函数由module_exit宏指定,它在驱动模块被卸载时执行。它主要完成的工作包括:销毁设备文件;注销设备所对应的cdev结构;释放内存;注销设备号。
    Struct cdev在内核内部被用来表示设备,这是一个非常重要的数据结构。它内部有一个成员结构structfile_operations,用于连接设备编号和驱动程序的操作。这个数据结构包含一组函数指针,这一组函数的实现是设计驱动程序的重点和难点。这一组函数有很多,但根据项目需求,本系统只实现open,write,read,release 4个函数。


    结构struct file_operations中的open字段对应着系统调用中的open函数。在应用程序中,通过open函数打开MAX1303对应的设备文件时,内核会跳转到此函数指针处。此函数指针的实现,主要完成初始化工作。这包括MAX1303的初始化配置和LPC3250驱动相关的寄存器设置。MAX1303的初始化包括工作模式选择、量程范围选择、单端/差分输入选择、初始化通道选择。对于这四项,本系统全部使用默认设置:外部时钟模式;-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所示。

f.JPG

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

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


关键字:Linux  ARM9处理器  LPC3250  AD采样芯片 引用地址:嵌入Linux的ARM9处理器LPC3250与16位AD采样芯片

上一篇:基于LPC2104型CPU的汽车行使记录仪分析
下一篇:基于STM32W108的无线程控微加热平台的设计

推荐阅读最新更新时间:2024-03-16 15:57

安装配置arm-linux-gcc
下载arm-linux-gcc并解压,把里面的arm文件夹整个cp到/usr/local/ 然后是注册环境 一般是修改profile 1:对于ubuntu中profile是调用/etc/bash.bashrc来运行的 在/etc/bash.bashrc后加上 if ; then PATH=/usr/local/arm/2.95.3/bin: ${PATH} fi 2:在Federal下可以vi /etc/profile;在出现pathmunge 的语句段后添加pathmunge /usr/local/arm/2.1.3(版本号)/bin; 然后source /etc/profile更新一下就可以用arm-li
[单片机]
linux内核移植和网卡驱动(二)
一,内核移植步骤: 1, 修改顶层目录下的 Makefile ARCH ?= $(SUBARCH) CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE: % =%) 修改为: ARCH :=arm CROSS_COMPILE :=/usr/local/arm/4.4.3/bin/arm-linux- 2, 拷贝配置文件 这里用的是 FS2410 开发板,拷贝相应的板文件到顶层目录下 cp arch/arm/configs/s3c2410_defconfig ./ 编译配置文件,生成 .config 文件: Make s3c2410_defconfig 内核配置的目的: .config
[单片机]
05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动
一、前面的工作: (1)从头移植3.4.2内核,修改分区,制作jffs2文件系统 http://blog.csdn.net/fengyuwuzu0519/article/details/69802922 (2)修改内核支持yffs2、制作yffs2文件系统、内核裁剪、制作补丁 http://blog.csdn.net/fengyuwuzu0519/article/details/70162666 (3)移植内核支持DM9000C网卡驱动(可以使用mount nfs)、支持三路串口 http://blog.csdn.net/fengyuwuzu0519/article/details/72846205 到此我
[单片机]
05-S3C2440学习之内核(移植)<font color='red'>linux</font>3.4.2移植(4)支持LED驱动、按键驱动
Linux 发行版 Debian 系统准备停止支持 i386 架构
12 月 18 日消息,据 phoronix 报道,最近在剑桥举行的一次小型 DebConf 活动上,Debian GNU / Linux 发行团队举行了一次春季会议,并确定了一些未来发展的项目,包括停止支持 i386 架构。 Debian 发行团队决定,Linux 内核、Debian 安装程序和 Debian 镜像团队将“在不久的将来停止支持 i386”。 Debian 开发者 Paul Gevers 分享了以下内容: 就目前而言,我们预计内核、d-i 和镜像团队将在不久的将来停止支持 i386。接下来,有两条路线可以运行 i386: 1、作为 amd64 系统上的多架构选项 2、作为另一个架构系统上的 i386 chro
[嵌入式]
抗议美国制裁 俄政府或全面换装Linux
    据科技网站TechRadar报道,在一次采访中,俄罗斯互联网新沙皇克莱门科再次语出惊人,他表示俄罗斯未来将把政府部门电脑中的Windows系统全部撤下,换成Linux。 俄政府或全面换装Linux(图片来自ifeng)   克里米亚独立事件发生后,美国对该地区实施了制裁,此举是俄罗斯对于美国制裁的抗议。消息称,未来将有22000家俄罗斯政府部门将操作系统更换成Linux。     抛弃Windows只是俄罗斯抗议西方制裁的手段之一。此前,克莱门科还表示俄罗斯将对谷歌和苹果等美国科技巨头征收更多的“科技税”,俄罗斯议会未来可能 将科技产品的增值税提高到18%,这就意味着科技巨头每年将多交3000亿卢布税款,克莱门科
[手机便携]
Arm Linux系统调用流程详细解析
Linux系统通过向内核发出系统调用(system call)实现了用户态进程和硬件设备之间的大部分接口。 系统调用是操作系统提供的服务,用户程序通过各种系统调用,来引用内核提供的各种服务,系统调用的执行让用户程序陷入内核,该陷入动作由swi软中断完成。 1、用户可以通过两种方式使用系统调用: 第一种方式是通过C库函数,包括系统调用在C库中的封装函数和其他普通函数。 第二种方式是使用_syscall宏。2.6.18版本之前的内核,在include/asm-i386/unistd.h文件中定义有7个_syscall宏,分别是: _syscall0(type,name) _syscall1(type,name,type1,a
[单片机]
linux下S3C2410的DMA驱动程序开发
网上介绍LINUX下的一般驱动程序开发示例浩如烟海,或是因为简单,关于DMA驱动的介绍却寥寥无几;近期zhaoyang因工作需要,花了几日时间开发了某设备在S3C2410处理器Linux下DMA通信的驱动程序,有感于刚接手时无资料借鉴的茫然,故写点介绍,期待能给有DMA开发任务的网友们一点帮助。 本文将包括如下内容: DMA驱动主要函数功能 驱动中关键技术分析 具体的DMA实例分析 申明:本DMA驱动开发介绍仅适合S3C2410处理器类型,分析源码为韩国MIZI研究中心维护的dma驱动代码: linux/arch/arm/mach-s3c2410/dma.h,linux/arch/arm/mach-s3c2410/dma.
[单片机]
基于嵌入式Linux与S3C2410平台的视频采集
摘要:首先简介基于嵌入式Linux系统的S3C2410平台和在平台上进行开发所需的软件环境,接着详细论述在该平台上如何实现视频采集这一应用,并对视频采集程序的实现进行具体的介绍,最后完成应用程序向目标平台的移植。 关键词:嵌入式Linux Video4Linux S3C2410 内存映射 随着多媒体技术、网络技术的迅猛发展和后PC机时代的到来,利用嵌入式系统实现远程视频监控、可视电话和视频会议等应用已成为可能。为了实现这些应用,实时获得视频数据是一个重要环节。针对这一点,本文在基于嵌入式Linux系统平台上,利用Video4Linux内核应用编程接口函数,实现了单帧图像和视频连续帧的采集,并保存成文件的形式供进一步视频处理和
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved