学海荡舟手机网

主页 > 实用文摘 > 教育文摘_12 > > 详细内容

利用EPP接口协议实现高速数据通信_接口电路论文

摘要:如何实现pc与单片机系统间的高速数据通信,是测量控制系统中经常遇到的难题。本文系统地介绍利用epp接口协议实现高速数据通信的原理,并从硬件、软件两方面给出一个应用epp接口协议的设计实例。

    关键词:单片机系统 高速数据通信 epp

前言

单片机系统中常常需要具备与pc机通信的功能,便于将单片机中的数据传送到pc机中用于统计分析处理;有时又需要将pc机中的数据装入单片机系统中,对单片机程序进行验证和调试。目前常用的通信方式是串行通信,但传输速率太低,以9600bps计算,传输1mb至少需要10min(分钟)以上。并行通信克服了串行通信传输速率低的缺点。标准并行口spp(standard parallel port)方式实现了由pc机向外设的单向传输,但实现pc机接收外设发送的数据则非常麻烦;而增强型并行口epp(enhanced parallel port)协议却很好地解决了这一问题,能够实现稳定的高速数据通信。

一、epp接口协议介绍

epp协议最初是由intel、xircom、zenith三家公司联合提出的,于1994年在ieee1284标准中发布。epp协议有两个标准:epp1.7和epp1.9。与传统并行口centronics标准利用软件实现握手不同,epp接口协议通过硬件自动握手,能达到500kb/s~2mb/s的通信速率。

1.epp引脚定义

epp引脚定义如表1所列。

表1 epp接口引脚定义

引脚号spp信号epp信号方  向说       明
1strobenwrite输出指示主机是向外设写(低电平)还是从外设读(高电平)
2~9data0~7data07输入/输出双向数据总线
10ackinterrupt输入下降沿向主机申请中断
11busynwait输入低电平表示外设准备好传输数据,高电平表示数传输完成
12paperout/endspare输入空余线
13selectspare输入空余线
14autofdndstrb输出数据选通信号,低电平有效
15error/faultndstrb输入空余线
16initializespare输出初始化信号,低电平有效
17selected printernastrb输出地址数据选通信号,低电平有效
18~25groundgroundgnd地线

2.epp接口时序

epp利用硬件自动握手实现主机与外设之间的高速双向数据传输,软件只须对相应端口寄存器进行读/写操作。

(1)epp写操作时序如图1所示。

cpu实现向外设写数据的操作步骤如下:

①程序对epp数据寄存器执行写操作;

②nwrite置低;

③cpu将有效数据送到数据总线上;

④ndstrb(nastrb)变低(只要nwait为低);

⑤主机等待nwait变高,确认数据发送成功;

⑥主机等待nwait变高,确认数据发送成功;

⑦epp写周期结束。

(2)epp读操作时序如图2所示。

cpu实现从外设读数据的操作步骤如下:

①程序对相应epp端口寄存器执行读操作;

②ndstrb(nastrb)置低(如果nwait为低);

③主机等待nwait为高,确认数据发送成功;

④主机从并行口引脚读取数据;

⑤ndstrb(nastrb)置高;

⑥epp读操作周期结束。

3.epp端口寄存器

epp接口除了保留spp的3个端口寄存器以外,还新增了5个端口寄存器,如表2所列。

表2 

地   址端口名称方    向
基地址+0spp数据端口
基地址+1epp状态端口
基地址+2epp控制端口
基地址+3epp地址端口读/写
基地址+4epp地址端口读/写
基地址+5epp数据端口读/写
基地口+6未定义(32位传输)读/写
基地址+7未定义(32位传输)读/写

epp状态端口寄存器

waitintruser1user2user3××tmout

wait:wait状态位(1有效);

intr:中断请求状态位(1有效);

user1~user3:用户自定义;

tmout:保留(epp1.7)超时标志位(epp1.9)。

epp控制端口寄存器。

××dirirqenastrbinitdstrbwrite

dir:方向位(1输入,0输出);

irqen:中断使能位(1有效);

astrb:地址选通位(0有效);

init:初始化(1有效);

dstrb:数据选通位(0有效);

write:读/写状态位(0:写,1:读)。

读取接口状态和控制接口都只须对相应的端口寄存器进行操作。以初始化为例:

读操作初始化:outportb(port+2,0x24);

//port为spp数据端口地址

写操作初始化:outportb(port+2,0x04);

//port+2为epp控制端口地址

4.epp1.7和epp1.9

epp接口最先有epp1.7标准定义,由于硬件厂商的原因,epp现有两个标准:epp1.7和epp1.9,可以在bios/外围设备/并行口(bios/peripheral setup/parallel port mode)方式中进行设置。两者有如下不同点:

(1)epp状态端口寄存器的最低位bit0,在epp1.9中定义为tmout。在epp操作时序中,如果pc机数据(地址)选通信号变低后,且在10μs时间内,外设未能将nwait置为低,则tmout置为1,表示延时。

(2)epp1.9标准中,只有当nwait为低时,才能开始一个操作周期;但在epp1.7中,无论nwait状态如何,nastrb(ndstrb)都会被置低,从而开始一个新的数据(地址)操作周期。

二、epp接口传输数据的一个实例

在某单片机系统中,须要将单片机系统中数据存储器的大量数据传输到pc机中进行分析处理。epp接口(采用epp1.7标准)硬件电路及软件流程图如图3~图5所示。

gal译码电路方程式为/o1=/i1*/i2*/i3*i4*/i5,epp接口选通地址为2000h。当单片机执行如下指令:

mov dptr,#2000h

movx @dptr,a

就将寄存器a中的数据锁存到数据总线上,便于pc机利用epp接口进行读操作。

c语言例程:

#define sppdata 0x0378 //定义各寄存器地址

#define sppstat 0x0379

#define sppcntl 0x037a

#define eppaddr 0x037b

#define eppdata 0x037c

#include<stdio.h>

file *fp;

int data;

long i;

int k;

fp=fopen(filename,"wb"); //打开要存储数据的文件

outportb(sppcntl,0x24);

//向控制端口发00100100代码,初始化为读操作模式for(i=0;i<524288;i++)

{

while(!((inportb(sppstat))&0x80))

//查询是否发送完毕

{}

data=inportb(eppdata); //读数据

fputc(data,fp); //将数据存入文件

}

fclose(fp); //关闭文件

单片机汇编语言程序为:

flag1 bit p1.7 ;标志位

flag2 bit p3.4

stadd equ 0000h ;要传输数据段的起始地址

num equ ffffh ;要传输数据端的字节个数

commun:mov dptr,#stadd

comm1:movx a,@dptr

push dph

push dpl

mov dptr,#epp_ce

movx @dptr,a

pop dpl

pop dph

setb flag1 ;将p1.7置高

clr flag2 ;将p3.4置低

jb flag1,$;查询p1.7为低,即ndstrb为低,表示pc读操作已完成

setb flag2 ;将p3.4置高

setb flag1 ;将p1.7置高

inc dptr

cjne num,comm1 ;循环num次

ret

实际应用该接口电路,能实现1mb/s的传输速率,并且性能稳定可靠。

如果应用epp1.9标准,硬件电路不用变动,软件中可以省略对nwait进行判断的环节,速率能接近2mb/s。

结束语

本文系统介绍了epp接口的原理,并且给出了一个利用epp接口实现pc与单片机系统间高速传输的实例。epp接口协议解决双向高速数据传输的难题,在智能测量、自动控制、数据传输等领域必将得到广泛的应用。