发新话题
打印

8259A的操作命令字OCW

8259A的操作命令字OCW


8259A的操作命令字OCW
6 }# G$ G: p7 M# x& p% j) ^  s9 \    8259A在初始化后就进入工作状态,准备接收IR端的中断请求。此后,可通过操作命令字,改变它的某方面的操作方式或指示它进行某种操作。操作命令字共有3个:OCWl~OCW3,它们可单独使用。 # ]* |# W5 f, @4 G% C
1.OCWI % K; L. W' @9 i  ]$ j& f! Z
OCWl用来进行屏蔽操作,直接将中断屏蔽寄存器IMR的相应位置位或复位。OCW的格式、含义如图5.17所示。
1 k9 t( V; Z1 o* Z7 y1 ^7 W* {9 D: ]& C0 z, I! t2 A' K  J
7 }8 U) E- U4 L2 q* O

  C" }) Q: t8 Y6 k1 U
; Z) n& Q; ^3 u* O/ I1 }4 b 2.OCW2
' q$ f  t/ n6 d+ N' x7 k7 M7 fOCW2用来设置中断结束方式和优先级循环方式,其格式和含义如图5.18所示。
& {- R2 d+ x9 b7 a- r  OCW2的D4,D3固定为0,0,作为OCW2的标志,这是因为它和OCW3同用A0=0选择。% \6 e7 n* y) K( s

  k$ o1 p2 R9 ?/ ~! n5 ^3 n* R% C
9 d- E8 N+ [3 g* n- a7 ^
9 ]  u( e! M  @+ |
) {( j6 O5 K$ w- A# z' b 其D2~Do位(L2~L0)只有在SL位为“1”时才有效,此时,有两个用途:一是当OCW2设置为特殊的中断结束命令时,由这3位指出要清除ISR寄存器中的哪一位;另一个用途是当0CW2设置为优先权特殊循环方式时,由L2~I0指出循环的开始阶段哪个中断源的优先级最低。其D7~D5位(R、sL、EOI)通过组合起作用,用来设置优先权循环方式和中断结束方式以及作为中断结束命令,但是它们的每一位为l时具有各自基本的含义,其中: % |0 a7 y, R  a3 `
  ·R位为1表示采用优先权循环方式;
6 c/ o" A. i( {! @& M7 l7 H  ·sL位为1表示D2一D0位(L2~L0)有效; $ D# [5 ^) f7 ~# S
  ·EOI(End of Interrupt)位为1表示中断结束命令,要将ISR中某一位复位。
$ p- L- j& {1 v7 w' m$ R7 j  OCW2的D7~D5位(R,SL,EOI)真正起作用的是它们的组合,其组合的表示意义见表5.1,其中功能说明中的“EOI"表示“中断结束”。
0 [% [* J0 X- r7 I: B1 j2 G$ s3 K  p; M
! R  ~* @! M1 N1 ^3 L
6 E2 {; b7 P+ L0 Z) l( c
. E7 o1 l' S* q" ]6 z
    需要指出,在一般的应用系统中是将8259A设置成固定优先级、一般全嵌套方式、非自动中断结束方式,所以,在表5.1中用得最多的组合还是第一种,连同其他的5位其地址为00100000B=20H。每当中断服务结束和返回之前都要给8259A发一个这样的OCW2(20H)来结束中断(将ISR中当前级别最高的置1的位复位)。 4 L& P" C; x) x: x( r6 Q8 j
3.OCW3
3 \9 G; W6 g! N9 k( ~    OCW3用来设置中断屏蔽方式、置8259A为查询方式和规定要读出其内容的寄存器,其格式和含义如图5.19所示。9 o/ n* L- P+ [7 B

( D0 Z9 O8 t& z9 z1 ^, @7 T( _2 c
9 s* A, x! |6 w! }2 d$ ^" z: N! [7 h7 D
3 X. j, y6 W! [. \1 @4 ~
     其中间两位(D4、D3)固定为01,作为OCW3的标志。 0 o$ L- N) O; U& `9 L0 Y( M! @
    SMM位用来选择中断屏蔽方式,取0表示使用一般屏蔽方式,取1表示使用特殊屏蔽方式。ESMM是SMM位的控制位,为l允许SMM位起作用,否则禁止它起作用。 / e- D9 V* g$ O+ e# v
    P位决定是否将8259A置成查询方式(P=1时为查询方式)。所谓查询,是通过程序来了解是否有中断发生。当8259A被置成查询方式后,随后送到8259A的引脚的读信号被理解为中断响应信号,8259A将一个字节的数据送上数据总线,如图5.20所示。该字节数据的最高位表示有没有中断发生(为1表示有中断发生),最低的3位在有中断发生的情况下给出请求中断服务的最高优先级的IR编码。可用程序来识别这个字节,若有中断,则转去执行相应的中断服务程序。由此可见,查询是8259A响应中断的又一种方法。5 R( I" r4 b/ Q' H# O
5 _* Y7 a( W% q

; @  c( q, D2 ~5 Z8 V* X
' e% N) g5 T) N- J& J# }0 b; c5 v" _
   在微机系统运行过程中,有时需要读8259A的可编程寄存器的内容。中断屏蔽寄存器IMR的内容可以随时读出,而中断请求寄存器IRR或正在服务寄存器ISR的内容不能直接读出,必须先发一个OCW3命令,置成允许读寄存器状态并且指明要读哪个寄存器。OCW3的最低2位就用于这个目的:RR位为读寄存器允许(为1时允许),RIS位为读寄存器选择,为0表示读IRR,为1表示读ISR。如果要读IRR的内容,必须先发一个()CW3命令,其RR、RIs为1 0,然后再读。如果要读ISR的内容,必须先发一个OCW3命令,其RR、RIs为ll,然后再读。
  M+ `9 C/ |8 g5 p5 h4 K, E  这里结合实际的机器来说明如何读寄存器的内容。在PC/AT机中采用了两片8259A级联的结构,主片的端口地址为20H和21H,从片的端口地址为AOH和A1H。由于在8259A中IRR和ISR都是用端口寻址线A0为0来选择的,所以在:PC/AT机中主片的IRR和ISR的地址一样,为20H,从片的IRR和ISR的地址一样,为AOH。由于在8259A中IMR是用端口寻址线A0为1来选择的,所以在PC/AT机中主片的IMR的地址为21H,而从片的IMR的地址为A1H。 ! J9 A6 X1 d" Z3 b) n8 K1 F8 e5 [
    下面的c程序段是读主片的IRR: 7 f) N7 ?2 \6 X6 Q$ |
    outtportb(0x20,OxOa);    /*这里的Ox20是主片OCW3的写入口地址*/
; m  X- E6 J1 I  w2 ~) I( O                                                  /*OxOa是具体的OCW3,二进制值为00001010*/
: I( ^/ W. B  K( g8 V0 S    m irr=inportb(0x20);         /*这里的Ox20是主片的IRR的口地址*/ ) Y: D; z- f) ~* A1 R( l
    下面的c程序段是读从片的:ISR: 7 x5 p( I( i! G$ _0 T
    outportb(0xa0,0xob);    /*这里的0xa0是从片OCW3的写入口地址*/
: F# X7 q6 w  g, y                                                /*0xOb是具体的OCW3,二进制值为0000101l*/ . N- n0 F' P$ O6 S" G' O& R
    s irr=inportb(OxaO);      /*这里的OxaO是从片的ISR的口地址*/   S6 z& B& x' t6 W- }) P% \& s
    下面的c语句是读主片的IMR:
! e  {1 z3 V; W$ Y  Z; L$ k5 T0 S    m isr=inportb(0x21);    /*0x21是主片的IMR的口地址,*/
3 B) v* @0 N. s! Z" y3 D* P- @    下面的c语句是读从片的IMR:   z; p1 G: V- M) o/ s( D( q! S. A
    s isr=inportb(0xal);    /*0xal是从片的IMR的口地址,*/
) q7 T# o3 O8 G9 z: @# s' m    从上面介绍的8259A的初始化命令字和操作命令字可以看出,它是一种功能相当强的中断控制器。8259A是本教材介绍的第一种可编程芯片,和其他可编程芯片一样,芯片设计者在设计时,总是尽量考虑到多种用户的需要、多种应用的需求,功能尽可能全一些,对某一个具体的应用场合,可能只用到其中一部分功能,甚至只用到一小部分功能(对后面要介绍的可编程接口芯片尤为如此)。请读者注意可编程芯片的这一特点。



点击图标进入精品网摘收藏 欢迎大家加入网络收藏夹

TOP

发新话题