发新话题
打印

8259A的工作方式

8259A的工作方式


8259A的工作方式
: q7 K/ E! P* s) J7 G    8259A对中断的管理涉及多个方面,因此它有多种工作方式,如中断嵌套方式、优先级管理方式、中断结束方式、中断屏蔽方式等。由于8259A是一个可编程的芯片,所以这些方式都可以通过编程方法设置,用户可根据自己的需要选择相应的工作方式。 5 D! R6 y$ }/ {8 W: ?3 m3 a# D
1.编程角度看8259A
+ W0 I4 t2 z+ N0 U' K/ \5 b  用户(程序员)在使用一个可编程接口或控制芯片时,一般是从编程角度看,对8259A也是如此,它有10个可编程寄存器,可分成两组。一组是在内部结构框图(图5.8)中明显表示的,它们是中断请求寄存器IRR、中断屏蔽寄存器IMR和正在服务寄存器ISR。这3个寄存器的作用前面已经介绍了。另一组在内部结构框图中没有被表示,属于内部寄存器,它们是4个初始化命令寄存器和3个操作命令寄存器。初始化命令寄存器用来存放初始化命令字,4个初始化命令字分别为Icwl~ICW4(Initial Command Word)。在对8259A进行初始化编程时,要根据需要写入相应的初始化命令字。一旦初始化完成,8259A就按照这些初始化命令字来管理外部的8级中断。在8259A工作期间,可通过操作命令字对它进行必要的干预,使其改变某方面的工作方式。操作命令字有三种:OCWl~OCW3(Operation Commancd 4 a4 u9 L7 w, c/ Q7 D: m
word),它们被存放在操作命令寄存器中。
3 b. i" C6 q( l0 H: i  2.中断嵌套方式 7 p  n% j0 X3 w+ a! H9 B
  8259A的嵌套方式有两种:一般全嵌套方式和特殊全嵌套方式。
6 C9 P# f8 J( z  1)一般全嵌套方式 9 p% R. Q, Z* Q0 _) D" q
  一般全嵌套方式是8259A最常用和最基本的一种嵌套方式,如果对8259A初始化后没有用操作命令字设置为其他嵌套方式,则8259A就自动按一般全嵌套方式工作。在这种方式下,在为某中断服务期间禁止同级和较低级的中断请求,而较高级的中断请求仍可经INT端向CPU提出。
  v, K1 T& E7 @( ^  2)特殊全嵌套方式
* A1 D. t$ A5 y) [; x( n& r  特殊全嵌套方式与一般全嵌套方式的区别在于:在为某中断服务期间不禁止同级的中断请求,即允许同级的和较高级的中断进入。这种方式所要解决的问题是:在多片级联的情况下,当某从片的中断得到响应、进入中断服务期间,来自该从片的更高级的中断请求仍能为主8259A所识别(对主8259A来说,同一从8259A的8个中断都是一个级别),并向CPU提出请求。所以,在级联的情况下,主片应设置为特殊全嵌套方式,从片一般设置为一般全嵌套方式。 $ X# p6 Q) K3 e3 f8 U$ K: g
  3.优先级方式
1 W" s& W! u- e) k! \4 e  1)固定优先级
2 B2 g% `; C) J/ O2 E' L6 s. |5 y  h  这是大多数应用中采用的优先级方式。在该方式下,各中断源的优先级是固定的:IR0最高,IRl次之,然后依次降低级别。 , H0 w' w( x; B  n7 L
  2)优先级自动循环方式 3 E: k6 B7 x: X9 C- u# Q
    在该方式下,某一中断源的请求被响应后,其优先级自动降为最低,其他中断源的优先级也随之改变。例如,IR4提出请求并得到响应后,自动降为最低优先级,IR5变为最高优先级,优先级从高向低依次为:IR5、IR6、IR7、IR0、IRl、IR2、IR3、1R14。 . U1 z: w- k6 o3 f( [
    8259A设置为优先级自动循环方式后,最初的优先级是:IR0最高、IR7最低,其他依次类推。 % q8 m/ p" o0 s/ s
    该方式适用于系统中多个中断源的优先级相等(难以分清它们的级别)的情况,使得各中断源的请求得到响应的机会均等。 # T( d! k1 h4 f  ~
  3)优先级特殊循环方式 5 w) b) e3 L$ S
  该方式是通过编程(OCW2)人为地指定某个中断源的优先级降为最低,其他中断源的级别也随之改变。
  W, a" O) E$ b! T0 [4.中断结束方式 - {+ b+ ~; W0 }! g# d. E) o) B
    当某一个中断请求被CPU响应后,该中断在ISR中的相应位被置位,表示CPU正在为该中断服务。在中断服务结束、中断返回之前的适当时刻应将该ISR位复位,否则8259A就不能响应该中断源新的请求。这项工作称为中断结束处理。中断结束的方式分自动结束和非自动结束两种,而非自动结束方式又有一般中断结束和特殊中断结束之分。
. z( _2 ^6 G8 f    1)自动中断结束方式
4 Y2 J9 k+ [! X$ t0 `0 x& k  F) ~    该方式需要通过ICW4设置。设置成该方式后,对每一个中断,在中断响应时(对8086/8088,是在第二个中断响应周期的INTA的后沿时),由8259A自动将ISR对应位清除。当然,为该中断的服务并不因此而受到影响。这种方式是为没有经验的程序员忘了在中断服务程序中给出中断结束命令而设立的。 5 r5 n+ E+ r/ ^# i' b
  2)一般中断结束方式
& S4 v; i2 \- }  这种方式配合一般全嵌套方式使用。采用这种方式反映在程序中是在具体的中断服务已做完、返回之前向8259A发一个一般中断结束命令,8259A就将ISR中当前已置l的最高位复位。因为在一般全嵌套方式下,ISR中当前已置1的级别最高的位对应了最后一次被响应和被处理的中断,也就是当前正在处理的中断,所以,将该位复位相当于结束了当前正在处理的中断。 8 V( H( [' Y% q8 R- X& a- D  c
    3)特殊中断结束方式
7 d/ F* U) }; G  ~3 i" T+ Q5 X    在特殊全嵌套方式下,不能确定ISR中哪一位是最后置位的,即哪一个中断请求是最后被响应的,这时就要采用特殊中断结束方式。采用这种方式反映在程序中就是要发一条特殊中断结束命令,这个命令中指出了要清除哪个ISR位。特殊中断结束方式可理解成人为地将ISR中某一位复位。而一般中断结束方式要复位的ISR位是8259A自动寻找的。
) A7 G0 E. A7 d& j( u/ U" x    在此,对级联系统中的从片的中断结束处理作一些说明。在将主片设置成特殊全嵌套方式的情况下,从片可能出现中断嵌套,在从片的某中断服务结束时,必须用软件检查被服务的中断是否为该从片惟一的中断。为此,先向从8259A发一个一般的中断结束命令,清除已完成服务的ISR中优先级最高的位,然后再读出ISR的内容,检查它是否为0,如果为0,则向主8259A发一个中断结束命令,清除(主8259A)ISR中与该从片相对应的位(这一步不能忘记);如果从8259A的ISR的内容不为0,则不向主8259A发中断结束命令,该中断返回后,CPU继续为该从片被打断的中断服务。
# i' S+ e8 G: }9 Q6 H9 X* L  5.屏蔽中断源的方式    6 ]% F& l/ f0 Q! T% Q/ D) a
  8259A有两种屏蔽中断源方式:普通屏蔽方式和特殊屏蔽方式。前者用得较多,后者仅用于一些特殊应用场合。 / Y4 E3 z0 z5 W3 O( B+ b& y' {
  1)普通屏蔽方式
  f7 Q! @3 O2 B" N  在普通屏蔽方式下,将中断屏蔽寄存器IMR的某位置1,则它所对应的中断就被屏蔽,从而使这个中断请求不能由8259A送到CPU。如果IMR某位置0,则允许该中断起作用。 + T( d* l8 `9 I  A8 L6 V1 e
  2)特殊屏蔽方式 3 Q# `$ }4 T9 R& [4 B2 n
  有些应用场合,希望一个中断服务程序能动态改变系统的优先权结构。例如,在执行中断服务程序的某一部分时,希望禁止较低级的中断请求,而在执行中断服务程序的另一部分时,又能够开放比本身级别低的中断。 4 u( G! P  [) R' C) @
  为达到这样的目的,自然会想到使IMR中本身对应的位置l,使本级中断受到屏蔽,从而为开放较低的中断提供可能。但是,这样做有一个问题:每当一个中断请求被响应时,就会使ISR对应位置1,只要没有发出中断结束命令,8259A就会禁止所有比它低的中断。所以,尽管当前处理的较高级的中断被屏蔽,但由于ISR位未被复位,较低级的中断请求在发出中断结束命令之前仍然不会得到响应。
$ R& d1 z2 B2 O# P5 y- S5 o. `  引进了特殊屏蔽方式。设置了此方式后,使IMR某位置l,就会同时使ISR的相应位复位。这样,可真正开放级别较低的中断。当然未被屏蔽的更高级中断也可以得到响应。



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

TOP

发新话题