8259A中断控制器
来源:互联网 发布:手机led灯软件 编辑:程序博客网 时间:2024/05/20 12:25
此篇精华,全在开始的一问一答
问:8259A仅占用两个I/O端口地址,它是如何区别4条ICW命令和3条OCW命令的?
答: 首先 ICW1、OCW2和OCW3占用的I/O端口为低位地址,即A 0 为 0,其余的初始化命令字和控制命令字的A 0 都为 1,所以把ICW1、OCW2和OCW3与别的初始化命令字和控制命令字区别开来;而ICW1的D 4 = 1,OCW2的D 4 D 3 = 00,OCW3的D 4 D 3 = 01所以可以区分开ICW1、OCW2和OCW3;又知道ICW1是初始化时写入的第一个命令字,紧接着写入的应该是ICW2、ICW3,又ICW1的最低位指定了初始化时是否写入ICW4,所以这些初始化命令字就可以区分开来了。
当初始化完成后工作期间, 3个操作命令字是这样区分的:OCW1占用的I/O端口为高位地址,OCW2和OCW3占用的为低位地址,所以OCW2和OCW3可以和OCW1区分开;而 OCW2和OCW3的D 3 位不同,所以二者又被区分开。
补充:
PC机中主片端口为20h、21h;从片端口地址为A0h、A1h。
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
初始化命令字ICWl~ICW4.用来对8259A进行初始化。在初始化命令字中有一些位是针对8080/8085 CPU的,因为这两种CPU早已不用了,所以,在下面命令字的说明中对这些位不再作进一步的解释。在写命令字时这些位取0。
初始化命令字是要写入相应的初始化命令字寄存器中的。对8259A内部寄存器的操作需要通过端口进行。一片8259A占用两个端口地址,用端口选择引脚A0来选择。对于一般的微机系统,A0接系统地址总线的最低位A0,这样,一片8259A占用的两个地址是连续的,一个为偶地址(A0=0),另一个为奇地址(A0=1)。在下面命令字格式图示中,左边都有一个上方标“A0”的方框,框内有的为0,有的为1,这分别表示该命令字应写入8259A的AO为0的端口和写人A0为1的端口,在一般的微机系统中,分别表示写入8259A的偶地址端口和写入奇地址端口。
1)ICWl
ICWl主要用来设定中断请求的触发方式,是否级联,初始化过程中用不用ICW4等。
它的格式和含义如图5.11所示。图中一些位格中有英文缩写,如D1位中有SNGL
(single)”,这是给每一位起一个名称,表示出这一位(也可以是几位)的含义(一般是该位为l 时的含义)。这样说起来比较方便,例如,选择单片或级联是SNGL位,而不必说成Icwl的第1位。
ICWl的D4位恒为1,连同A0为0,作为ICWl的标志。这是因为在初始化时,ICWl是第一个应写入的,它必须有区别于其他初始化命令字,包括操作命令字的特征(ICW2、ICW3、ICW4的A0都为1,而A0为0对应的操作命令字有两个:OCW2和OCW3,它们的D4位都为0)。
2)ICW2
ICW2用来设置中断向量(在8086系统或PC系列机中,这里所说的中断向量实际是中断类型码)。在用于8086/8088系统时,该命令字的格式和含义如图5.12所示。高5位规定中断向量的高5位,即同一片8259A的8级中断的中断向量的高5位是相同的,而低3位是对应IR线的编码(000~111)。图中低3位标“×”表示取值任意,一般取0。有时将ICW2称为中断向量字节。
3)ICW3
ICW3仅在8259A级联时才需要。对于主片和从片,ICW3的意义不同。
对于主片,ICW3的格式和含义如图5.13所示。8位的意义相同,某位为0,对应的IR线接中断请求信号;为1,对应的IR线接从片的中断请求信号INT。
对于从片,ICW3的格式和含义如图5.14所示。高5位固定为0。低3位是从片的标识码,等于从片所连接的主片IR输入端的编码。例如,一从片的INT接到主片的IR2,则该从片的ICW3应为00000010B(后3位为IR2的编码010)。
从片的标识码在中断响应时要用到。当CPU响应来自某从片的中断请求时,连续产生两个中断响应周期。在第一个中断响应周期,主片把得到响应的IR编码送上级联线(CAS2~CAS0),从片拿它与自己的标识码进行比较,若结果相同,表明cPu正在响应本片的中断,于是准备该中断的中断向量,在第二个中断响应周期将其送上数据总线。
4)ICW4
ICW4的功能较多,用来设置是否为特殊全嵌套方式,是否为缓冲器方式,是否为自动中断结束中断方式,是否为8086/8088系统等,其格式和含义如图5.15所示。
8259A的初始化编程
中断系统进入正常运行之前,系统中的每一片8259A都必须进
行初始化。初始化就是根据系统的实际需要确定上述各初始化命令字
的具体数值并按固定的先后次序写入8259A的指定端口。如图5.16
所示为8259A的初始化流程。对8259A初始化应注意以下几点:
①初始化前要确保CPU为关中断状态,在所有的初始化完成后才
开中断;
②对系统中的每一片8259A都要进行初始化;
③初始化命令字的写入顺序是固定不变的,最先写入的应是ICWl;
④ICWl写入A0为0的端口(一般系统中为偶地址),ICW2~ICW4写入A0为1的端口
(一般系统中为奇地址);
⑤在多片级联系统中,对从片必须写入各自的ICW3;
8259A的操作命令字OCW
8259A在初始化后就进入工作状态,准备接收IR端的中断请求。此后,可通过操作命令字,改变它的某方面的操作方式或指示它进行某种操作。操作命令字共有3个:OCWl~OCW3,它们可单独使用。
1.OCWI
OCWl用来进行屏蔽操作,直接将中断屏蔽寄存器IMR的相应位置位或复位。OCW的格式、含义如图5.17所示。
2.OCW2
OCW2用来设置中断结束方式和优先级循环方式,其格式和含义如图5.18所示。
OCW2的D4,D3固定为0,0,作为OCW2的标志,这是因为它和OCW3同用A0=0选择。
其D2~Do位(L2~L0)只有在SL位为“1”时才有效,此时,有两个用途:一是当OCW2设置为特殊的中断结束命令时,由这3位指出要清除ISR寄存器中的哪一位;另一个用途是当0CW2设置为优先权特殊循环方式时,由L2~I0指出循环的开始阶段哪个中断源的优先级最低。其D7~D5位(R、sL、EOI)通过组合起作用,用来设置优先权循环方式和中断结束方式以及作为中断结束命令,但是它们的每一位为l时具有各自基本的含义,其中:
·R位为1表示采用优先权循环方式;
·sL位为1表示D2一D0位(L2~L0)有效;
·EOI(End of Interrupt)位为1表示中断结束命令,要将ISR中某一位复位。
OCW2的D7~D5位(R,SL,EOI)真正起作用的是它们的组合,其组合的表示意义见表5.1,其中功能说明中的“EOI"表示“中断结束”。
需要指出,在一般的应用系统中是将8259A设置成固定优先级、一般全嵌套方式、非自动中断结束方式,所以,在表5.1中用得最多的组合还是第一种,连同其他的5位其地址为00100000B=20H。每当中断服务结束和返回之前都要给8259A发一个这样的OCW2(20H)来结束中断(将ISR中当前级别最高的置1的位复位)。
3.OCW3
OCW3用来设置中断屏蔽方式、置8259A为查询方式和规定要读出其内容的寄存器,其格式和含义如图5.19所示。
其中间两位(D4、D3)固定为01,作为OCW3的标志。
SMM位用来选择中断屏蔽方式,取0表示使用一般屏蔽方式,取1表示使用特殊屏蔽方式。ESMM是SMM位的控制位,为l允许SMM位起作用,否则禁止它起作用。
P位决定是否将8259A置成查询方式(P=1时为查询方式)。所谓查询,是通过程序来了解是否有中断发生。当8259A被置成查询方式后,随后送到8259A的引脚的读信号被理解为中断响应信号,8259A将一个字节的数据送上数据总线,如图5.20所示。该字节数据的最高位表示有没有中断发生(为1表示有中断发生),最低的3位在有中断发生的情况下给出请求中断服务的最高优先级的IR编码。可用程序来识别这个字节,若有中断,则转去执行相应的中断服务程序。由此可见,查询是8259A响应中断的又一种方法。
在微机系统运行过程中,有时需要读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,然后再读。
这里结合实际的机器来说明如何读寄存器的内容。在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。
下面的c程序段是读主片的IRR:
outtportb(0x20,OxOa); /*这里的Ox20是主片OCW3的写入口地址*/
/*OxOa是具体的OCW3,二进制值为00001010*/
m irr=inportb(0x20); /*这里的Ox20是主片的IRR的口地址*/
下面的c程序段是读从片的:ISR:
outportb(0xa0,0xob); /*这里的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位为1且IMR相应的位为0才可以发生中断。发生中断时,IF位被CPU复位;如果要继续接收中断:一是要用sti指令置IF位,二是向8259发送EOI告知中断处理结束。
补充:
1.发送EOI:
mov al,20h
out 20h,al ;往20h端口置EOI位,告知8259控制器中断结束。
2.EOI位:即OCW2的5位,写20h或A0h端口可以改变它
3.I/O指令:in、ins、out、outs、cli、sti。这些指令只有在CPL<=IOPL时才能执行。可用改变
4.IOPL:是eflags寄存器(0-31位)的12、13位,IF是eflags寄存器的9位。Sti/cli指令置/复IF位。可以改变IOPL的只有popf和iretd指令,但只有运行在ring0的程序才能将其改变。指令popf同样可以用来改变IF。只有在CPL<=IOPL时popf才可以改变IF。
5.CPL:是当前CS寄存器的RPL
不可屏蔽中断(NMI):
中断向量号2对应的是不可屏蔽中断。
- 8259A中断控制器
- 8259A中断控制器
- 8259a中断控制器
- 8259A中断控制器
- 8259A 可编程中断控制器
- PIC - 8259A中断控制器
- 8259A 可编程中断控制器
- 8259A--可编程中断控制器
- 可编程中断控制器8259A
- 中断控制器8259A编程方法介绍
- 8259A中断控制器详细介绍
- 8259A中断控制器详细介绍
- 8259A中断控制器详细介绍
- 带你读懂8259A中断控制器
- 8259A可编程中断控制器芯片中断过程
- 第9章 中断系统和中断控制器8259A
- 中断子系统(3)8259A中断控制器
- 8254定时器 和 8259A中断控制器 知识点
- Web服务中调用office pia 操作WORD,EXCEL时需做的设置
- Web 应用程序调优指南
- Java和C#运行命令行的例子对比
- java.lang.NoSuchMethodError
- jsp URI传递参数,对方接受是乱码解决方法
- 8259A中断控制器
- hibernate程序的异常:java.lang.UnsupportedOperationException: The user must supply a JDBC connection
- SQL 注入式攻击的本质
- 了解实际开发中 Hashtable 的特性原理 .NET, JAVA, PHP (之一)
- 目前用到的两个分页存储过程
- SQL 注入式攻击的终极防范
- Windows Sockets 模型对比
- September, 8(R)
- @import和link的区别