增强并口EPP与DSP接口的设计
扫描二维码
随时随地手机看文章
关键词:增强并行口(EPP) ADSP2181 EPLD
利用计算机进行数据采集与控制一直都是研究的热点。大部分数据采集与控制系统都是做成插卡的形式;然而,对于日益普及应用的笔记本电脑而言,由于没有提供扩展插槽,不能够直接做成插卡的形式,因此就需要充分利用笔记本提供的外围接口,例如并口、串口等来实现。由于串口速度的限制,对于速度比较高的数据采集与控制系统,往往采用计算机的并口。这几年在国内已经有很多大在做利用增强型并行口(EPP)与外界进行通信这方面的工作,但大部分都是与一些简单外围电路的通信与控制(例如FIFO、A/D转换器),很少有人涉及到与DSP的通信。我们所设计的并口与ADSP2181的接口,为和外围复杂电路进行通信提供了一种途径。
一、EPP并口
最常见的计算机并口模式是SPP模式(标准并行口)。该模式数据传输是单向的,如果要完成数据的输入就不得利用状态线。故读入一个数据就需要进行好几次的I/O读周期,因此传输速度就不可能做到很高,仅能做到150KB/s。其外围设计电路并不比EPP简单,因此SPP在数据采集与控制系统中很少应用。
1992年,intel、Xicom与Zenith公司共同制定了EPP1.7标准,并在随后的时间里对该增值修订与完善。对于EPP标准而言,现在主要有EPP1.7与EPP1.9两种标准;对于用户而言,它们在具体的应用中并没有什么不匹配的地方。
EPP协议与标准并行口兼容而且能够完成双向数据传输的协议。它提供了四种数据传送周期:数据读周期、数据写周期、地址读周期、地址写周期。数据周期一般用于主机与外设之间进行数据传送;地址周期一般用于传送地址、通道、命令和控制等信息。在实际操作中,两者并没有太大的区别。几乎可以把地址周期看到另外一种的数据周期。仅有的区别将在后面说明。
表1给出了EPP协议中各引脚的信号的定义与描述。
表1 EPP中各引脚的定义与描述
EPP信号名 | EPP信号方向 | EPP信号描述 | 对应并口引脚 |
Nwrite | 输出 | 低电平写,高电平读 | 1 |
Ndatastb | 输出 | 低有效,进行数据读写 | 14 |
Naddstb | 输出 | 低有效,进行地址读写 | 17 |
Ninit | 输出 | 低有效,得置外设 | 16 |
Intr | 输入 | 外设断,外设对机产生中断请求 | 10 |
Nwait | 输入 | 低有效,外设响应信号 | 11 |
AD[0..7] | 双向 | 双向数据/地址总线 | 2~9 |
用户定义 | 输入 | 用户可灵活定义 | 12 |
用户定义 | 输入 | 用户可灵活定义 | 13 |
用户定义 | 输入 | 用户可灵活定义 | 15 |
图1是EPP数据读周期的时序图。读操作是在一个I/O周期内完成的。这就是说用EPP传输数据,可以达到500KB~2MB/s的传输速率。由于Nwait是互锁形式的握手信号,故数据的传输以接口的最慢的设备来进行,可以是主机,也可以是外设。因此设计外围电路就比较灵活。
EPP模式是在BIOS里进行设置的。需要设置的主要是基地址以及中断号。基地址最好设置成378H或278H,而不要设置成3BCH,因为3BFH后面的端口可能为其它设备所占用。EPP共有8个I/O地址端口(假如基地址为378H);378H为SPP的数据口;379H为SPP的状态口;37AH为控制口;37BH为地址读写口;37HC为数据读写口;37DH~37FH可以由用户定义,主要用作16bit与32bit I/O数据读写辅助口。通过对端口基地址+4的I/O读写就可以产生EPP的数据读写周期,对基地址+3的I/O读写就可以产生EPP的地址读写周期。夺址读写周期与数据读写周期的主要区别就是数据读写可以做32bit与16bit的I/O读写,而地址读写周期只能够做8bit的I/O读写(主要因为它没有辅助的端口)。在C语言里面,可以用端口读写函数outportb()、inportb()、outport()、inport()来实现EPP的读写操作,相应的控制信号由计算机自动产生。
二、ADSP2181的IDMA接口
ADSP2181是AD公司制造的ADSP21XX定点DSP系列的一种。它的指令周期为30ns,足以满足信号的实时处理。它内部有16MB的程序存储区(PM)与16MB的数据存储区(DM)。外围接口可以通过IDMA与I/O的方式对存储区进行访问。其IDMA操作的最大优点IDMA的读写操作并不影响ADSP2181程序的运行。但是需要注意的是ADSP2181与外设不能够同时对同一个存储区进行读写,否则,会引起数据紊乱。
IDMA端口主要有以下几个信号线:nIRD(输入、读选通)、nIWR(输入、写选通)、nIS(输入、IDMA选通)、IAL(输入、地址锁存使能)、IDA0~15(地址/数据复用线)、nIACK(输出、DSP响应信号)。
IDAM读写的初始地址与存储区的类型由ADSP2181内部专门的寄存器来控制。每进行一次读写,则该初始地址就自动加1。该寄存器呵以由ADSP2181来设置,也可以由外设电路通过IDMA操作来完成。
IDMA读周期的时序图如图2所示。IDMA写周期的时序图如图3所示。需要注意的是在IDMA读周期中,nIWR为高电平,IAL为低电平,在IDMA写周期时序中,nIRD为高电平,IAL为低电平。
三、接口电路以及整体设计的考虑
图4是我们设计的接口电路框图。并口控制线包括Ndatastb、Naddstb、Ninit;DSP控制线包括nIS、nWRITE、nREAD、IAL。
其中可编程逻辑器件是该电路的核心器件。由于并口只能进行8bit的读写操作,而ADSP2181是16bit的总线,因此若要进行通信,必须设计好组合逻辑。如果采用分立元件,则电路比较复杂,调试起来比较麻烦,并且电路固定好以后,不可能进行其它方式的通信;而采用可编程逻辑器件EPLD,只需要修改器件的逻辑与更改外部引脚的定义就可以实现其它传输协议,如ECP或者其它并口的通信,并且调试起来也比较方便。
我们所选用的可编程逻辑器件是Altera公司的EPM7128S系列。它有2500个可用门,128个宏单元、2个全局时钟,可以完成EPP与ECP电路的逻辑设计。同时支持在线编程,可以很方便地对程序进行下载。该器件用MAXPLUS II系列的软件进行编程,这种软件支持图形、语言等多种设计文件。
由于采用可编程器件,因此电路还可以采用ECP协议。ECP协议支持DMA的传输方式。最主要的是在进行大批量的数据传输的时候可以节省很多系统资源;但在传输速度上并没有大的提高。该协议设计起来比EPP协议复杂很多,需要开发相应的硬件驱动程序。因此在我们设计的电路中,仍然采用EPP协议来实现。
四、EPP并口传输速度的测试
读写程序是用VxD编写的。VxD(Virtual Device Driver)是用来扩展Windows操作系统功能的程序,也是一个管理硬件设备或者已安装软件等系统资源的32位可执行程序,并可以使得几个应用程序同时使用这些资源。Windows通过使用VxD允许基于Windows的应用程序实现多任务。VxD在与Windows的连接工作中处理树熊怕,并在不影响其它应用程序执行的情况下为特定的应用程序执行I/O操作。由于设备接收工作中处理中断,并在影响其它应用程序执行的情况下为特定的应用程序执行I/O操作。
测试结果如表2所列。
表2 各种方式读速率的比较
方式1(字节读写) | 方式二(字读写) | 方式三(双字读写) | 方式四(字读写) | |
平均速率/(KB/s) | 850 | 950 | 1050 | 800 |
方式一:VxD编程中以字节来读;
方式二:VxD编程中以字来读;
方式三:VxD编程中以双字来读;
方式四:用C语言的inport()函数进行读写。
由于我们只关心从DSP中读的速率,从表2中看出可以做到1050KB/s的速率,基本满足我们要求。对于用C语言来编写并口操作的程序可以通过嵌套汇编来提高传输速度。
总结
采用EPP协议设计计算机与外设的通信是一种新颖的设计方法。在设计电路时采用可编程器件来设计控制逻辑将是电子设计的一个趋势,将使电路的扩充性与灵活性得到很大的提高。