焊缝检测系统中PCI总线高速数据采集卡的设计
>
2.5PCI接口芯片
PCI总线协议2.1版出现以后,集成芯片商们纷纷推出了与其兼容的总线接口芯片。其中,AMCC(AppliedMicroCircuitCorperation)公司的S5933接口方便、控制灵活,软件配置简单,在高速网络接口、数字通信、高速成像等领域有着广泛应用?2?。S5933最突出的优点是能够作为PCI主控设备发起DMA操作,即S5933完全具备双字DMA控制器的功能。
图3是结合系统应用而绘制的S5933结构框图。由图3可知,S5933内部具有配置寄存器组和操作寄存器组,配置寄存器组用于控制S5933在PCI总线系统中的运作方式(访问延迟、能否发起主控DMA操作等)以及记录系统分配给S5933的资源信息(如中断引脚、I/O等)?3?,而PCI总线和外加电路之间的数据交换则通过操作寄存器组实现。以I/O资源为例,计算机上电后,系统将分配给S5933的I/O资源首地址填入基地址寄存器,此值决定了操作寄存器组在I/O空间中的映射位置(S5933的操作寄存器组缺省地映射到I/O地址空间,便于软件操作),见图3。之后,CPU只需执行简单的I/O操作就可以读写操作寄存器组,隐含的地址译码工作由S5933完成。外加电路控制逻辑则保证操作寄存器组与外加电路的正常通信。S5933提供了三种形式的外加电路接口,高速数据采集卡使用信箱(Mailbox)寄存器实现双字输出,用FIFO方式实现高速DMA写操作。
图3S5933的结构框图
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:
HANDLEhDEVICE=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总线传入内存。
《焊缝检测系统中PCI总线高速数据采集卡的设计(第2页)》
本文链接地址:http://www.oyaya.net/fanwen/view/165450.html
2.5PCI接口芯片
PCI总线协议2.1版出现以后,集成芯片商们纷纷推出了与其兼容的总线接口芯片。其中,AMCC(AppliedMicroCircuitCorperation)公司的S5933接口方便、控制灵活,软件配置简单,在高速网络接口、数字通信、高速成像等领域有着广泛应用?2?。S5933最突出的优点是能够作为PCI主控设备发起DMA操作,即S5933完全具备双字DMA控制器的功能。
图3是结合系统应用而绘制的S5933结构框图。由图3可知,S5933内部具有配置寄存器组和操作寄存器组,配置寄存器组用于控制S5933在PCI总线系统中的运作方式(访问延迟、能否发起主控DMA操作等)以及记录系统分配给S5933的资源信息(如中断引脚、I/O等)?3?,而PCI总线和外加电路之间的数据交换则通过操作寄存器组实现。以I/O资源为例,计算机上电后,系统将分配给S5933的I/O资源首地址填入基地址寄存器,此值决定了操作寄存器组在I/O空间中的映射位置(S5933的操作寄存器组缺省地映射到I/O地址空间,便于软件操作),见图3。之后,CPU只需执行简单的I/O操作就可以读写操作寄存器组,隐含的地址译码工作由S5933完成。外加电路控制逻辑则保证操作寄存器组与外加电路的正常通信。S5933提供了三种形式的外加电路接口,高速数据采集卡使用信箱(Mailbox)寄存器实现双字输出,用FIFO方式实现高速DMA写操作。
图3S5933的结构框图
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:
HANDLEhDEVICE=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总线传入内存。
《焊缝检测系统中PCI总线高速数据采集卡的设计(第2页)》