《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > 基于接口芯片CH365的PCI数据采集系统的设计
基于接口芯片CH365的PCI数据采集系统的设计
徐义翔 李正明
镇江江苏大学电气学院(212013)
摘要: 一种基于PCI总线的高速数据采集传输系统的实现方法。概述了PCI总线控制专用芯片CH365的主要特点及其本地硬件地址的实现方法,并给出了在12通道数据采集系统中的应用实例。
Abstract:
Key words :

 摘   要: 一种基于PCI总线的高速数据采集传输系统的实现方法。概述了PCI总线控制专用芯片CH365的主要特点及其本地硬件地址的实现方法,并给出了在12通道数据采集系统中的应用实例。
关键词: PCI总线  本地硬件地址  工作模式

  PCI 总线是先进的高性能32/64位局部总线,可同时支持多组外围设备,不受制于处理器,数据吞吐量大,并能完全兼容现有的ISA/EISA/MCA等扩充总线。PCI总线以其高性能、高效率以及与现有标准的兼容性和预置的发展空间,被计算机界认为是最具发展潜力的局部总线标准。
  PCI总线是32位并可升级到64位的独立于CPU的总线结构,总线速度高达33/66MHz,同步控制、猝发(burst)传送使得数据传送速率高达132Mbps位(32位总线)、264Mbps(64位总线)。线性猝发、成组数据传输是PCI总线的基本传输机制。一次猝发传输通常由1个地址周期和1个或多个数据周期组成。它解决了总线的速度问题,为PCI外设提供了一个高带宽的数据通道,将外设从I/O总线上移下来,不需处理器的介入便可进行数据传输。PCI总线可进行隐式仲裁。当前主设备正在执行数据传送时,PCI机理允许总线仲裁发生。如果仲裁器决定将下一次总线所有权授予某个主设备,而不是当前交易的主设备,则它将从当前主设备取回GNT(仲裁信号允许主设备使用总线低电平有效)并将其发给总线的下一个所有者,直到当前主设备让总线空闲时,下一个所有者才能取得总线所有权。这样,在执行仲裁总线周期的时间内没有浪费总线时间,提高了总线的效率。
  PC机中包含3种空间:存储器空间、I/O空间和配置空间。存储器空间主要包括内存、显存、扩展ROM和设备缓冲区等,一般用于存放大量数据和进行数据块交换。I/O空间主要包括设备的控制寄存器和状态寄存器,一般用于控制和查询设备的工作状态以及少量数据的交换。目前PC机的存储器空间为4GB,地址范围是00000000H~FFFFFFFFH,而I/O空间为64KB,地址范围是0000H~FFFFH。配置空间主要用于向系统提供设备自身的基本信息,并接受系统对设备全局状态的控制和查询。
1  系统结构
  本系统是一个12路温度数据采集控制系统。该系统具有良好的实时性,可以随机选择任何一路作为输入,而不会影响到其他数据采集的结果。整个系统由1台586工业控制计算机控制,采用基于PCI插卡的形式,辅以一系列外围电路协同工作。系统结构框图如图1所示。

2  新型PCI接口芯片CH365
2.1 CH365的特点
  PCI总线比其他总线要复杂得多,它有严格复杂的时序要求。为了实现自动配置和扩展需要,PCI接口有一个256字节的配置空间。所以,对于一般的PCI总线应用设计工程师,为了缩短开发设计周期,不必去设计复杂的接口模块,甚至不必完全理解PCI规范的细节,就能进行PCI用户设备的设计,因为可直接采用专用的PCI接口芯片。通过使用专用芯片,设计者只需要使用相关的地址线、数据线以及几个控制信号,就能实现PCI 总线与PCI用户设备之间的连接。目前,国外已有比较成熟的PCI专用集成电路芯片的设计技术,如美国的PLX公司的PCI90xx 系列产品已被广泛采用。这类芯片的通用性较强,但是同时也带来成本高和开发周期长的问题。而我们已经初步开发了基于ISA插槽的多路数据采集控制卡。在这样的前提条件下要能使其工作在PCI总线,可采用PCI90xx芯片(每片价格一般在150元以上)或者AMCC公司的S59XX系列芯片(如常用的S5933,价格500多元/片)。这二种芯片价格都比较贵,而且虽然S5933支持DMA传输,但本系统中并不需要此功能即可完成工作要求。因此从降低开发成本和充分利用现有资源的角度考虑,本设计选择了沁恒电子出品的一种新型PCI快速简易接口芯片CH36X(价格只需24元/片)。CH36X系列PCI接口芯片不同于目前市场上运用的常规接口芯片,它是一种低成本、快速、简易的接口芯片,能完成大部分的PCI接口工作,尤其是这种芯片具有本地硬件地址的功能,使原工作在ISA8位总线上的电路能够平滑移植到PCI总线上而不需要非常大的硬件改动,而且底层驱动软件的改动也较小,这将给上层控制软件的优化提供更多的时间,而不需要再花费大量时间在底层调试上。
2.2 CH365功能简介
  CH365是一个连接PCI总线的通用接口芯片,支持I/O端口映射、存储器映射、扩展ROM以及中断;可将32位高速PCI总线转换为简便易用的类似于ISA总线的8位主动并行接口,用于制作低成本的基于PCI总线的计算机板卡;CH365的存储器空间占用32KB,偏移地址0000H~7FFFH,且可以全部提供给外部设备使用(实际存储器地址是存储器基址加上偏移地址);CH365的I/O空间占用256B,由于偏移地址F0~FFH是CH365芯片自身的专用寄存器,所以可以提供240B给外部设备使用,偏移地址是00H~EFH,实际的I/O地址是I/O基址加上偏移地址。
  CH365的地址线A15~A0用于提供相对于基址的偏移地址;数据总线D7~D0在读操作时用于输入数据,在写操作时用于输出数据;IOP_RD、IOP_WR分别为I/O读、I/O写提供选通脉冲信号,而MEM_RD、MEM_WR分别为存储器读和存储器写提供选通脉冲信号。CH365提供的地址线、数据总线和读写选通信号线类似于ISA总线的信号线,而提供的读写选通信号只在CH365的基址映射范围内有效,相当于经过片选之后的选通信号,所以外部设备可以省去片选信号。
  在I/O读写操作期间,CH365的A7~A0输出I/O偏移地址,提供给外部设备的有效偏移地址范围是00H~EFH,且CH365的A15~A10保持不变,而A9~A8输出PCI总线的地址。如果使用本地硬件定址的功能,则应该对CH365 的A9~A0进行地址译码,以实现与ISA 总线相兼容的000H~3FFH地址范围内的I/O 端口定址。
  在存储器读写操作期间,CH365的A14~A0输出存储器偏移地址,提供给外部设备的有效偏移地址范围是0000H~7FFFH,且CH365的A15保持不变,但可以事先设定为高电平或者低电平,用于存储器地址线的扩展或者页面选择。由于扩展ROM属于存储器的一种,所以其操作方式以及操作时序与存储器相同。
CH365支持PC机程序以单字节、双字节(字)、4字节(双字)为单位对I/O端口或者存储器进行读写。在多字节连续读写操作期间,CH365 每读写完1个字节数据,就会自动将偏移地址加1,以指向下一字节的偏移地址。
3  硬件实现
3.1 采集部分
  当8255接收到计算机的采集控制数据后,即将数据传输给4线/16线译码器(此处选择了HCF4514BEY作为译码器),译码器输出1路选择信号选中12路达林顿管(MC1413)驱动的一路,之后MC1413一路继电器吸合,将温度数据传输给下一步骤。在对12路温度数据采集时,虽然可以考虑采用比电磁继电器体积小得多的集成块式的模拟数据选择器,但考虑到工业现场电磁干扰比较强烈,为了使系统能更加稳定地工作,所以选择了电磁继电器进行选择测量。
3.2 断偶检测、冷端补偿及放大
  热电偶在工业现场使用中有可能发生断线故障,因此很有必要设置断偶保护电路。冷端补偿采用的是半导体PN结补偿法,采用了美国NS公司的LM335作为二端齐纳管工作。LM335是结构精密、容易校准的集成温度传感器,在+10mV/°K下,具有一个与绝对温度直接成正比的击穿电压,其动态阻抗低于1Ω,工作在400?滋A~5mA的电流范围时,其性能并无变化。对微弱热电偶信号进行处理之前应将其放大,并根据K型热电偶的特性,放大倍数可选40,此时放大后的电压为52mV×40=2V,符合A/D转换器MC14433的输入电压要求。
3.3 A/D转换电路
  A/D转换主要有二大接口:模拟输入端和数据输出端。在A/D数据转换系统的设计中,其很大程度上依赖于内部或外部的DC电压基准所建立的电压精度。因此设计基准电压最关键的问题是精度要高和温漂要小。本设计选择了ADI公司的ADR29X系列的基准电压源。
3.4 基于PCI接口的传输
  本系统采用PCI总线,利用其高达33MHz(32 位)的传输速率完成连续采样。并从快速方便,且能尽最大可能降低成本的角度考虑,本系统选择了沁恒电子公司的CH36X系列芯片。该芯片完全可满足系统的要求。
3.5 CH365及外围辅助工作电路的实现原理框图
  CH365外围辅助工作电路具体接线框图如图2所示。图2中用了2块型号为ATF16LV8C-10PC的16V8。一块用来实现本地硬件地址,另一块用来设置板卡ID。

3.6 本地硬件地址的实现
  CH365提供了一种可以由产品制造商选定PCI设备I/O 地址的方法,即本地硬件定址。其原理是将PCI设备的部分I/O 地址译码通过外围的二级译码电路实现。外围的二级译码电路比较简单,与ISA总线的I/O地址译码类似。CH365将PCI总线I/O操作的地址同步提供给外围电路,当外围电路对地址译码匹配后,则向CH365请求本地硬件定址, 再由CH365请求PCI总线在该I/O地址进行I/O 操作。
  CH365 内部已经限定了本地硬件定址的地址范围是03FFH~0000H,它对应于ISA板卡的I/O地址范围。当PC机进行I/O操作时,CH365的A9~A0总是同步输出操作地址,外围的二级译码电路只需要对地址A9~A0进行匹配比较。CH365要求外围的二级译码延时不超过20ns,也就是说,外围电路对地址译码比较后产生本地硬件定址请求的时间不能超过20ns。实际的外围译码电路通常选用可编程器件16V8。在本例中选择了ATF16LV8C-10PC,可以自行对ATF16LV8C-10PC的编程数据进行修改,使CH365定位到指定的I/O端口地址。使用本地硬件定址功能后,CH365不仅在该硬件定址范围响应I/O操作,同时也在计算机自动分配的I/O地址范围内响应I/O操作。
3.7 CH365的工作模式的指定
  为了在不增加引脚的前提下提供更多可用功能,CH365对部分引脚进行复用,通过“工作模式设定”进行功能选择。“工作模式设定”的具体方法是:将本地端8 位数据信号线D7~D0采用上拉或下拉的方式设定为所需的高电平或低电平,CH365被复位后则根据这些信号线的默认状态设定工作模式及参数。而这些信号线在作为8位数据总线被驱动时,因为一般外部设备的驱动电流不小于1mA,所以上拉或下拉都不会影响其对数据总线的驱动。另外,CH365仅在被复位后的1?滋s内一次性设定工作模式以及参数。所以,如果外部设备的驱动能力很小或者是OC集电极开路驱动,则只可以在复位后的短时间内实现下拉,而在其余时间屏蔽下拉或者转换成上拉。CH365的具体设定工作模式如表1所示。

4  软件实现
  CH365提供了CH365DLL.H和CH365DLL.LIB 2个文件来设计Windows下的应用程序。对于一般的VC编译环境,将上述2个文件放置在应用程序同一目录下,然后将CH365DLL.LIB添加到应用程序的链接库中。当应用程序被编译时就会自动链接。
4.1 初始化CH365的源代码
  #include <windows.h>
  #include <stdlib.h>
  #include <stdio.h>
  #include <conio.h>
  #include <winioctl.h>
  #include″CH365DLL.H″  //如果在DOS下使用,请
                //使用DOS库
  #define DIN_PORT 0xef//数据输入端口
  mPCH365_IO_REG mIoBase;//I/O基址
  UCHAR Read_data( );  //读(上传)1个字节数据的
                   //子程序
  void Write_data(UCHAR data);//写(下传)1个字
                //节数据的子程序和主程序
  void main( ) {
  UCHAR data,Input_data;
  int i;
               //若要使用DLL则需要先加载
  if (LoadLibrary(″CH365DLL.DLL″)==NULL ) return;
               //加载DLL失败
  if(CH365OpenDevice(FALSE,FALSE)==INVALID_HANDLE_
  VALUE ) return;    //打开CH365设备
  CH365GetIoBaseAddr(&mIoBase);
             //使用系统为CH365自动分配的I/O基址
  for (i=0;i<=30;i++) { //测试
  Input_data=rand( )%0x0100; //随机数0~255
  printf(″*****WRITE DATA=%2x″,Input_data);
  Write_data(Input_data);
             //少量延时,等待处理1个字节的数据
  data=Read_data( );
             //少量延时,等待处理1个字节的数据
  printf(″*****READ DATA=%2x″,data);
  if(data==Input_data) printf(″*****test correct!\n″);
  else printf(″*****test wrong!\n″);
  }
  }
4.2 I/O端口读写程序的编写
  CH365 的输入、输出信号与TTL电平和CMOS电平兼容,可以连接ADC/DAC/MCU等芯片。输出引脚的驱动电流大于10mA,可以在串接限流电阻后直接驱动LED显示。CH365提供了用于I/O 地址译码的8 根地址线A7~A0,有效偏移地址范围是0EFH~00H,长度不超过240 字节。一般情况下,外部电路无需片选线或者直接强制片选。
  基于CH365的通用驱动程序WDM和动态链接库DLL,则上述操作的C 语言程序如下:
  UCHAR mByte;//数据单元,用于保存从I/O端口中
            //读出的数据或者准备写入I/O的数据
  mPCH365_IO_REG mIoBase;//I/O端口基址,实际数据
            //单元的地址等于基址加上偏移地址
  CH365GetIoBaseAddr(&mIoBase);//获取I/O端口的基址,
            //这是可选操作,不必执行;如果不获取I/O基址则可以
            //在I/O操作中只指定偏移地址,相当于I/O 基址为0;
            //在调用CH365的DLL后,DLL会自动将偏移地址加上
            //基址再进行I/O操作;存储器与此类似,如果存储器操
            //作中只指定偏移地址,则DLL会自动加上存储器基址
  CH365ReadIoByte(& mIoBase -> mCh365IoPort[0x00],&mByte);
            //上述操作从I/O端口的00H偏移地址读取1个字节的
            //数据,即读入第1组缓冲输入
  CH365WriteIoByte(& mIoBase -> mCh365IoPort[0x01],0x47);
            //上述操作将数据47H写到I/O端口的01H偏移地址,即
            //作为第2组锁存输出
  CH365SetA15_A8(0x24); //设置A13为高电平,A10为高
               //电平,其余引脚为低电平
5  结束语
  本系统采用新型PCI接口芯片CH365完成采集卡的设计,并采用了本地硬件地址的快速实现方法。CH365以其强大的功能和简单的用户接口,为PCI总线接口的开发提供了一种简洁快速的方法。设计者只需设计出本地接口硬件外围电路,就可以通过CH365快速挂接到PCI总线上。系统经测试能够高速地进行数据的采集和传送,可应用于高速数据采集卡、网卡及视频采集卡等设备的研发中。随着PCI总线的普及,基于PCI总线的采集传输系统将有十分广阔的应用前景。
参考文献
1   李贵山.PCI局部总线开发者指南.西安:西安电子科技大学出版社,1996
2   Shanley T,Anderson D.PCI系统结构.北京:电子工业出版社,2000
3   WinChiphead Corp.PCI Bus Interface Chip CH365  UserBook(Ver.1).2003
4   闻伍椿.运算放大器在电测技术中的应用.北京:机械工业出版社,1989
 

此内容为AET网站原创,未经授权禁止转载。