当前位置:课程学习>>第七章>>知识讲解>>视频课堂>>知识点三
Intel 8259A是一种可编程序中断控制器PIC,又称“优先权中断控制器”,具有强大的中断管理功能。
8259A的主要功能有:
可管理具有8级优先权的中断源,通过级联可扩充至管理64级优先权的中断源。
通过编程对每一级中断源都可实现屏蔽或允许。
能向CPU提供相应的中断向量,从而能迅速地转至中断服务程序。
8259A有多种工作方式,可通过编程来进行选择。
此节也请参见[10 附录 芯片速查表\2 datasheet\8259a.pdf]。
1.8259A的结构
2.8259A的引脚
D0~D7
数据线
三态、双向
与DB的D0~D7相连
传递控制信号、状态信号、中断向量
IR0~IR7
中断请求输入信号
外设或者从片送入
触发方式:边沿触发、电平触发
读信号
输入
由CPU送入
低电平有效
有效时CPU读取8259A状态
写信号
输入
由CPU送入
低电平有效
有效时CPU向8259A写入控制字
INT
中断请求信号
输出
单片时由8259A输出给CPU
级联时,主片INT连接CPU的INTR,从片INT连接主片的Iri
中断响应信号
输入
CPU的中断应答信号输出给8259A
片选信号
输入
低电平有效
有效时CPU才能访问8259A
A0
端口地址选择信号
输入
每片8259A有2个端口地址:
A0=1
A0=0
CAS0~CAS2
级联信号
主、从片的连接线
主片:输出
从片:输入
从片/缓冲器允许信号,双向双功能信号
缓冲方式:输出,控制收发器的接收或发送;
非缓冲方式:输入,主片该引脚=1 ,从片该引脚=0
3.8259A中断处理过程
当有一条或若干条中断请求线(IR7~IR0)变为高电平,则中断请求寄存器IRR的相应位置位。
若中断请求线中至少有一条是中断允许的(中断屏蔽寄存器相应位开放,且请求中断的级别高于当前正在服务的中断或未处于中断服务程序中),则8259A通过INT引脚向CPU的INTR引脚发出中断请求信号。
CPU在当前指令执行完后,若检测到中断请求信号,且处于开中断状态(IF=1)则会暂停执行下一条指令,进入中断响应总线周期,发送两个INTA 信号给8259A作为响应。
8259A在接受到来自CPU的第一个INTA信号后,使中断源中优先级最高的ISR位置位,而相应的IRR位被复位。在该周期中,8259A不向数据总线送任何内容。
在第二个INTA脉冲期间,8259A向CPU发出中断类型号(8位的二进制数,其中高位T7~T3是8259A初始化时设置的,而低3位是8259A自动插入的), CPU获得后,将此向量乘以4,在中断向量表中找到相应的中断服务程序入口地址。
中断响应周期结束后,CPU就转而执行中断服务程序。采用AEOI方式时,在第二个INTA脉冲结束时,ISR位被复位。否则,在中断服务程序中,应在IRET指令加入相应的EOI指令,使ISR的相应位复位。
4.8259A的工作方式
(1)中断优先级管理方式
一般全嵌套方式
特殊全嵌套方式
优先级自动循环方式
优先级特殊循环方式
中断屏蔽方式
(2)结束中断的处理方式
非自动中断结束(EOI)方式
自动中断结束(AEOI)方式
(3)中断触发方式
电平触发方式
边沿触发方式
(4)连接系统总线方式
缓冲方式
非缓冲方式
(5)8259A的中断查询方式
当系统的中断源很多,超过64个时,8259A可工作在查询方式。
有两种情况需要用软件查询方法来确认中断源:
一、8259A的INT引脚没连接到CPU的INTR引脚
二、CPU正处于关中断(IF=0),所以CPU不能响应从8259A来的中断请求。
实现方法:
先向8259A发查询命令( OCW3 中P置1)
执行一条读指令(IN),读出专门的“中断状态字”,由CPU读入AL。
例
已知在PC机中8259A的端口地址为20H和21H,读查询字(读出最高级别的中断请求IRi)的程序段如下:
MOV AL,0CH ;OCW3=0CH
OUT 20H,AL ;OCW3写入8259A,P←1
IN AL,20H ;读8259A的20H端口,得到查询字内容
5.8259A的编程与应用
8259A的编程包含两个部分:
初始化编程
在中断系统进入正常运行之前,通过设置初始化命令字(ICWl~ICW4)来预置工作方式;按固定的先后次序写入。
工作方式编程
通过对设置操作命令字(OCW1~OCW3)来实现8259A运行中的操作控制;
可在8259A被初始化之后的任何时候使用。可单独使用。
此节请也参见[10 附录 芯片速查表\1 速查表.docx]。
从编程角度看,8259A内部有2组寄存器:
初始化命令字寄存器
操作命令字寄存器
8259A对寄存器的访问通过端口
每一个8259A芯片都有两个端口地址:
在下面命令字格式图示中,左边都有一个上方标“A0”的方框:
框内为“0”,表示该命令字应写入8259A的A0为“0”的端口;
框内为“1”,表示该命令字应写入8259A的A0为“1”的端口。
说明:
ICW按固定的顺序写入;
ICW1、 ICW2必须设置;
ICW3在级联时设置;
ICW4在需要设置某些工作方式时使用;
级联时,每一片8259A都要分别初始化。
初始化命令字ICW1
D3(LTIM)表示IRi的中断请求起作用的触发方式。
D2(ADI)设置调用时间间隔,80x86CPU模式下不用。
D1(SNGL)表示系统是使用单片8259A还是多片8259A。
D0(ICW4)表示是否需要ICW4。
D5~D7 80x86 CPU系统中未用,通常设置为0。
初始化命令字ICW2
D7~D3为中断类型号的高5位;
D2~D0任意值,一般为000;
初始化命令字ICW3
下图是9259A作为主片。
下图是9259A作为从片。
D7~D3为00000;
D2~D0为IR0~IR7三位编码值;表示从片的INT输出与主片8259A中的哪一个IRi相连接。
初始化命令字ICW4
D0(μPM):D0=1为80x86系统,D0=0为8080/8085系统;
D7~D5为未定义,一般为000。
操作命令字OCW1(屏蔽操作命令字)
操作命令字OCW2
D7(R):中断排队是否循环的标志。R=1为优先级循环方式,R=0为固定优先级方式。
D6(SL):选择L2L1L0编码是否有效的标志。若SL=1,则L2L1L0编码有效,若SL=0,则无效。
D5(EOI):中断结束命令。D5=1时,则使现行的ISR中最高优先级的相应位复位(一般中断结束方式),或由L2L1L0指定的ISR相应位复位(特殊中断结束方式)。
D2~D0(L2~L0):对应8个二进制编码,只有在SL位为“1”时才有效。有两个作用:
在特殊EOI命令中,表示清除的是ISR的哪一位
优先权特殊循环方式中,表示系统中最低优先级编码
操作命令字OCW3