2024年6月9日发(作者:)
基于PCI总线的高速数据采集卡系统设计与实现
裴喜龙
(信息工程大学 郑州450002)
摘要:本文介绍一种基于PCI总线的高速数据采集卡系统的设计方法,讨论了设计高速数据
采集系统的关键技术,给出了系统整体设计方案和PCI接口通信方式,完成了采集卡设备驱
动程序及其应用程序的实现。
关键词:PCI总线 数据采集卡 设备驱动 应用程序
中图分类号:TP393.03。
Design and Implement of A High speed Data Acquisition Card Based on PCI Bus
Pei Xilong
(Information Engineering University, Zhengzhou 450002, China)
Abstract: In this article, we introduce a method of how to design a high speed data acquisition
card based on PCI bus, discuss pivotal technique about this system and the communication of the
PCI interface, propose the whole design project and the develop the device driver and realize the
app.
Keywords: PCI BUS
Data Acquisition Card
Device Driver App
1. 引言
数据采集技术是现代信号处理的基础,
广泛应用于雷达、通信、遥测遥感等领域。
在数字信号处理工作中,实现对所需数据高
速、实时、大批量采集具有重要意义。随着
信息科学的飞速发展,人们面临的信号处理
任务愈来愈繁重,对数据采集系统的要求也
愈来愈高。
利用PC机作为数据采集的平台,通过
数据总线将采集的数据高速传输到PC机内
存中,是实现采集系统数据存储的有效手
段。用于PC机的采集系统以前大多基于ISA
总线结构,这种结构的最大缺点是传输速率
低,无法实现高速数据的实时传输。PCI总
线的出现以其卓越的性能受到了广泛的应
用。PCI总线是Intel公司推出的一种微机扩
展槽接口标准,时钟频率为0~33MHz,其
最大数据传输速率为132~528Mbps,有效
克服了传统总线进行高速数据传输时的瓶
颈现象,使数据的实时高速采集和传输成为
可能。在系统中充分利用PCI总线的优点直
接将采集的数据传到微机内存,有效地解决
了数据的实时传输和存储问题。
2.系统设计方案
2.1 系统结构框图
图1 系统结构框图
采集卡系统的结构框图如图1所示。其
中,A/D转换器采用美国AD公司的
AD9432芯片。该芯片为12 bit单路模数转
换器,其最高转换速率为I/O5 MHz。输入
信号模拟带宽可达500 MHz,采样时钟为
PECL差分电平输入,转换数据为TTL电平输
出。逻辑控制电路是高速数据采集系统的核
心部件,它主要完成启动ADC采集、选择触
发方式、仲裁局部总线、产生片选信号、读
取存储数据、控制总线隔离信号等功能。数
据缓存电路一边接受AD转换器输出的数据,
一边通过PCI总线快速的读走。同步FIFO
可以满足系统在同一时刻读写时序的要求,
能够实现采集数据的实时传输。时钟电路产
生采用频率合成的办法来产生高质量的时
钟,SY89429就是一种可编程的高性能的频
率合成芯片。该芯片将串/并2种配置接口、
锁相环电路和电平转换电路集成在芯片内,
采用该芯片简化了电路设计的复杂性,同时
也提高了时钟系统的可靠性。
2.2PCI接口设计和DMA数据通
信
实现PCI总线接口的方法主要有以下2
种:一种是进行基于IP模块的FPGA设计,
这种方法多用在设计者只需要用PCI接口
的部分功能的场合,存在的问题是开发系统
昂贵、开发周期较长和设计难度大;另一种
就是采用专用PCI接口
芯片,专用的PCI接口
芯片功能很多,能够满足设计者的要求。考
虑到PCI总线规范的复杂性,本设计采用了
PLX公司的PCI 9054作为PCI总线接口芯
片,以简化硬件设计。
PCI 9054是作为PCI总线和局部总线一
端的设备的桥梁,保证了局部总线一端的设
备在符合PCI总线的规范后连接到PCI总线
上。PCI 9054提供了多个内部寄存器,以尽
量提高总线接口设计的灵活性和传输速率。
所有的寄存器可分为PCI总线配置寄存器
和局部总线配置寄存器两类。PCI总线配置
寄存器是为符合PCI规范所设置的,局部总
线配置寄存器用于设定局部总线的工作方
式。对于PCI 9054,需要一个EEPROM存
储配置信息,当主机启动时,EEPROM完
成对PCI 9054内部的PCI总线配置寄存器
和局部总线配置寄存器的初始化。在设计中
采用Microchip公司93LC46作为EEPROM
存储配置信息。该芯片符合PCI V2.2规范,
内嵌2路DMA引擎。它提供2种总线间的命
令译码,能够为系统的高速数据传输提供不
间断的接口。
DMA传输方式是PC机与外设高速交
换数据的重要方法。在进行DMA 传送时,
PCI9054取代微处理器成为总线的主控器。
由DMA控制器来提供源地址和目标地址,
控制传送结束和产生读写控制信号等。数据
的传送速度取决于PCI9054中DMA控制器
和PCI总线的速度。基于PCI总线的数据采
集卡理论上的最大传速度可达132 MB/
s(32 bit数据宽度)。通过编程可以访问
PCI9054内部寄存器,设定和改变DMA传
输的周期长度。采用DMA传输方式提高了
传送速度,满足大数据量的实时传输要求。
3 PCI驱动设计与开发
3.1PCI驱动程序的引出
以上仅针对硬件电路的设计思路和接
口设计作了详细的说明。在Win2000/Win
NT操作系统下,应用程序不能对I/O端口
直接进行操作,因此将A/D转换的数据读进
内存中就要由驱动程序来完成。驱动程序作
为下层硬件和上层应用程序的纽带,实现应
用程序对底层硬件的访问。数据采集卡、驱
动程序和应用程序三部分的数据流程如图2
所示。
初始化PCI9054
No
数据采集数量
达到要求
启动A/D
Yes
应用程序处
数据经9054进
理采样数据
入内存
应用程序调用驱动
程序获取采样数据
显示频谱
图2 接口、驱动、应用程序流程图
由于驱动程序的工作、编写和调试都与
用户态的应用程序有很大区别,开发者必须
对系统内核有深入的了解。Numega公司的
Driver Works软件提供了一系列常用类库供
驱动程序开发使用,相对于使用Microsoft
DDK的由底层起始的开发方法,极大地减
少了代码量,使开发人员能集中精力于核心
代码的设计,从而极大的提高了工作效率。
我们在驱动编写过程中采用了就采用了该
软件。
3.2驱动程序的编写
WDM 驱动程序有着非常规范的编写
模式,PCI设备驱动属于功能驱动程序,处
于即插即用设备栈的顶层。系统和应用层对
设备的访问都是通过发送I/O请求包(IRP)
到驱动程序来完成的,因此,驱动程序主要
是由一组处理各种各样的IRP的例程构成
的。操作系统I/O管理器在下列情况下将
会调用驱动程序的子例程:驱动程序被装入
时,调用DriverEntry例程;驱动程序被卸
出或系统关闭时,调用Unload例程;用户
态应用程序发出I/O系统服务请求时,启
动Dispatch例程;开始操作设备时,调用
Start IO例程;设备产生中断时,调用中断
服务例程(ISR)和DPC例程。
3.2.1驱动程序的初始化和清理例程
当I/O管理器装入驱动程序时,首先调
用DriverEntry这一例程。该例程需要执行
一系列的驱动程序初始化和硬件复位等工
作。在DrivcrEntry例程中,驱动程序首先
向系统查询采集卡是否在PCI槽中。如没有
找到摄入子系统采集卡,DriverEntry例程显
示硬件设备未找到信息并卸载已加载的驱
动程序。如果找到所需要的摄入子系统采集
卡,DriverEntry例程向系统登记所需要的资
源(包括映射后的内存空间,I/O空间,DMA
操作适配器以及中断)。同时,DriverEntry
例程向系统提交其他例程的调用入口地址,
如挂接中断的中断服务例程和DPC例程地
址,创建本设备的名字对系统可见以供应用
程序将来引用。
当需要将驱动程序从系统中卸载时,
I/O管理器调用驱动程序的Unload例程。
Unload例程需要取消DriverEnlry例程所作
的任何操作,比如解除属于该驱动程序的所
有资源的分配,以及删除属于驱动程序的任
何内核对象(如向系统所申请的内存块、自
旋锁等)。
3.3.2数据传输例程
1) StartIo例程
当需要接触采集卡进行数据操作时,
I/O管理器调用驱动程序的StartIo例程。
StartIo首先检查当前的IRP包,确保所需要
进行的是读数据操作并且该操作未被取消,
然后进行DMA操作的准备工作,这包括取
出被锁定的用户空间的各段的物理地址,计
算每一段的地址长度和对应的采集卡上内
存地址,然后将有关数据写入为PCI9054进
行链接式DMA操作所分配的DMA控制块
链中,设置PCI9054的DMA控制寄存器的
模式。在进行所有这些操作时,PCI9054的
DMA通道都是被禁止使用的,以防止在操
作过程中采集卡请求PCI9054进行DMA传
输而使用错误的数据。
在所有这些配置数据被写入后,向
PCI9054的内部控制字寄存器写入允许
DMA传输指令,以等待采集卡上的控制芯
片向PC19054发出DMA传输请求。与此同
时,采集卡正在摄入数据,当采集卡所摄入
的数据填满当前的那组卡上缓冲区后,控制
芯片向PC19054发出DMA传输请求,然后
PC19054开始DMA操作将数据由卡上缓存
传输至主机内存。当DMA传输操作传输完
链接模式的最后一个DMA块,PC19054将
向主机发出一个中断请求,从而触发驱动程
序的中断服务例程执行。
2)中断服务例程(ISR)
当驱动程序的设备产生一个中断时,系
统内核的中断派发器负责调用驱动程序的
中断服务例程。由于采用电平触发型的PCI
中断允许共享,ISR例程首先需要确定该中
断是否是由本设备产生的,这可以通过读入
对应的PCI9054控制字寄存器来判断。如果
这次中断的中断源不是来自本设备,ISR立
即返回并通知内核,内核的中断派发器调用
和该中断相关联的下一个驱动程序的ISR
例程,直到和该中断相关联的某个驱动程序
认领并处理该中断。
如果ISR发现该中断的确是由PC19054
产生,ISR将向PC19054的适当控制字寄存
器写入控制字标识此中断已被响应,同时检
测PCI9054的状态字寄存器,判断是否在本
次传输过程中有缓冲区溢出;最后向采集卡
控制芯片写入内部控制字表示本次中断已
完成以清除控制芯片对PCI9054的DMA传
输请求。
3)DPC例程
驱动程序的DPC例程用来实现设备操
作的后处理工作,比如如果本次DMA操作
有更多的数据要传输,它要调用相应例程来
继续设置PCI9054的DMA控制器为下一次
传输准备。如果传输已经全部完成,DPC例
程将传输的数据大小和最后的状态信息放
入IRP,通知I/O管理器完成当前的请求,
并通知I/O管理器准备接受下一个IRP进行
处理。
3.3 驱动程序与应用程序的通信
应用程序与驱动程序间的通信通过调
用Win32 API实现,应用程序用CreatFile()
通过已经定义的设备接口获取驱动程序的
文件句柄,然后将文件句柄作为其他Win32
API函数的一个参数,对驱动程序进行数据
操作.调用DevieeloControl进行数据量较小
的控制指令传输或端口、寄存器访问,调用
ReadFile(),writeFile()等函数进行数据量较
大的传输如内存读写。
驱动程序与应用程序通信有
DeviceControl异步完成、Win32事件通知
两种方式。Win32事件通知是由应用程序创
建了一个事件后,直接将该事件句柄传递给
驱动程序,然后等待驱动程序发送事件通
知.驱动程序通过类Kevent获取这个事件
的一个对象指针后,在
IRQL_DISPATCH_LEVEL级别的例程中设
置事件信号状态融发应用程序,本文使用了
该方法。
4.结束语
使用基于PCI总线的高速数据采集卡
是现代信号处理中实现实时数据进机存储
的重要方法。数据采集卡的驱动程序与应用
软件,是数据采集系统的一个关键问题。作
者利用以上方法,在实验室中利用PC19054
接口芯片设计的数据采集卡,实现了持续传
输速率大于40OMb/s的超高速数据采集系
统。
参考文献
[1] 沈兰荪.高速数据采集系统的原理及应
用.北京:人民邮电出版社,1995.
[2] Microsoft Corporation. Windows 2000 驱
动程序开发大全 第1卷 设计指南[M].
北京:机械工业出版社,
2001.1025-1055.
[3] PC19054 data sheet[-Z].USA:PLX Corp,
2000.
[4] 李贵山.PCI局部总线开发指南.西安:
西安电子科技大学出版社,2000.
[5]张艳春.基于USB接口的同步视频输出系
统设计.微计算机信息.2005.
裴喜龙 1979年5月出生,本科学历,解放军信息工
程学院信息科学系研究生,研究方向是计算机
网络与信号处理


发布评论