EPP模式500ksps数据采集接口 点击:179 | 回复:0



xilinxue

    
发表于:2010-05-13 06:35:30
楼主
摘 要: 文章通过对微机并行口EPP模式下数据读取时序的深入实验分析,研究了实现500ksps数据连续采集及传输涉及的软件和硬件相关因素,并采用CPLD器件结合大容量SRAM构成FIFO,实现WIN98环境下EPP模式高速数据采集接口。

关键词: EPP CPLD FIFO 数据采集

数据采集系统中,通过微机COM端口的RS-232串行通讯及通过微机并行端口的并行通讯具有开发使用方便的特点,前者可与工作于11.0592MHz晶振下的8052单片机在波特率115200时,实现10ksps(samples per second)的连续数据采集和传输而不丢失数据,若要达到更高速率的数据采集,可以通过并行口通讯方式实现。当前微机均可通过配置CMOS,将基地址为378H的并行口设置为EPP模式以支持通过数据口双向传输通讯,并由芯片硬件自动产生握手信号,实现高速传输的目的。

为充分实现EPP模式的高速特性,外设应当及时响应EPP的握手信号,当数据采集系统工作于非实时多任务的WIN98操作系统环境下,为实现数据高速、均匀性采样,还需要在外设配置必要的数据缓冲存储器。如果数据采集速率低于EPP模式数据读入平均速率,就可能实现数据的连贯有效性。有资料【1】说明在EPP模式,可实现500kBytes/s以上的传输速率,这表明通过EPP模式,可以实现500ksps的数据采集系统。通过对EPP模式的深入实验分析,发现要实现500ksps,外设硬件及微机软件程序均要采取一些策略:硬件上必须配置FIFO数据缓冲存储器,才能协调数据采集严格的时间间隔要求与数据传输给微机的非实时、非均匀性之间的矛盾;软件程序方面应当采取双字读的方法,否则EPP模式下仅能实现250kBytes/s数据读取可行性。

1 EPP模式读取速率的实验分析

图1为实验EPP模式读取速率的电路,实验程序为



Delphi结合内嵌汇编语言,涉及EPP读取的关键代码如下:

FUNCTION READDATA:BYTE;
VAR
STARTTIME,STOPTIME,DELAY:INT64;
NUMBER:LONGWORD;
QUERYPERFORMANCECOUNTER(STARTTIME);
FOR NUMBER:=0 TO 999999 DO
BEGIN
ASM
MOV DX,$37C
IN AL,DX
MOV RESULT,AL
END;
END;
QUERYPERFORMANCECOUNTER(STOPTIME);
DELAY:=STOPTTIME-STARTTIME;
END;

此为循环1000000次读取EPP数据口程序,循环仅为方便用计时及示波器观察而设,并在执行前后分别读取系统计数值,DELAY值除以1.2后为执行花费的时间(单位为微秒),执行前先通过对地址379H的D0位写入高,使该位为低(注意:对该位写入低通常不能达到使该位变为低的目的,只有采取写入高才能使该位变为低),以清除EPP超时位,当A、B点均为低时,可实现最快的EPP握手,若A为高、B为低时,由于EPP周期开始时满足WAIT为低的要求,EPP自动在DATASTB处输出低,但因WAIT没有出现表示应答的高状态,EPP在延时10μs后,将DATASTB恢复为高以结束该次EPP访问过程,并置超时位。稍后因WAIT为低再次开始一次EPP访问过程,如果B为高,则WAIT为高,不能满足EPP的开始条件,故DATASTB保持为高,EPP在延时10μs后结束该次EPP访问过程,并置超时位。在发生超时情况下,数据仍然可正确读入
(这一特性与笔者所查资料【1】有出入),此结论可通过对比循环前后时间差来及实际读入数据值证实。



注意程序循环中并未执行清除EPP超时位的指令,根据笔者实验,即使已发生EPP访问超时,也不影响下一次的EPP读周期(包括对37BH的地址读及对37CH的数据读),但超时对EPP写周期有影响,在清除超时位之前,EPP写周期无效(因本文不涉及EPP写周期的内容,此处不再展开探讨)。在图2所示意波形中,当有正确握手的EPP读周期执行时间约为1.5μs,此时间是字节模式下一次有效EPP访问所需最短时间,在这段时间内,“IN AL,DX”这一条指令占据了约90%以上的访问时间,验证此点仅需临时屏蔽“IN AL,DX”指令,并比较所花费的时间差别即可。1.5μs相当于接近700kBytes/s的数据读速率。如果以“IN EAX,DX”替代“IN AL,DX”指令,可以充分利用EPP模式下硬件将4个8位数自动合并为1个32位数的特性,在一次I/O访问中由硬件自动产生4个DATASTB负脉冲从而实现4个字节的输入。因为一次字节模式的I/O访问所费时大约间需要1.5μs,减少这类指令的执行次数有利于实现更高速的EPP访问过程,经实验发现以4字节方式访问的EPP过程可以在3.2μs内读取一次,即平均每字节需0.8μs,相当于1.2MBytes/s,此实验结果是基于外设可以连续不断的输送数据理想前提,实际上要实现有效的数据传输,可得到的速率要低于该值。

2 WIN98下高速EPP接口的构成

在WIN98环境下,由于非实时多任务的特性,运行于RING3的应用程序频繁被操作系统打断,这决定了靠软件无法实现连续均匀的数据采样,只有在硬件上配置数据缓冲存储器并及时传入微机以免数据缓冲存储器溢出。只要保证一定深度的数据缓冲存储器,且满足数据传输平均速率大于数据采样速率,就能将所采集的数据传入微机的大容量内存,以备处理。在硬件构成方面,为以较低代价获得大容量的FIFO数据缓冲存储器,采取CPLD器件结合512KB的SRAM方式,实现,由CPLD器件完成读写控制的FIFO特性及EPP模式的应答握手信号。接口结构及CPLD内部功能模块见图3所示,数据在CPLD控制下,以2μs 的固定速率存入SRAM环状连续增量地址,因为EPP模式读取速率与数据采样的固定速率是异步的,控制逻辑为保证2μs 的固定采样速率,当采样时间点到达时,不论当前是否处于EPP应答处理期间,优先执行数据采样,因为处理是在系统时钟脉冲驱动下的硬件行为,仅存在固定的传输延时,故两次采样间隔是严格保证的。



EPP模式的读取平均速率必须高于数据采样速率,一旦FIFO数据读空必须让微机正确处理,由前述实验可知,每次字节方式I/O执行时间约为1.5μs,如果通过在EPP的状态口(379H)的保留位输入代表FIFO读空的信号,则每完整读取均要执行两次I/O指令:EPP数据读及EPP状态读,至少需3μs完成读取一个字节,这也是通常方式能达到的最快有效读取速率。当采用双字读读及EPP状态读的方式时,需4.8μs完成4个数据字节读取,但此方式需要处理的一个问题:由于双字方式EPP数据读由硬件自动产生4个EPP数据读周期,当其执行完毕,执行EPP状态读发现FIFO已空,微机软件无法判别在从第几个EPP数据读周期开始FIFO为空,从而影响对数据队列的正确排序,故CPLD逻辑应当在FIFO队列还有至少4个未读数据时必须发出读空信号,微机程序应当在每次EPP开始前执行读取状态口的指令,以决定是否可以开始EPP数据读周期,从上分析可以看出为实现有效的EPP数据读取,平均每字节至少需要1.2μs,即可


以获得最快约800kBytes/s的数据传输速率。因500ksps的数据采集设计速率仅略低于800kBytes/s的数据传输速率,考虑WIN98工作环境,配置大容量的FIFO十分必要,采用大容量SRAM与CPLD器件构成FIFO,具有成本较低的优点,通过使用VHDL的行为描述,经CPLD器件开发软件的编译、综合、仿真、适配、下载,实现所需要的控制逻辑。根据设计,当数据锁存输出的下一个时钟脉冲(即83ns后),WAIT将输出为高电平,EPP在此时读取数据口信号,如果不采用外部缓冲驱动器,数据上升过程将耗时80ns,对EPP数据接收可靠性有不容忽视的影响,为减小电缆电容的影响,数据输出使用了74ALS574芯片作缓冲,其高电平输出能力达15mA,是ispLSI1032高电平输出能力的3.5倍,在电缆电容有100pF时,23ns可达到3.5V的逻辑高电平,保证数据接收可靠性。

仿真波形参见图4,出于方便,仿真时钟设置为12.5MHz。系统每24个时钟脉冲产生一次数据采集,仿真采样速率521ksps。数据由DIN【7:0】输入,通过CPLD内部数据输入触发时钟(该时钟同相缓


楼主最近还看过

SSI ļʱ