8259A中断控制器

来源:互联网 发布:手机led灯软件 编辑:程序博客网 时间:2024/05/20 12:25

 

此篇精华,全在开始的一问一答

 

问:8259A仅占用两个I/O端口地址,它是如何区别4ICW命令和3OCW命令的?

答: 首先 ICW1OCW2OCW3占用的I/O端口为低位地址,即A 0 为 0,其余的初始化命令字和控制命令字的A 0 都为 1,所以把ICW1OCW2OCW3与别的初始化命令字和控制命令字区别开来;而ICW1D 4 = 1OCW2D 4 D 3 = 00OCW3D 4 D 3 = 01所以可以区分开ICW1OCW2OCW3;又知道ICW1是初始化时写入的第一个命令字,紧接着写入的应该是ICW2ICW3,又ICW1的最低位指定了初始化时是否写入ICW4,所以这些初始化命令字就可以区分开来了。 

当初始化完成后工作期间, 3个操作命令字是这样区分的:OCW1占用的I/O端口为高位地址,OCW2OCW3占用的为低位地址,所以OCW2OCW3可以和OCW1区分开;而 OCW2OCW3D 3 位不同,所以二者又被区分开。

补充:

PC机中主片端口为20h21h;从片端口地址为A0hA1h

Addresses/Registers for Master 8259A 

0x20 

Write Initialization Command Word 1 (ICW1) 

Write Operation Command Word 2 (OCW2) 

Write Operation Command Word 3 (OCW3) 

Read Interrupt Request Register (IRR) 

Read In-Service Register (ISR) 

0x21

Write Initialization Command Word 2 (ICW2) 

Write Initialization Command Word 3 (ICW3) 

Write Initialization Command Word 4 (ICW4) 

Read/Write Interrupt Mask Register (IMR) 

Addresses/Registers for Slave 8259A 

0xA0 

Write Initialization Command Word 1 (ICW1) 

Write Operation Command Word 2 (OCW2) 

Write Operation Command Word 3 (OCW3) 

Read Interrupt Request Register (IRR) 

Read In-Service Register (ISR) 

0xA1 

Write Initialization Command Word 2 (ICW2) 

Write Initialization Command Word 3 (ICW3) 

Write Initialization Command Word 4 (ICW4) 

Read/Write Interrupt Mask Register (IMR) 

8259A的初始化命令字ICW 

初始化命令字ICWlICW4.用来对8259A进行初始化。在初始化命令字中有一些位是针对80808085 CPU的,因为这两种CPU早已不用了,所以,在下面命令字的说明中对这些位不再作进一步的解释。在写命令字时这些位取0。 

初始化命令字是要写入相应的初始化命令字寄存器中的。对8259A内部寄存器的操作需要通过端口进行。一片8259A占用两个端口地址,用端口选择引脚A0来选择。对于一般的微机系统,A0接系统地址总线的最低位A0,这样,一片8259A占用的两个地址是连续的,一个为偶地址(A0=0),另一个为奇地址(A0=1)。在下面命令字格式图示中,左边都有一个上方标“A0”的方框,框内有的为0,有的为1,这分别表示该命令字应写入8259AAO0的端口和写人A01的端口,在一般的微机系统中,分别表示写入8259A的偶地址端口和写入奇地址端口。 

1)ICWl 

ICWl主要用来设定中断请求的触发方式,是否级联,初始化过程中用不用ICW4等。 

它的格式和含义如图511所示。图中一些位格中有英文缩写,如D1位中有SNGL 

(single)”,这是给每一位起一个名称,表示出这一位(也可以是几位)的含义(一般是该位为时的含义)。这样说起来比较方便,例如,选择单片或级联是SNGL位,而不必说成Icwl的第1位。

ICWlD4位恒为1,连同A00,作为ICWl的标志。这是因为在初始化时,ICWl是第一个应写入的,它必须有区别于其他初始化命令字,包括操作命令字的特征(ICW2ICW3ICW4A0都为1,而A00对应的操作命令字有两个:OCW2OCW3,它们的D4位都为0)。 

2)ICW2 

ICW2用来设置中断向量(8086系统或PC系列机中,这里所说的中断向量实际是中断类型码)。在用于80868088系统时,该命令字的格式和含义如图512所示。高5位规定中断向量的高5位,即同一片8259A8级中断的中断向量的高5位是相同的,而低3位是对应IR线的编码(000111)。图中低3位标“×”表示取值任意,一般取0。有时将ICW2称为中断向量字节。

3)ICW3 

ICW3仅在8259A级联时才需要。对于主片和从片,ICW3的意义不同。 

对于主片,ICW3的格式和含义如图513所示。8位的意义相同,某位为0,对应的IR线接中断请求信号;为1,对应的IR线接从片的中断请求信号INT

对于从片,ICW3的格式和含义如图514所示。高5位固定为0。低3位是从片的标识码,等于从片所连接的主片IR输入端的编码。例如,一从片的INT接到主片的IR2,则该从片的ICW3应为00000010B(3位为IR2的编码010)

从片的标识码在中断响应时要用到。当CPU响应来自某从片的中断请求时,连续产生两个中断响应周期。在第一个中断响应周期,主片把得到响应的IR编码送上级联线(CAS2CAS0),从片拿它与自己的标识码进行比较,若结果相同,表明cPu正在响应本片的中断,于是准备该中断的中断向量,在第二个中断响应周期将其送上数据总线。 

4)ICW4 

ICW4的功能较多,用来设置是否为特殊全嵌套方式,是否为缓冲器方式,是否为自动中断结束中断方式,是否为80868088系统等,其格式和含义如图515所示。

8259A的初始化编程 

    

中断系统进入正常运行之前,系统中的每一片8259A都必须进 

行初始化。初始化就是根据系统的实际需要确定上述各初始化命令字 

的具体数值并按固定的先后次序写入8259A的指定端口。如图516 

所示为8259A的初始化流程。对8259A初始化应注意以下几点: 

初始化前要确保CPU为关中断状态,在所有的初始化完成后才 

开中断; 

对系统中的每一片8259A都要进行初始化; 

初始化命令字的写入顺序是固定不变的,最先写入的应是ICWl; 

④ICWl写入A00的端口(一般系统中为偶地址)ICW2ICW4写入A01的端口 

(一般系统中为奇地址); 

在多片级联系统中,对从片必须写入各自的ICW3; 

8259A的操作命令字OCW 

8259A在初始化后就进入工作状态,准备接收IR端的中断请求。此后,可通过操作命令字,改变它的某方面的操作方式或指示它进行某种操作。操作命令字共有3个:OCWlOCW3,它们可单独使用。 

1.OCWI 

OCWl用来进行屏蔽操作,直接将中断屏蔽寄存器IMR的相应位置位或复位。OCW的格式、含义如图517所示。

2.OCW2 

OCW2用来设置中断结束方式和优先级循环方式,其格式和含义如图518所示。 

OCW2D4D3固定为00,作为OCW2的标志,这是因为它和OCW3同用A0=0选择。

D2Do(L2L0)只有在SL位为“1”时才有效,此时,有两个用途:一是当OCW2设置为特殊的中断结束命令时,由这3位指出要清除ISR寄存器中的哪一位;另一个用途是当0CW2设置为优先权特殊循环方式时,由L2I0指出循环的开始阶段哪个中断源的优先级最低。其D7D5(RsLEOI)通过组合起作用,用来设置优先权循环方式和中断结束方式以及作为中断结束命令,但是它们的每一位为l时具有各自基本的含义,其中: 

·R位为1表示采用优先权循环方式; 

·sL位为1表示D2D0(L2L0)有效; 

·EOI(End of Interrupt)位为1表示中断结束命令,要将ISR中某一位复位。 

OCW2D7D5(RSLEOI)真正起作用的是它们的组合,其组合的表示意义见表51,其中功能说明中的“EOI"表示中断结束

需要指出,在一般的应用系统中是将8259A设置成固定优先级、一般全嵌套方式、非自动中断结束方式,所以,在表51中用得最多的组合还是第一种,连同其他的5位其地址为00100000B=20H。每当中断服务结束和返回之前都要给8259A发一个这样的OCW2(20H)来结束中断(ISR中当前级别最高的置1的位复位)。 

3.OCW3 

OCW3用来设置中断屏蔽方式、置8259A为查询方式和规定要读出其内容的寄存器,其格式和含义如图519所示。

其中间两位(D4D3)固定为01,作为OCW3的标志。 

SMM位用来选择中断屏蔽方式,取0表示使用一般屏蔽方式,取1表示使用特殊屏蔽方式。ESMMSMM位的控制位,为l允许SMM位起作用,否则禁止它起作用。 

P位决定是否将8259A置成查询方式(P=1时为查询方式)。所谓查询,是通过程序来了解是否有中断发生。当8259A被置成查询方式后,随后送到8259A的引脚的读信号被理解为中断响应信号,8259A将一个字节的数据送上数据总线,如图520所示。该字节数据的最高位表示有没有中断发生(1表示有中断发生),最低的3位在有中断发生的情况下给出请求中断服务的最高优先级的IR编码。可用程序来识别这个字节,若有中断,则转去执行相应的中断服务程序。由此可见,查询是8259A响应中断的又一种方法。

在微机系统运行过程中,有时需要读8259A的可编程寄存器的内容。中断屏蔽寄存器IMR的内容可以随时读出,而中断请求寄存器IRR或正在服务寄存器ISR的内容不能直接读出,必须先发一个OCW3命令,置成允许读寄存器状态并且指明要读哪个寄存器。OCW3的最低2位就用于这个目的:RR位为读寄存器允许(1时允许)RIS位为读寄存器选择,为0表示读IRR,为1表示读ISR。如果要读IRR的内容,必须先发一个()CW3命令,其RRRIs1 0,然后再读。如果要读ISR的内容,必须先发一个OCW3命令,其RRRIsll,然后再读。 

这里结合实际的机器来说明如何读寄存器的内容。在PCAT机中采用了两片8259A级联的结构,主片的端口地址为20H21H,从片的端口地址为AOHA1H。由于在8259AIRRISR都是用端口寻址线A00来选择的,所以在:PCAT机中主片的IRRISR的地址一样,为20H,从片的IRRISR的地址一样,为AOH。由于在8259AIMR是用端口寻址线A01来选择的,所以在PCAT机中主片的IMR的地址为21H,而从片的IMR的地址为A1H。 

下面的c程序段是读主片的IRR: 

outtportb(0x20OxOa);    /*这里的Ox20是主片OCW3的写入口地址*/ 

*OxOa是具体的OCW3,二进制值为00001010*/ 

m irr=inportb(0x20);         /*这里的Ox20是主片的IRR的口地址*/ 

下面的c程序段是读从片的:ISR: 

outportb(0xa00xob);    /*这里的0xa0是从片OCW3的写入口地址*/ 

*0xOb是具体的OCW3,二进制值为0000101l*/ 

s irr=inportb(OxaO);      /*这里的OxaO是从片的ISR的口地址*/ 

下面的c语句是读主片的IMR: 

m isr=inportb(0x21);    /*0x21是主片的IMR的口地址,*/ 

下面的c语句是读从片的IMR: 

s isr=inportb(0xal);    /*0xal是从片的IMR的口地址,*/ 

从上面介绍的8259A的初始化命令字和操作命令字可以看出,它是一种功能相当强的中断控制器。8259A是本教材介绍的第一种可编程芯片,和其他可编程芯片一样,芯片设计者在设计时,总是尽量考虑到多种用户的需要、多种应用的需求,功能尽可能全一些,对某一个具体的应用场合,可能只用到其中一部分功能,甚至只用到一小部分功能(对后面要介绍的可编程接口芯片尤为如此)。请读者注意可编程芯片的这一特点。 

I/O许可位图:

TSS中的“I/O位图基值”指向一个以TSS的地址为基值的偏移,指向的便是"I/O许可位图".它的每一位表示一个字节的端口地址是否可用,若某一位为0则对应的端口地址可用。I/O许可位图必须以0FF结尾。如果I/O位图基值大于或等于TSS的段界限,就表示没有I/O许可位图,如果CPL=IOPL,则所有I/O指令都会引起异常。

外部可屏蔽中断:

只有IF位为1IMR相应的位为0才可以发生中断。发生中断时,IF位被CPU复位;如果要继续接收中断:一是要用sti指令置IF位,二是向8259发送EOI告知中断处理结束。

补充:

1.发送EOI

mov al,20h

out 20h,al ;20h端口置EOI位,告知8259控制器中断结束。

2.EOI位:即OCW25位,写20hA0h端口可以改变它

3.I/O指令:ininsoutoutsclisti。这些指令只有在CPL<=IOPL时才能执行。可用改变

4.IOPL:是eflags寄存器(0-31位)的1213位,IFeflags寄存器的9位。Sti/cli指令置/IF位。可以改变IOPL的只有popfiretd指令,但只有运行在ring0的程序才能将其改变。指令popf同样可以用来改变IF。只有在CPL<=IOPLpopf才可以改变IF

5.CPL:是当前CS寄存器的RPL

不可屏蔽中断(NMI):

中断向量号2对应的是不可屏蔽中断。

 

 

原创粉丝点击