830 likes | 1.22k Views
§7.3 可编程中断控制器 8259A. 一、引言 二、 8259A 的引脚、编程结构和工作过程 三、 8259A 的编程 1. 设置中断屏蔽字 2. 发中断结束命令 EOI 四、 8259A 在 IBM PC/XT 系统中的应用. 中断申请. 网络. 接口 1. 8086 CPU. 中断申请 管理接口. 打印机. 接口 4. IF. INT. INTR. 硬盘. 软盘. 接口 2. 接口 3. 一、引言. 中断申请管理接口的主要功能 :. 1. 向 CPU 的引脚 INTR 发中断申请信号 当有多个外设同时发出中断请求时,
E N D
§7.3 可编程中断控制器8259A 一、引言 二、8259A的引脚、编程结构和工作过程 三、8259A的编程 • 1. 设置中断屏蔽字 • 2. 发中断结束命令EOI 四、8259A在IBM PC/XT系统中的应用
中断申请 网络 接口1 8086 CPU 中断申请 管理接口 打印机 接口4 IF INT INTR 硬盘 软盘 接口2 接口3 一、引言
中断申请管理接口的主要功能: 1.向CPU的引脚INTR发中断申请信号 • 当有多个外设同时发出中断请求时, • 能按照一定的优先级顺序,向CPU发出中断申请, • 使CPU能优先响应优先级最高的外部设备的中断申请。 2.送中断类型号 • 在CPU中断响应周期,针对不同外设的中断请求, • 向CPU传送不同的中断类型号, • 使CPU执行相应的中断子程。 在IBM PC机由8259A可编程中断控制器(PIC)来完成。
二、 8259A的引脚、编程结构和工作过程 1.8259A的引脚2.8259A的编程结构3.8259A的工作过程
1.8259A的引脚双列直插式芯片,28个引脚 8259A Vcc + 5V 总线 17.2Hz IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 方 波 数 据 线 D0 ~ D7 D0 ~ D7 键 盘 保 留 串 口2 IOR RD 串 口1 IOW WR 硬 盘 A0 A0 软 盘 打印机 片 选 译 码 CS A5 ~ A9 20~3FH SP/EN CA0 CA1 CA2 GND 用于多片 8259A 级连情况 INTA INTA INT INTR 定时器
级联工作方式 1、单片8259A可支持8个中断源; 2、采用多片8259A级连,可最多支持64个中断源。n片8259A可支持7n+1个中断源; 3、级连时只能有一片8259A为主片,其余的均为从属片; 4、涉及到的8259A引脚包括: • CAS0-CAS2 • SP/EN • IRi • INT 6
SP/EN:双功能的双向信号线,分别表示主从定义/缓冲器方向这两种工种方式。SP/EN:双功能的双向信号线,分别表示主从定义/缓冲器方向这两种工种方式。 • 在主从方式中,它作为输入信号线SP,由该信号的高低电平来区分“主”或“从”8259A:若SP=1,则本片为“主”8259A;若SP=0,则为“从”8259A。只有一个8259A时,它应接高电平。 • 在缓冲方式时,则它作为输出信号线EN,用于控制缓冲器的传送方向:若EN=1,则CPU将把数据写入8259A;若EN=0,将把数据由8259A读出至CPU。 7
级连电路连接方法 8
2.8259A的编程结构 处理部分 总线 IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ISR 当前 中断 服务 寄存器 IRR 中断 申请 寄存器 数 据 线 D0 ~ D7 D0 ~ D7 PR 优先级 裁决器 A0 A0 片 选 译 码 A5 ~ A9 CS ICW1芯片控制 A0 A0 1 0 0 1 0 1 0 0 0 1 OCW1中断屏蔽寄存器 IMR ICW2中断类型号 RD SP/EN CA0 CA1 CA2 IOR WR 0 1 IOW OCW2优先级设置、发EOI ICW3主从片连接关系 INTA INTA VCC GND 0 1 0 0 1 0 × 1 I3 I4 INT OCW3特殊屏蔽,查询方式设置 ICW4方式控制 INTR 控制部分 1
8259A的编程结构 8259A中断控制器 处理部分 IRR 中断申请 寄存器 8259A内部有9个 可读写的寄存器 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ISR 当前 中断 服务 寄存器 • 4个初始化命令寄存器 • ICW1、ICW2 • ICW3、ICW4 • 3个操作命令寄存器 • OCW1(IMR) • OCW2、OCW3 • 当前中断服务寄存器 ISR • 中断申请寄存器 IRR PR 优先级 裁决器 ICW1芯片控制 OCW1 1 0 0 1 0 1 0 0 1 × I3 I4 中断屏蔽寄存器 IMR ICW2中断类型号 0 0 OCW2 ICW3主从片关系 0 1 OCW3 ICW4方式控制 控制部分
(1) 初始化命令字(ICW1- ICW4) 决定8259A的工作方式 • 通常是在计算机系统启动时在初始程序设置, • 一旦设定,一般在系统工作过程不再改变。 例 开机后,BIOS将8259A初始化为: ① IR0~IR7中断申请信号为上升沿触发方式; ②IR0~IR7对应的中断类型号分别为08H~0FH; ③ 优先级IR0最高, IR7最低; (2) 操作命令字(OCW1,OCW2,OCW3) • 在应用程序中设定,动态地控制CPU处理中断的过程 (3) ISR和IRR存放当前8259A的状态 通过读取 ISR 和 IRR 的内容,可了解当前8259A工作情况
初始化命令字 ICW1~ICW4 A0 D7 D6 D5 D4 D3 D2 D1 D0 0 A7 A6 A5 1 LTIM ADI SNGL IC4 0:不需要ICW4 1:需要ICW4 8086不用 0:边沿检测 1:电平检测 0:级联使用 1:单独使用 8086/8088不用 ICW1 初始化命令字在8259正常工作前设置。它决定8259的工作方式和环境。返回 12
8259A的控制命令字 • 初始化8259A必须从ICW1开始 • 写ICW1意味着重新初始化8259A • 写入ICW1后,8259A的状态如下: • 清除ISR和IMR(全0); • 将中断优先级设成初始状态:IR0最高,IR7最低; • 设定为一般屏蔽方式; • 采用非自动中断结束方式; • 状态读出逻辑预置为读IRR。 13
D7 D6 D5 D4 D3 D2 D1 D0 A0 1 T7 T6 T5 T4 T3 X X X 自动填入 中断类型码高5位 在中断响应的第二个总线周期,通过数据线发送中断类型码给CPU 返回 14
ICW2——中断向量码 A0 D7 D6 D5 D4 D3 D2 D1 D01 T7 T6 T5 T4 T3xxx • T7~T3: 中断向量码的高5位 • T2~T0: 最低3位为中断源的序号IRn • 000~111分别对应IR0~IR7 • 由8259A根据中断源的序号自动填入 例如: 若ICW2命令字为48H,则IR0的中断向量码为48H,IR7的中断向量码为4FH,等等。 15
D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0 A0 A0 1 1 S7 S6 S5 S4 S3 S2 S1 S0 0 0 0 0 0 ID2 ID1 ID0 主8259的级联标志 1:相应的IR上有从8259 0:相应的IR上无从8259 ID2~ID0:从8259的IR识别码 主片 从片 级连初始化必须与硬件连接一致 16
ICW3——级连控制字(续) ICW3必须与主从片的连接关系一致: 例如,主片的IR4与从片的INT线连接,则主片的ICW3=10H,从片的ICW3=04H。 中断响应时,主片通过级连线CAS2-CAS0送出被允许中断的从片标识码,各从片用自己的ICW3与CAS2-CAS0比较,二者一致的从片才可发送中断向量码。 17
ICW4 D7 D6 D5 D4 D3 D2 D1 D0 A0 1 0 0 0 SFNM BUF M/S AEOI µPM 0:一般的全嵌套方式 1:特殊的全嵌套方式 0:8085方式 1:86/88方式 0×:非缓冲方式 10:缓冲方式/从片 11:缓冲方式/主片 0:非自动EOI 1:自动EOI 返回 初始化命令字ICW1~ICW4是以写入的顺序来区分的 18
例 8259初始化 单片8259应用于8086系统,IR0的中断类型码为18H,电平触发方式,全嵌套非缓冲方式,自动结束中断,要求初始化ICW4。端口地址为0A0H开始,初始化程序为: MOV AL,13H ICW1初始化 OUT 0A0H,AL ;写入ICW1 MOV AL,18H ICW2 初始化 OUT 0A2H,AL ;写入ICW2 MOV AL,03H ICW4初始化 OUT 0A2H,AL ;写入ICW4 19
8259A的操作命令字OCW • OCW用于设置8259的工作状态 • 在初始化后写入 • OCW的写入顺序可任意 • 写入地址要求: • OCW1必须写入奇地址端口(A0=1) • OCW2,OCW3必须写入偶地址端口(A0=0) 20
操作命令字OCW D7 D6 D5 D4 D3 D2 D1 D0 A0 1 M7 M6 M5 M4 M3 M2 M1 M0 0:清中断屏蔽位 1:置中断屏蔽位 OCW1 Mi=1 中断请求线IRi被屏蔽(不允许中断) =0 允许该IRi中断 OCW1将写入IMR寄存器。 A0=1时读OCW1可读出设置的IMR内容。 21
操作命令字OCW D7 D6 D5 D4 D3 D2 D1 D0 A0 0 R SL EOI 0 0 L2 L1 L0 0 0 0 …… 1 1 1 对应IRi的编码 0 0 1 常规EOI 0 1 1 特殊EOI,由L2~L0指定结束IRi 1 0 1 自动优先权循环,常规EOI 1 0 0 自动优先权循环 0 0 0 取消自动优先权循环(固定优先权) 1 1 1 特殊EOI,由L2~L0指定特殊优先权循环 1 1 0 特殊优先权循环,由L2~L0设定最低优先级 0 1 0 无操作 OCW2 R=1:循环优先权 R=0:固定优先权 SL=1:L2L1L0指定IR位 SL=0:L2L1L0无效 EOI=1:中断结束 22
操作命令字OCW D7 D6 D5 D4 D3 D2 D1 D0 A0 0 - ESMM SMM 0 1 P RR RIS 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 无意义 清除特殊屏蔽方式 设定特殊屏蔽方式 无意义 读IRR 读ISR 0:非查询方式 1:查询方式 OCW3 8259的工作方式编程并没有固定顺序,各命令字之间用地址信号A0及特征位加以区分。 23
OCW3(续) • 查询方式允许8259A不工作于中断方式,而是以查询方式工作。 • CPU先写一个D2=1(查询方式)的OCW3,再对同一地址读入,即可得到如下状态字节: I x x x x R2 R1 R0 I=1表示有中断请求,中断请求号为R2-R0 此查询步骤可反复执行,以响应多个同时发生 的中断。 • 读IRR/ISR:写入此命令后,随后再对同一地址读,即可得到IRR或ISR的内容。 24
8259的初始化编程 =00010111B =0000 1000B =0010 0000B =01001011B =0000 0001B =0000 0100B CLI ;关中断 MOV AL,17H;ICW1:单片,边缘触发,需要ICW4 OUT 20H,AL MOV AL,08H ;ICW2:中断类型码的D7~D3位为00001 OUT 21H,AL MOV AL,01H;ICW4:非自动的EOI,非缓冲,80X86方式 OUT 21H,AL MOV AL,04H ;OCW1:只屏蔽IRQ2(保留中断) OUT 21H,AL MOV AL,20H ;OCW2:固定优先权,一般的EOI OUT 20H,AL MOV AL,4BH;OCW3:正常屏蔽,非查询方式,可读ISR OUT 20H,AL STI ;开中断 25
3. 8259A 的工作过程 • 分两步: • (1)处理外设中断申请,决定是否向CPU发中断申请信号。 • (2)若发中断申请信号,且CPU响应,则在CPU中断响应周期送出中断类型号。
(1) 处理外设中断申请,决定是否向CPU发中断申请信号 ①中断申请寄存器IRR 锁存外部的中断申请。 • 若 IR0~IR7 引脚上有中断申请,则将 IRR 相应位置1 ②中断屏蔽寄存器 IMR 决定 IRR 中的中断申请 是否进入优先级裁决器 PR。 • IMR对应位为0,允许中断申请进入优先级裁决器, • 为 1,不允许进入,中断申请被IMR屏蔽。 ③当前中断服务寄存器 ISR记录CPU正在响应的中断。 • ISR中的某位为1,表示CPU正在响应此级中断, • ISR中的某位为 0,表示CPU没有或已响应完此级中断, ④优先级裁决器PR 据新进入的中断申请和 ISR的内容, 决定是否发中断申请信号。 • 如果进入的中断申请比 ISR 中记录的中断优先级高, • 则通过 8259A 的 INT 引脚向 CPU发出中断请求信号; • 如果进入的中断申请不比 ISR 中记录的中断优先级高, • 同级或低级,则不向 CPU 发中断请求信号。
① 中断申请寄存器IRR 锁存外部的中断申请。 • 若 IR0~IR7 引脚上有中断申请,则将 IRR 相应位置1 总线 ISR 当前 中断 服务 寄存器 IRR 中断 申请 寄存器 IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 数 据 线 D0 ~ D7 D0 ~ D7 PR 优先级 裁决器 A0 A0 片 选 译 码 A5 ~ A9 CS 1 0 0 1 0 1 0 0 ICW1芯片控制 RD OCW1中断屏蔽寄存器 IMR ICW2中断类型号 IOR WR ICW3主从片关系 IOW OCW2优先级、发EOI INTA ICW4方式控制 INTA OCW3 特殊屏蔽设置 INT INTR 0 0
② 中断屏蔽寄存器 IMR 决定 IRR 中的中断申请 是否进入优先级裁决器 PR。 • IMR对应位为0,允许中断申请进入优先级裁决器, • 为 1,不允许进入,中断申请被IMR屏蔽。 总线 ISR 当前 中断 服务 寄存器 IRR 中断 申请 寄存器 IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 数 据 线 D0 ~ D7 D0 ~ D7 PR 优先级 裁决器 A0 A0 片 选 译 码 1 0 0 1 0 1 0 0 A5 ~ A9 CS ICW1芯片控制 RD OCW1中断屏蔽寄存器 IMR ICW2中断类型号 IOR WR ICW3主从片关系 IOW OCW2优先级、发EOI INTA 0 0 ICW4方式控制 INTA OCW3 特殊屏蔽设置 INT INTR
③当前中断服务寄存器 ISR记录CPU正在响应的中断。 • ISR中的某位为1,表示CPU正在响应此级中断, • 即正在执行此中断源的中断子程; • ISR中的某位为 0,表示CPU没有或已响应完此级中断, • 即不在执行此中断源的中断子程 总线 ISR 当前 中断 服务 寄存器 IRR 中断 申请 寄存器 IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 数 据 线 D0 ~ D7 D0 ~ D7 PR 优先级 裁决器 A0 A0 片 选 译 码 1 0 0 1 0 1 0 0 A5 ~ A9 CS ICW1芯片控制 RD OCW1中断屏蔽寄存器 IMR ICW2中断类型号 IOR WR ICW3主从片关系 IOW OCW2优先级、发EOI 0 0 INTA ICW4方式控制 INTA OCW3 特殊屏蔽设置 INT INTR
④ 优先级裁决器PR据新进入的中断申请和 ISR的内容, 决定是否发中断申请信号。 • 如果进入的中断申请比 ISR 中记录的中断优先级高, • 则通过 8259A 的 INT 引脚向 CPU发出中断请求信号; • 如果进入的中断申请不比 ISR 中记录的中断优先级高,同级或低级, 则不向 CPU 发中断请求信号。 总线 ISR 当前 中断 服务 寄存器 IRR 中断 申请 寄存器 IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 数 据 线 D0 ~ D7 D0 ~ D7 PR 优先级 裁决器 A0 A0 1 0 0 1 0 1 0 0 片 选 译 码 A5 ~ A9 CS ICW1芯片控制 RD OCW1中断屏蔽寄存器 IMR ICW2中断类型号 IOR 0 0 WR ICW3主从片关系 IOW OCW2优先级、发EOI INTA ICW4方式控制 INTA OCW3 特殊屏蔽设置 INT INTR
(2) 若发中断申请信号,且CPU响应, 则在CPU中断响应周期送出中断类型号 • CPU接收到 INTR上的中断申请信号后: • 如果 IF 标志为0,则CPU不响应此中断申请信号, 即中断申请被IF屏蔽。 • 如果 IF 标志为1, 则处理完当前的指令后, 进入中断响应周期 • 通过 INTA 引脚发出两个负脉冲信号, • 从数据总线上获取中断类型号, • 进入中断响应的过程。
T1 T4 T1 T4 T2 T3 T2 T3 CLK INTA AD7~AD0 第 一 个 第 二 个 向量类型 中断响应周期 中断响应周期 8086CPU中断响应周期时序
0 1 1 0 0 1 0 1 0 0 0 0 8259A在接收到第一个INTA中断响应信号后: ① 将 ISR 中相应位置1, • 表示 CPU 响应此级中断,执行此中断源的中断子程。 ②把 IRR中对应的位清0,清除IRR中锁存的中断申请信号。 总线 ISR 当前 中断 服务 寄存器 IRR 中断 申请 寄存器 IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 数 据 线 D0 ~ D7 D0 ~ D7 PR 优先级 裁决器 A0 A0 片 选 译 码 A5 ~ A9 CS ICW1芯片控制 RD OCW1中断屏蔽寄存器 IMR ICW2中断类型号 IOR WR ICW3主从片关系 IOW OCW2优先级、发EOI INTA ICW4方式控制 INTA OCW3 特殊屏蔽设置 INT INTR
0 总线 ISR 当前 中断 服务 寄存器 IRR 中断 申请 寄存器 IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 数 据 线 1 D0 ~ D7 D0 ~ D7 8259A在接收到第二个INTA中断响应信号后: PR 优先级 裁决器 A0 A0 1 0 0 1 0 1 0 0 片 选 译 码 A5 ~ A9 CS ICW1芯片控制 RD OCW1中断屏蔽寄存器 IMR ICW2中断类型号 IOR 0 0 WR ICW3主从片关系 IOW OCW2优先级、发EOI INTA ICW4方式控制 INTA OCW3 特殊屏蔽设置 INT INTR ①通过数据线,将被响应申请的中断类型号送给CPU。 • 类型号由ICW2提供,在初始化8259A时已设定好。 ② CPU获得中断类型号后,进入CPU响应中断的过程, 执行中断子程,处理中断源申请的功能。
CPU响应中断过程: • ①取中断类型号N • ②当前PSW的内容入栈 • ③ 清IF、TF标志为0 • ④当前CS的内容入栈 • ⑤ 当前IP的内容入栈 • ⑥取内存单元( 0 : N ×4 )字内容送IP取中断子程 • ⑦取内存单元( 0 : N ×4 + 2 )字内容送CS入口地址 • 此时CS:IP指向中断程序的入口,开始执行中断程序。 保存现场 执行完中断子程中最后一条指令IRET后, 返回被中断处,继续执行被中断的程序。
三、8259A的编程 1. 8259A的编程 2. 8259A的编程方法 (1) 设置中断屏蔽字 (2) 发中断结束命令EOI
1. 8259A的编程 8259A中断控制器 处理部分 IRR 中断申请 寄存器 8259A内部有9个 可读写的寄存器 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ISR 当前 中断 服务 寄存器 • 4个初始化命令寄存器 • ICW1、ICW2 • ICW3、ICW4 • 3个操作命令寄存器 • OCW1(IMR) • OCW2、OCW3 • 当前中断服务寄存器 ISR • 中断申请寄存器 IRR PR 优先级 裁决器 ICW1芯片控制 OCW1 1 0 0 1 0 1 0 0 1 × I3 I4 中断屏蔽寄存器 IMR ICW2中断类型号 0 0 OCW2 ICW3主从片关系 0 1 OCW3 ICW4方式控制 控制部分
A0=0 偶地址端口 A0=1 奇地址端口 8 A0 • 对9个寄存器的读写 • 均通过这两个端口实现 • 写入数据的特征位 • 写入的先后顺序 • 区分是对哪个寄存器 • 进行操作 CS OCW1 1 0 0 1 0 1 0 0 根据 RD 中断屏蔽寄存器 0 0 WR OCW2 0 1 1 × I3 I4 OCW3 8259A中断控制器 8259A有两个I/O端口地址 处理部分 IRR 中断申请 寄存器 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ISR 当前 中断 服务 寄存器 D0 ~ D7 PR 优先级 裁决器 A0 A0 ICW1芯片控制 1 0 ICW2中断类型号 0 1 ICW3主从片关系 0 1 ICW4方式控制 1 控制部分
用ICW1设置 是否级联 请求格式信号 是否需要设置ICW4 8259初始化流程 用ICW2设置中断类型码 N 是否为级联方式 Y Y 本片设为主片吗? N 设置ICW3,各位 对应IR0~IR7 设置ICW3,高5位 为0,低3位为标识码 需要用到ICW4吗? N Y 用ICW4设置 是否为特殊全嵌套方式 是否为缓冲方式 是否为自动结束中断方式 是否为16位系统 结束,进行中断服务
2. 8259A的编程方法 • 8259A有多种工作方式,这些工作方式均可编程选择,使用相当灵活。 • (1)通过中断屏蔽寄存器IMR的读写,设置中断屏蔽字 • (2)通过OCW2操作命令寄存器,发中断结束EOI命令 要求掌握:
对8259的端口寻址及其基本操作(读/写基本操作)对8259的端口寻址及其基本操作(读/写基本操作) PIC1 PIC2 CS A0 WR RD 输入操作(RD) 20H 21H 0A0H 0A1H 0 0 1 0 0 1 1 0 IRR ISR 查询字(OCW3) IMR(OCW1) CPU DB7-0 输出操作(WR) 20H 21H 0A0H 0A1H 0 0 0 0 0 1 0 0 0 1 0 1 0 0 1 X 0 1 0 1 X X 0 1 OCW2 CPU写 OCW3 ICW1 写(IMR).OCW1.ICW2.3.4 DB7-0 注意:8259只有两个端口,由A0一位确定: 1:奇数口 0:偶数口 由奇/偶数端口及控制字中的某些特定 位来确定命令字往那个R中送。
(1)设置中断屏蔽字 • 通过往奇地址端口写入IMR内容实现 对应位为0,允许该级中断申请进入 对应位为1,禁止该级中断申请进入 总线 ISR 当前 中断 服务 寄存器 IRR 中断 申请 寄存器 IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 数 据 线 D0 ~ D7 D0 ~ D7 PR 优先级 裁决器 A0 A0 片 选 译 码 1 0 0 1 0 1 0 0 A5 ~ A9 CS ICW1芯片控制 RD OCW1中断屏蔽寄存器 IMR ICW2中断类型号 IOR WR ICW3主从片关系 IOW OCW2优先级、发EOI INTA 0 0 ICW4方式控制 INTA OCW3 特殊屏蔽设置 INT INTR
例 已知 IBM PC/XT系统中 • 8259A的奇地址端口地址为21H • 新增允许 IR2 的中断申请 • IN AL, 21H ;读入原IMR的内容 • AND AL, 1111 1011B ;D2=0,允许IR2的中断申请 • OUT 21H, AL ;写入IMR • 禁止 IR4 的中断申请 • IN AL, 21H ;读入原IMR的内容 • OR AL, 0001 0000B ;D4=1,禁止IR4的中断申请 • OUT 21H, AL ;写入IMR
设置完成后的结果: 总线 ISR 当前 中断 服务 寄存器 IRR 中断 申请 寄存器 IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 数 据 线 D0 ~ D7 D0 ~ D7 PR 优先级 裁决器 A0 A0 片 选 译 码 1 0 0 1 0 0 0 0 A5 ~ A9 CS ICW1芯片控制 RD OCW1中断屏蔽寄存器 IMR ICW2中断类型号 IOR WR ICW3主从片关系 IOW OCW2优先级、发EOI INTA 0 0 ICW4方式控制 INTA OCW3 特殊屏蔽设置 INT INTR
(2) 发中断结束命令 EOI • 由 8259A 的工作过程可知: • ISR中的内容是优先级裁决器进行裁决的重要依据 CPU响应某级中断后,8259A自动将ISR的对应位置1,如果CPU已执行完中断子程,而ISR中的对应位仍为1, 8259A的优先级裁决器仍会据ISR的内容做裁决, 从而会屏蔽同级或低级的中断申请。 • 在中断响应后,对 ISR中相应位的清0很重要, 它是8259A认为中断结束的标志。
总线 ISR 当前 中断 服务 寄存器 IRR 中断 申请 寄存器 IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 1 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 数 据 线 D0 ~ D7 D0 ~ D7 PR 优先级 裁决器 A0 A0 片 选 译 码 1 0 0 1 0 1 0 0 A5 ~ A9 CS ICW1芯片控制 RD OCW1中断屏蔽寄存器 IMR ICW2中断类型号 IOR WR ICW3主从片关系 IOW OCW2优先级、发EOI 0 0 INTA ICW4方式控制 INTA OCW3 特殊屏蔽设置 INT INTR
20H 0 0 1 0 0 0 0 0 EOI 特征位,表示对OCW2操作 清 ISR 内容的方法有两种: • 一、 初始化8259A时,设置8259A工作方式为自动清0方式, 则在CPU响应中断后,硬件自动将ISR的对应位清0。 • 二、 初始化8259A时,设置8259A工作方式为非自动清0方式, 需在中断子程中,通过软件方式清0。 • 方法是:通过往OCW2写入20H实现,即由偶地址端口写入:
例 已知 IBM PC系统中, 8259A的偶地址端口地址为 20H; BIOS 初始化 8259A 时,设置 8259A 工作方式为非自动清 0 方式。 编程在中断子程 IRET 返回前,发中断结束命令EOI • intsub PROC • 、、、 • 、、、 • 、、、 • MOV AL, 20H ;将中断结束命令字20H 送AL • OUT 20H, AL ;写入OCW2中 • IRET ;中断返回 • intsub ENDP
中断服务子程序设计 设计中断子程序的步骤: (1) 选择一个中断向量; (2) 将中断子程序的入口地址置入中断向量表的相应表项中; (3) 使中断服务子程序驻留内存; 举例 50