8255A三种工作方式的功能说明
' e4 ^ r" j; P: O5 [( n1.方式O的功能
* D6 v2 s2 A# Y: d
1)方式0的基本功能
0 S+ D4 B; u$ F方式0是基本输入/输出方式。其功能如下:
( e: w( z( r( b& g( v①进行数据传送时不需要联络信号。
3 m/ F, ?; t a' `②任一设置成方式0的端口均可设置成输入或输出。
' B7 y8 q8 {# a, l: s* E
③输出具有锁存功能。
+ U, N- W3 u; v6 u* b, L④输入没有锁存功能。
% l# V8 [$ y; d. a, @7 x+ A⑤每一个8位口和4位口均可设置成方式0。如果所有的8位口和4位口都设置成方
1 v" w/ i c( h! w8 Z7 g/ ]4 [式0,则可以有16种不同的输入/输出组合:
4 R. B" D: i% Z- B1 s+ k R, y. ?1 Q; L
6 C, A9 S; {6 Z$ A1 s: ?3 M( T" n% r P K, D3 \5 ^
5 ^ F4 |& K: A2 E5 m# M
h [4 _+ e2 }( a6 |/ } 端口是否具有锁存功能是需要注意的。如果具有锁存功能,则8255A可作为CPtJ与外设之间数据传送的中转站。这时,CPU与外设之间数据传送是异步的。如果没有锁存功能,则8255A作为数据通道,仅起单向三态门的作用。这时,CPU与外设之间数据传送是同步的。方式0的输出具有锁存功能,而输入没有锁存功能。
{3 P1 g! Y2 U
2)方式0的时序
5 J- [+ |! O$ O" l, R, H4 i
①输入时序
& P) l0 M- u: E: `
当外设准备好一个数据时,CPU执行一条输入指令,便可从8255A指定端口读人数据。
6 t) B* Z! ~' ~ |
如图6.4所示是方式0的输入时序,表6.3是方式0输入时序参数表。从中可看出:
- a8 `4 u* H7 K- Y- U
1 O4 z$ e( P( r8 R- F, D1 ~
+ P1 a5 ^5 v5 ` {
/ x9 I2 p4 I0 T! E9 ?5 {8 d8 \* F2 ^
9 U2 ~: ^5 N9 c: W8 K% }
3 r5 A0 _: z3 H8 T8 e ·读信号RD(上划线)的宽度TRR的最小值为300 ns。
# l% A' `2 n: t ·片选信号CS(上划线)、端口寻址信号Al、A0应领先于RD(上划线),该参数用TAR表示,其最小值为0,即可以不领先。
$ T5 j( q: h4 p3 r( R% K2 w) T- Z ·输入数据也应领先于RD(上划线),该参数用TIR表示,其最小值也为0,即也可不领先。
& ?+ u$ x' ~+ L. z( D6 N7 I% U* U ·RD(上划线)有效后,经过TRD时间数据可稳定出现在数据总线上,CPU可以读取。TRD的最大值为250 ns.这一点体现了方式0的输入没有锁存功能,此时8255A仅起一个单向三态门的作用。
* q& d/ _# c: z6 L' ^9 Y) m& Y0 ], s9 M" M0 X
$ f i5 h# R3 r4 I: {0 s3 L! z
' r" r- V0 H" l8 q& l5 X0 y' E+ p& K4 P7 ?# y1 u; p
; ], D/ L; {1 H! w9 R& i7 ?( g1 s
类似存储器芯片和CPU连接时存在时序配合问题,在8255A和CPU相连时,也存在时序配合问题。对于方式0的输入,两个参数需要重点考虑,这就是RD(上划线)信号的宽度和从读信号有效到数据稳定的时间TRD。如果CPU的速度较快,则在I/O读总线周期中需要插入等待时钟周期。对于方式0的输出以及其他工作方式,在和CPU相连时也有一些参数需要考虑。这方面涉及较多细节,本教材就不讨论了。读者如有需要可查阅相关技术资料。
7 N2 F" O; ], Y/ X' [$ b2 `
②输出时序
2 I5 R$ [2 z; C5 L/ K
当需要给外设发送数据时,用输出指令将数据送到指定端口的输出缓冲器。图6.5所示是方式0的输出时序,表6.4是方式O输出时序参数表。
5 M2 t- P9 _ X1 g' v- n1 @- t
) `9 z; M; e3 W; L8 k" w) D
/ J8 O% W: i$ s% Q' f8 A
6 r# [, `8 K( _7 y: w
; M9 w) M* L+ b
4 f( F1 a# V4 ^
! n: R6 ^0 ]# [" K5 M
2 Y6 n( o$ V) e5 E# b5 F
* E @7 F- C5 W# o" {3 J, B
6 T$ L1 c) P+ O# G; I8 l, j从中可看出:
/ n' D+ u& U* n" W$ m ·写脉冲WR(上划线)的宽度TWW的最小值为400 ns.
- g" x% f1 p' j7 |; J ·片选信号CS(上划线)、端口寻址信号Al、A0应领先于WR(上划线),该参数用TAW表示,其最小值为0。
- C/ u" X$ c3 d5 i% o( O ·数据有效应领先于结束TDW时间,TDW的最小值为100 ns。
& G) z: s/ _" c" F
·WR(上划线)结束后经过TWB时间的时间延迟,写入的数据稳定地出现在端口的外围引线上。TWB的最大值为350 ns。
: a) C/ p9 `/ f q% R' r
3)方式0的基本应用
( X1 a# d+ I1 v% x; X& v
方式0有两种基本应用:一是作无条件传送方式的接口;二是作查询方式的接口。在作
8 O, v% F3 O$ u# x2 l; {: h
查询方式接口时,需指定某端口为输入口,以便输入外设的状态信息。
: k! E4 H+ w' u! |, f2 \$ ^
2.方式1的功能
5 J5 P1 M V& @) x
1)方式1的基本功能
# e; m+ f2 p' P, |; i$ G
方式1是选通输入/输出方式,即进行数据传送时需要联络信号。其基本功能如下:
' h! ]. w" {! q2 Q1 p ①A组和B组都可以设置为该方式,并且可以同时设置。
" I" D# `% i4 b& n) i
②每一个设置成方式1的端口(组)包含8位数据线和3条联络线,并提供中断逻辑。
5 u5 K- u5 {6 S6 R! l" A2 ?1 a& G
③任一端口均可作输入或输出,输入和输出均有锁存功能。
( ]) n. U v$ H# P% f1 C
2)方式1输入的逻辑功能结构及时序
: ^" p. `; n/ R2 O; S1 ]- {
当8255A的A组和(或)B组被设置成方式l的输入时,其逻辑功能结构变成如图6.6
( a: @* V- F. \4 Z# _3 N
所示。这时,PC5~PC3和(或)PC2~PC0被指定成相应的联络控制信号。这些联络控制信号的含义在前面已经介绍。INTEA和INTEB分别是A组和B组的中断允许逻辑。前者由PC4的置位/复位控制,后者由PC2的置位/复位控制。从图6.6中可看到,PC4和PC2已被指定为选通信号STB(上划线),那么,为何又用PC4和PC2来控制中断允许呢?可这样理解,这是一种一位两用的设计,当PC4(PC2)有来自外部的输入时,8255A理解为选通信号STB(上划线);当通过CPU对PC4(PC2)进行写操作时,8255A理解为对中断允许进行控制。
$ D2 ^/ G. k, C+ ?
1 V1 `! K# f# X0 A+ U+ o
: d; [( M; m# A5 X3 f2 p% I5 Y8 X) \" m% Q4 B0 t
1 I( ?% L8 ~, ~- _
% n' d% h9 N. l0 f( ~ 当A组被设置成方式1输入时,PC3被指定为A组的中断请求信号INTRA。当B组被
m, \3 C% x) U( N! A* p设置成方式1输入时,PCO被指定为B组的中断请求信号INTRB。中断请求信号的产生可从下面的时序图看出。
% `% R. F& ?$ y7 a- \& | l$ k
图6.7是方式1输入时序图,表6.5是方式1输入时序参数表。用方式1进行数据输入的过程大致可分为以下3个阶段:
2 ~$ t1 ?/ K7 S; q* j( T
@/ i) J: D9 J% |4 @" S
# [. W1 E. t7 }3 M
* z% {+ v5 b( M1 x3 t; W0 ^) n; E: E' ~& Z
4 v0 D3 T1 n4 g) g3 K
(1)外设将数据送入8255A的输入缓冲器
L+ J( d# P& a, `) ]3 l 当外设准备好一个字节数据,发出一个选通信号STB(上划线)(宽度至少为500 ns),该信号把数
# N- c1 g) P% f
据装入8255A的输入缓冲器。STB(上划线)有效后经过时间Tsm后,IBF变为有效(输入缓冲器满),
4 W4 H& D. D8 |3 K
通知外设暂时不要送新的数据。
* |; e; \, p: [! |
(2)8255A向CPU提出中断请求
8 n& Z; Q5 \4 |3 z; d* \ 在选通结束经过TSIT时间后,INTR由低变高(如果端口中断允许的话),向CPU提出中断请求,请求cPu取走输入缓冲器中的数据。
# h9 n) L! E* T7 B8 \ r. w9 h9 ]
(3)CPU在中断服务程序中读取输入缓冲器中的数据
+ E6 b4 R1 ~; \5 j
" r: z- {) l# Q# b4 \! {# H
4 z4 d I' G% a% W8 c/ M$ F' G' z$ U& R+ J! z* y
% C, Q" ?' q) L8 `7 |8 z: Z2 R, @ 0 o L: R% \* I. i( t
CPU在当前条件具备的情况下响应8255A的中断请求。在中断服务程序中通过一条输入指令来读取输入缓冲器中的数据。执行输入指令时产生的读信号RD(上划线)起3个作用:第一,读取数据,这是显然的;第二,RD(上划线)信号前沿过后经过TRIT时间INTR被清除,为下一次再提中断请求作准备;第三,RD(上划线)后沿过后经过TRIB后IBF变低,通知外设刚送的数据CPU已取走,从现在起可以送新的数据了。当外设准备好新的数据后又开始重复(1)~(3)的过程。
7 ?$ |; J( B5 D- v8 w% p) g 从上面的时序关系可看出,外设用多长时间准备数据对CPU来说没有关系,而CPU在什么时间将输入缓冲器中的数据取走对外设来说也没有关系。这就是说,借助于STB(上划线)、IBF等联络控制信号(当然也需要CPU的读信号),使得8255A能够很好地协调外设向CPU的数据传送,而不管外设与CPU之间存在的速度差异。
; P: n- G [; s! O) w 当8255A的A组被置成方式1输入时,只占用了c高4位口的两根线(PC5和PC4,另有一根是C低4位口的PC3)。此时,c高4位口还有两根线,即PC7和PC6,可单独设置为输入或输出,而不管B组设置成什么方式(因为B组的设置只用到C低4位口)。
) D& v, B7 [- v
图6.8给出了单独将A组设置成方式1输入和单独将B组设置成方式1输入的控制字形式。其中“×”表示该位的取值任意,一般取0。当然,两组都要使用时,对两组的设置应使用同一个控制字。
8 z$ b6 U" I$ g
# O+ A1 l3 w3 R6 \7 h( V8 A o
- A4 K0 T- b/ k, }. w F/ |! F9 u4 T* s7 m6 W9 A
. @9 }3 c9 s! f9 d- M& U. |
.
! j/ J! S( r* }' h" r
3)方式1输出的逻辑功能结构及时序
7 K- P% U# o7 w 当8255A的A组和(或)B组被设置成方式1的输出时,其逻辑功能结构变成如图6.9所示。这时,PC7、PC6、PC3和(或)PC2~PC0被指定成相应的联络控制信号。这些联络控制信号的含义在前面也已经介绍。DBF(上划线)有效表示输出缓冲器满,ACK(上划线)是来自外设的应答信号。
! Q7 o4 Q& Z4 u1 ? s/ H
6 }! I* ]: X( _
' u: J) K$ C) p
, L1 G" J; S6 i1 K/ T- c
) X9 q, j9 q" j. b/ B7 ]6 P
; v1 P' B9 T5 `7 J和方式1输入不同的还有两点。一是A组的中断允许,由对PC6的置位/复位控制,而不是方式l输入时对PC4的控制(至于B组的中断允许,方式1输出和输入一样,都通过对PC2的置位/复位进行控制)。另一点是,当8255A的A组被设置成方式l输出(不管B组如何设置)时,c高4位口中未被利用的两根线是PC5和PC4,而不是设置成方式1输入时的PC7和PC6。这两根线也可单独设置为输入或输出。
6 \( m8 K" s# J0 S6 F/ r" ] 图6.10所示是方式1输出时序图,表6.6是方式l输出时序参数表。图6.10清楚地表明了用中断方式传送数据的过程。输出过程是由CPU响应8255A的中断请求开始的。该过程大致可分为以下三个阶段:
8 N) L! C, A u, y, @, v; W# m0 ^3 b; {0 I+ C5 C
# n- ~$ o) c' i* I0 M1 Z
~- [/ n1 b/ m3 V J
; N6 q+ I, A2 w% u& x$ t" m) g! T' Z1 U7 Y
- s7 `' r6 J# W2 c7 U! ]9 N4 B- {8 j6 f: b
6 y7 ?- m8 A1 @
0 J% _& o% z+ g d' t8 Y9 a' N (1)CPU在中断服务程序中输出一个字节数据
* G) Z( y4 q$ T- K0 O5 M/ H 在中断服务程序中,CPU执行一条输出指令,将输出数据送上数据总线并发出写信号WR(上划线)。WR(上划线)起三个作用:第一,将数据写入输出缓冲器;第二,WR(上划线)前沿过后经过TWIT时间延迟后清除INTR,为下一次提中断请求做准备;第三,从WR(上划线)后沿算起,经过TWOB时间延迟后OBF(上划线)变为有效,通知外设可以使用外围线上的数据了。实际上,外设可利用OBF(上划线)作接收数据的选通脉冲。
) Y% z u1 ?9 ]) Q( U
(2)外设利用输出的数据
# |! A+ Q' q6 N$ ?: [, C* c 在OBF(上划线)有效后,外设就可以利用8255A外围线上的数据进行具体的输出(如打印)。
" m f1 Y1 M( `5 z (3)外设发出回答信号后8255A再次向CPU提出中断请求
9 a. Y) b- F- f- I' @& G
在外设利用完数据后会发出一个回答信号ACK(上划线)。ACK(上划线)的前沿过后经过TAOB时间使OBF变为无效,通知外设输出缓冲器中还没有出现新的数据;ACK(上划线)的后沿经过TAIT时间使INTR再次变为有效,向CPU提出新的中断请求。在条件具备的情况下CPU再次进入中断服务程序,于是又开始重复(1)~(3)的过程。
+ p$ I3 A$ {/ M4 y) E: a. T 上面的时序关系表明,CPU输出到输出缓冲器中的数据,外设什么时间利用都可以,只要求它用完之后回送一个ACK(上划线)信号,以便8255A向CPU提出新的中断请求;而cPu何时予以响应以输出新的数据也没有时间要求。由此可见,借助于OBF(上划线)、ACK(上划线)等联络控制信号(当然也需要CPU的写信号),使得8255A能够很好地协调CPU向外设的数据输出,而不管外设与CPU之间存在的速度差异。
8 ?8 t; g% I, ^5 \ 4)方式1的基本应用
- c: z8 N& s" A, ` 方式1最主要的应用是作中断传送方式的输入端口或输出端口。这样可充分利用该方式提供的功能。当然也可用作查询方式的接口。这时,不利用:INTR信号,而是读端口c的状态。如果作输人口,则读IBF的状态。若发现IBF为高,表示外设已将数据装入输入缓冲器,这时可用输入指令读取端口数据。如果作输出口,则读OBF(上划线)的状态。若OBF(上划线)为低,则表示外设尚未利用完输出缓冲器中的数据;等到OBF(上划线)变为高电平,CPU才可输出新的数据。
# K E5 { X. ~4 {" h8 O
3.方式2的功能
7 h" v" ^5 `6 S7 t2 s 1)方式2的基本功能
) A7 U. \4 u4 {9 e( X/ i 方式2为双向传送方式。其基本功能如下:
2 {5 u8 T s$ h; r ①只限于A组使用。
7 I$ ~/ I! N3 s# {3 W, x. ?+ a6 I/ p ②一个8位的双向数据端口(A口)和5条联络线(c口)。
4 L: F- ?* W7 E7 c) I5 P ③输入/输出均能锁存,输出缓冲器是三态的。
5 v0 _6 G6 Y' T! z ④输入/输出均可用中断方式。
/ K5 G6 I8 |* s7 W; t# K3 o
2)方式2的逻辑功能结构及时序
9 x& c! Y' Q( o' n
当8255A的A组设置成方式2时,其逻辑功能结构变成如图6.11所示。前面介绍的5种联络控制信号在这里都用上了,含义和前面基本相同。因为是双向传送,所以INTRA在输入或输出时都可以产生。图中INTEl是与输出相关的中断允许,由对PC6的置位/复位控制;INTF2是与输入相关的中断允许,由对PC4的置位/复位控制。
" R% _( [$ z0 @) {1 m
6 |8 Y. R/ k* a1 X, S! z! S* ^
* U5 _# q6 }/ j9 E7 Q1 w
: ]( E( J0 O( o0 e# c& y5 w+ H1 t' s
& f7 m1 [+ A" }- D, Y6 G* v9 c; @& h6 }
$ s8 P# d2 d5 x/ s7 p 当A组设置成方式2时,C口还有3根线(PA2~PA0)没有使用,而B组方式1输入或输出使用的就是这3根线。所以,当A组设置成方式2时,B组还可以设置成方式1,当然也可设置成方式0。
- j$ |( L3 |& k. \( V 方式2的时序可认为是方式l的输入方式时序和方式1的输出方式时序的组合。为节省篇幅,这里不准备给出具体的时序图。但有两点需要说明。一是中断请求信号的产生。
! E$ }! k3 j* T- T3 y! u在输人中断允许的情况下(INTE2=1),当数据已送入到输入缓冲器,并且IBF变为有效,此时产生中断请求。或者在输出中断允许的情况下(INTEl=1),数据已输出至端口,并且外设发来了ACK(上划线)信号,这时也产生中断请求。第二点是ACK(上划线)还有一个重要的作用,该信号有效时打开A口的三态输出缓冲器,使数据出现在PA7~PA0上。 ,
# _5 R" b& v+ c! y; C3 z- c 3)方式2的基本应用
& r. e; y5 k5 r 从方式2的基本功能就可看出,它可作为中断传送方式的双向端口。