#C0306
沧海茫茫千钟粟,且拾吾昧一微尘
——《沧海拾昧集》@CuPhoenix
【阅前敬告】
沧海拾昧集仅做个人学习笔记之用,所述内容不专业不严谨不成体系
如有问题定为本集记录有谬,切勿深究
目录
一、Inter 8259A芯片
1、8259A的主要功能
- 在有多个中断请求时,8259A能判别中断源的优先级,一次可以向CPU送出一个最高级别的中断请求信号;
- 一片8259A可以管理8级中断,并且在不增加任何其它电路的情况下,可以多片8259A级联,形成对多于8级的中断请求的管理。最多可以用9片8259A来构成64级的主从式中断管理系统;
- 可以通过编程,使8259A工作在不同的工作方式下,使用起来灵活方便;
- 单电源+5V,NMOS工艺制造。
2、8259A的内部结构

- 中断请求寄存器(IRR)
一片8259A有8条外界中断请求线IR0~IR7,每一条请求线有一个相应的触发器来保存请求信号,从而形成了中断请求寄存器。外设产生中断请求方式有两种:一种是边沿触发,上升沿触发;另一种电平触发,输入信号保持高电平触发。用户可根据需要通过编程来实现。
- 中断屏蔽寄存器(IMR)
由用户编程进行设置,可以对IRR中的相应的中断源进行屏蔽,对于较高优先权的屏蔽不影响较低优先权的输入。
- 优先权电路
对保存在IRR中的各个中断请求,经过判断确定最高的优先权,并在中断响应周期把它选通至在服务寄存器(ISR)。
- 当前服务寄存器(ISR)
储存当前正在服务的中断源的标志。ISR的置位是在中断响应的第一个INTA有效时完成的。
- 控制逻辑电路
在8259A的控制逻辑电路中,有一组初始化命令字寄存器(对应ICW1~ICW4)和一组操作命令字寄存器(对应OCW1~OCW3),这7个寄存器均可由用户根据需要通过编程来设置。控制逻辑可以按照编程所设置的工作方式来管理8259A的全部工作。
- 数据总线缓冲器
这是一个8位的双向、三态缓冲器,用作8259A与系统数据总线的接口,用来传输初始化命令字、操作命令字、状态字和中断类型码。
- 读/写控制逻辑
接收来自CPU的读/写命令,完成规定的操作。具体动作由片选信号CS*,地址输入信号A0,以及读RD*和写WR*信号共同控制
- 级联缓冲/比较器
这个功能部件用在级连方式的主-从结构中,用来存放和比较系统中各8259的从设备标志(ID)。
3、8259A的引脚及功能
- D0~D7:数据信号引脚,双向信号,用于与CPU之间的信息传输;
- A0:地址选择信号,输入,用来对内部寄存器进行选择。8259A的内部寄存器占外设的两个地址,称为奇地址和偶地址;
- CS*:片选信号,输入;
- RD*:读信号,输入;
- WR*:写信号,输入;
- IR0~IR7:中断请求引脚,输入。接来自不同外设的中断源,高电平或上升沿表示有请求;
- INT:中断请求信号,输出,向CPU发中断请求;
- INTA*:中断响应信号,输入,接收CPU响应中断后的应答信号。
- CAS2~CAS0:主从级连双向信号。当系统的中断请求多于8个时,可用两个或更多的8259A级连,其中一个是主控制器,其余是从控制器。从片的INT输出接到主片的一个IR输入。
- SP*/EN*:主从或缓冲方式,双向信号。当其为输入时,8259A处于“非缓冲方式”,由它决定该片为主片(SP* = 1)或从片(SP* = 0)。 当其为输出时,8259A处于“缓冲方式”,该信号用来控制双向总线驱动器的启动(EN*)端。这种方式常用于多片级连的大系统中

二、Inter 8259A的工作方式
1、中断触发方式
- 边沿触发方式:以上升沿向8259A请求中断,上升沿后可一直维持高电平,不会再次产生中断。
- 电平触发方式:以高电平向8259A申请中断,但在响应中断后应及时清除高电平,以免引起第二次中断。
2、中断屏蔽方式
- 普通屏蔽方式:利用操作命令OCW1,使屏蔽寄存器IMR中的某一位或某几位置1来屏蔽相应输入端的中断请求,若要开放某个中断源,则在相应位置0。
- 特殊屏蔽方式:在某些场合,在执行某一个中断服务程序时,要求允许另一个优先级比它低的中断请求被响应。这时可采用特殊的屏蔽方式。即在优先级高的中服中,用OCW1将IMR中本中断的对应位置1,将本级中断屏蔽,同时将ISR(在服务寄存器)中该中断的对应位清零,对外界来说,就好像CPU此时没有处理该中断,这样,即使是最低级的中断请求,也会被CPU响应。特殊屏蔽方式一般是在最高优先级中服使用。
3、中断嵌套方式
- 一般全嵌套方式:只允许中断级别高的中断源中断级别低的中服程序,而不能相反。这是8259A的常用方式,若在对8259A初始化后,没有设置其它优先级方式,自动按此方式工作。
- 特殊全嵌套方式(级联):允许响应同级打断同级提出的中断请求,主要用在级联系统中的主片,用于给从片提供优先级。
4、中断优先级方式
- 固定优先级方式:优先级的顺序是固定不变的,优先级的顺序为:IR0 > IR1 > IR2 > IR3 > IR4 > IR5 > IR6 > IR7。
- 循环优先级方式:优先级的顺序不是固定不变的,一个设备受到中断服务后,其优先级自动降为最低。再根据OCW2的D6的值,又分两种:一种是初始优先级为IR0>IR1>……>IR6>IR7 ,另一种初始优先级是可以指定的。
5、结束中断的处理方式
当8259A的某个中断源顺利申请CPU中断时,在ISR中这个中断源的对应位置位,结束中断的处理方式就是对ISR中的该位进行处理。
- 自动中断结束方式:在中断服务子程序运行之前(第二个INTA)自动清除该中断所对应的ISR位。这种方式用在中断不会嵌套的系统中。
- 非自动中断结束方式:在中服程序的最后,中断返回之前,需要用软件发送清除ISR对应位的命令。分两种情况:
- 正常的EOI命令,该命令使ISR中为1的当前优先级最高的那一位复位;
- 特殊的EOI命令,在特殊的全嵌套方式下,只根据ISR的对应位是无法确定哪一级中断是最后响应和处理的,所以在程序中要发一指定的EOI命令,向8259A指出要清除的ISR中的具体位。一般用于复杂的多片级联系统中。
6、连接系统总线的方式
- 缓冲方式:在多片级连的大系统中,要求数据总线有总线缓冲器(考虑主片带负载能力不足)。8259A与这种带总线缓冲器的系统总线连接的方式称缓冲方式。此时SP*/EN*用于输出,启动缓冲器工作,不能用作表示主从关系。故需要在初始化设置中设置专用位来表示级联系统中的主从关系。
- 非缓冲方式:若在小系统中,8259A的D7~D0可以直接与总线连接,不需要总线缓冲器,这种方式称为非缓冲方式,此时,SP*/EN*用作输入,用于表示级联系统中的主从关系,即该引脚接高电平表示该芯片为主片,接低电平表示该芯片为从片。
7、查询方式
外设以上升沿或高电平通过8259A向CPU申请中断,但8259A却不使用INT信号向CPU申请中断,只是等待CPU用软件查询8259的状态以确定中断源,并用程序转入相应的处理程序。
8、读8259A的状态
8259A中的寄存器IRR,ISR和IMR的内容均可由用户读出。当用户要读IRR或ISR的内容时,先要写入OCW3,由D1D0=10或11决定读出的是IRR的值还是ISR的值,然后通过一条输入指令读A0=0的端口地址即可。而当用户要读IMR的内容时,不需写入OCW3,直接用一条输入指令去读A0=1的端口地址即可。
三、Inter 8259A的初始化
- 初始化命令字 ICW:用于8259A的设置,这些字必须在8259A进入工作之前依次设置;
命令字名称 | 主要设置内容 |
---|---|
ICW1 | 触发方式、是否多片、是否使用ICW4 |
ICW2 | 中断类型码 |
ICW3 | 多片级联使用时设置连接关系 |
ICW4 | 设置中断结束方式、是否为缓冲方式、主从片、嵌套方式等 |
对每片8259A均需写入ICW1和ICW2,是否写入ICW3和ICW4均由ICW1的相应位决定。只有在级连的方式下,主、从片才须写入ICW3;仅当8086/8088系统或须设置特殊全嵌套方式、缓冲方式、自动中断结束方式时,才写入ICW4。
- 操作命令字 OCW:在8259A经过初始化并进入操作以后,用这些字来控制8259A执行不同方式的操作,这些字可以在初始化以后的任何时刻写入8259A。
命令字名称 | 主要设置内容 |
---|---|
OCW1 | 设置中断屏蔽 |
OCW2 | 设置循环优先级、发结束中断命令 |
OCW3 | 设置特殊屏蔽方式、发查询命令、发读IRR、ISR命令 |
1、初始化命令字 ICW1
A0 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
0 | × | × | × | 1 | LITM | × | SNGL | IC4 |
-
D3:规定中断请求信号的触发方式,D3=1,为电平触发方式;D3=0,为边沿触发方式;
-
D1:单片工作,D1=1;多片工作,D1=0;
-
D0:D0=1,表示初始化时须设置ICW4;若ICW4的各位都为0,则不需须设置ICW4;
2、初始化命令字 ICW2
A0 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
1 | T7 | T6 | T5 | T4 | T3 | × | × | × |
ICW2用来设置中断类型码,在中断响应时将外设对应的该类型号送上数据总线。D7 ~ D3设置的T7 ~ T3为中断类型码的高5位,由用户编程时写入;低3位由IR0~IR7的管脚序号自动形成。
3、初始化命令字 ICW3
对主片:
A0 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
1 | IR7 | IR6 | IR5 | IR4 | IR3 | IR2 | IR1 | IR0 |
对主片而言,将接有从片的位置置1,其余置0。
对从片:
A0 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
1 | × | × | × | × | × | ID2 | ID1 | ID0 |
对从片而言,用D2 ~ D0表示其接在了主片的哪个引脚上。
4、初始化命令字 ICW4
A0 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
1 | 0 | 0 | 0 | SFNM | BUF | M/S | AEOI | uPM |
-
D4:中断优先级设置,D4=1,为特殊的全嵌套模式;D4=0,为普通的全嵌套模式;
-
D3:工作在缓冲方式,D3=1;工作在非缓冲方式,D3=0;
-
D2:缓冲方式专用,若为主片D2=1,不为主片D2=0;
-
D1:D1=1,自动中断结束方式;D1=0,用中断结束命令结束中断;
-
D0:D0=1,表示初始化时须设置ICW4;若ICW4的各位都为0,则不需须设置ICW4;
5、操作命令字 OCW1
A0 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
1 | M7 | M6 | M5 | M4 | M3 | M2 | M1 | M0 |
设置中断屏蔽寄存器IMR的内容,M7~M0代表8个屏蔽位,分别用来控制IR7~IR0输入的中断请求信号。如果某位Mi为1,则屏蔽相应的IRi输入的中断请求,如果某位Mi为0,则清除屏蔽,允许相应的IRi的中断请求信号进入优先级排队。
IMR寄存器中的内容可以被CPU读出,直接读奇地址即可。
6、操作命令字 OCW2
A0 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
0 | R | SL | EOI | 0 | 0 | L2 | L1 | L0 |
-
D7:置1为轮换优先级,置0为固定优先级;
-
D6:置1为指定轮换 / 指定结束中断,置0为自动轮换 / 正常结束中断;
-
D5:指示该命令字是否为发送中断结束命令。置1为发送非自动结束中断结束命令,置0为该命令与中断结束命令无关,是设置优先级的命令;
-
D2D1D0:指定轮换,给出初始的最低优先级 / 指定EOI,给出复位的位置;
7、操作命令字 OCW3
A0 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
0 | 0 | ESMM | SMM | 0 | 1 | P | RR | RIS |
敬谢诸君。
金陵钟山之阳。