焊缝检测系统中PCI总线高速数据采集卡设计
Applied Micro Circuit Corperation)公司的S5933接口方便、控制灵活,软件配置简单,在高速网络接口、数字通信、高速成像等领域有着广泛应用。S5933S8593最突出的优点是能够作为PCI主控设备发起DMA操作,即S5933完全具备双字DMA控制器的功能。
图3是结合系统应用而绘制的S5933结构框图。由图3可知,S5933内部具有配置寄存器组和操作寄存器组,配置寄存器组用于控制S5933在PCI总线系统中的运作方式(访问延迟、能否发起主控DMA操作等)以及记录系统分配给S5933的资源信息(如中断引脚、I/O等),而PCI总线和外加电路之间的数据交换则通过操作寄存器组实现。以I/O资源为例,计算机上电后,系统将分配给S5933的I/O资源首地址填入基地址寄存器,此值决定了操作寄存器组在I/O空间中的映射位置(S5933的操作寄存器组缺省地映射到I/O地址空间,便于软件操作),见图3。之后,CPU只需执行简单的I/O操作就可以读写操作寄存器组,隐含的地址译码工作由S5933完成。外加电路控制逻辑则保证操作寄存器组与外加电路的正常通信。S5933提供了三种形式的外加电路接口,高速数据采集卡使用信箱(Mailbox)寄存器实现双字输出,用FIFO方式实现高速DMA写操作。
3 高速数据采集卡的软件设计
3.1 虚拟设备驱动程序的设计
系统的控制软件工作在WINDOWS98操作系统下,为此开发了高速数据采集卡的虚拟设备驱动程序(VXD)。由S5933的结构可知,VXD需要实现双字I/O操作和物理内存管理。双字I/O的操作相对简单,调用虚拟机管理器(VMM)的SIMULATE_VM_IO例程即可,较困难的是物理内存管理。由于S5933发起的DMA操作需要物理内存的起始地址,因此必须涉及页面级的物理内存操作,故采用下述内存管理策略:
应用程序加载VXD;
加载成功后发送申请缓冲区的事件给VXD;
VXD使用PAGEALLOCATE例程得到地址连续的适当长度(如四页即16K字节)的物理内存;
锁定缓冲区并将物理地址逆映射为线性地址;
将物理首地址填入S5933的写RAM地址寄存器;
允许S5933进行主控DMA传输;
传输完毕时,应用程序请求VXD释放上述物理内存。
3.2 应用VXD设计数据采集程序
将VXD放在应用程序的同级目录下,则以下VC++代码就能动态加载(VXDVIEWER可验证)一个VXD:
HANDLE hDEVICE=CreateFile("\\\\.\\pathname",0,0,NULL,0,FILE_FLAG_DELETE_ON_CLOSE,NULL);
编好的VXD为应用程序提供了若干服务例程,应用程序执行下面的代码即可调用服务例程ZHC1:
DeviceIoControl(HDEVICE,ZHC1,lpinbuffer,ninsize,lpoutbuffer,noutsize,NULL,NULL);
数据采集算法如下:
DO {读取写RAM字节计数器;
再次读取写RAM字节计数器;
IF 计数器内容为零 THEN
跳出循环进行后续数据处理;
ELSEIF 两次读取的结果不同 THEN
不做任何处理而进入下一次循环;
ELSE
清相应的状态标志并设置有关寄存器以从断点处续传;
ENDIF
}
调试表明,应用VXD的数据采集程序能够稳定、高速地采集外部数据。对焊缝缺陷自动超声检测系统的实际测试表明,该高速数据采集卡能满足缺陷回波的检测要求。图4(a)为实际测试时用示波器观测到的模拟放大电路的输出信号,图4(b)是A/D转换后、截掉始波并经半波整流后得到的信号。
高速数据采集卡具有体积小、可靠性高、控制逻辑更改方便、可扩展性强等优点。对于检测厚度为10~100mm的钢板,一次采集的数据最多为4KB,至多只需0.13ms就可将数据从卡上FIFO经PCI总线传入内存。
- 用双端口RAM实现与PCI总线接口的数据通讯(05-06)
- 基于PCI总线和DSP芯片的图像处理平台的硬件设计(07-06)
- 基于DSP和PCI总线的通用数字信号处理系统(11-13)
- 一种基于PCI总线和DSP技术的虚拟仪器设计(03-16)
- 基于Linux平台的天气雷达高速数据采集系统设计(03-13)
- 基于DSP与PC机的PCI总线高速数据传输 (07-08)