1 / 82

§7.3 可编程中断控制器 8259A

§7.3 可编程中断控制器 8259A. 一、引言 二、 8259A 的引脚、编程结构和工作过程 三、 8259A 的编程 1. 设置中断屏蔽字 2. 发中断结束命令 EOI 四、 8259A 在 IBM PC/XT 系统中的应用. 中断申请. 网络. 接口 1. 8086 CPU. 中断申请 管理接口. 打印机. 接口 4. IF. INT. INTR. 硬盘. 软盘. 接口 2. 接口 3. 一、引言. 中断申请管理接口的主要功能 :. 1. 向 CPU 的引脚 INTR 发中断申请信号 当有多个外设同时发出中断请求时,

Télécharger la présentation

§7.3 可编程中断控制器 8259A

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. §7.3 可编程中断控制器8259A 一、引言 二、8259A的引脚、编程结构和工作过程 三、8259A的编程 • 1. 设置中断屏蔽字 • 2. 发中断结束命令EOI 四、8259A在IBM PC/XT系统中的应用

  2. 中断申请 网络 接口1 8086 CPU 中断申请 管理接口 打印机 接口4 IF INT INTR 硬盘 软盘 接口2 接口3 一、引言

  3. 中断申请管理接口的主要功能: 1.向CPU的引脚INTR发中断申请信号 • 当有多个外设同时发出中断请求时, • 能按照一定的优先级顺序,向CPU发出中断申请, • 使CPU能优先响应优先级最高的外部设备的中断申请。 2.送中断类型号 • 在CPU中断响应周期,针对不同外设的中断请求, • 向CPU传送不同的中断类型号, • 使CPU执行相应的中断子程。 在IBM PC机由8259A可编程中断控制器(PIC)来完成。

  4. 二、 8259A的引脚、编程结构和工作过程 1.8259A的引脚2.8259A的编程结构3.8259A的工作过程

  5. 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 定时器

  6. 级联工作方式 1、单片8259A可支持8个中断源; 2、采用多片8259A级连,可最多支持64个中断源。n片8259A可支持7n+1个中断源; 3、级连时只能有一片8259A为主片,其余的均为从属片; 4、涉及到的8259A引脚包括: • CAS0-CAS2 • SP/EN • IRi • INT 6

  7. SP/EN:双功能的双向信号线,分别表示主从定义/缓冲器方向这两种工种方式。SP/EN:双功能的双向信号线,分别表示主从定义/缓冲器方向这两种工种方式。 • 在主从方式中,它作为输入信号线SP,由该信号的高低电平来区分“主”或“从”8259A:若SP=1,则本片为“主”8259A;若SP=0,则为“从”8259A。只有一个8259A时,它应接高电平。 • 在缓冲方式时,则它作为输出信号线EN,用于控制缓冲器的传送方向:若EN=1,则CPU将把数据写入8259A;若EN=0,将把数据由8259A读出至CPU。 7

  8. 级连电路连接方法 8

  9. 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

  10. 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方式控制 控制部分

  11. (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工作情况

  12. 初始化命令字 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

  13. 8259A的控制命令字 • 初始化8259A必须从ICW1开始 • 写ICW1意味着重新初始化8259A • 写入ICW1后,8259A的状态如下: • 清除ISR和IMR(全0); • 将中断优先级设成初始状态:IR0最高,IR7最低; • 设定为一般屏蔽方式; • 采用非自动中断结束方式; • 状态读出逻辑预置为读IRR。 13

  14. D7 D6 D5 D4 D3 D2 D1 D0 A0 1 T7 T6 T5 T4 T3 X X X 自动填入 中断类型码高5位 在中断响应的第二个总线周期,通过数据线发送中断类型码给CPU 返回 14

  15. 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

  16. 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

  17. ICW3——级连控制字(续) ICW3必须与主从片的连接关系一致: 例如,主片的IR4与从片的INT线连接,则主片的ICW3=10H,从片的ICW3=04H。 中断响应时,主片通过级连线CAS2-CAS0送出被允许中断的从片标识码,各从片用自己的ICW3与CAS2-CAS0比较,二者一致的从片才可发送中断向量码。 17

  18. 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

  19. 例 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

  20. 8259A的操作命令字OCW • OCW用于设置8259的工作状态 • 在初始化后写入 • OCW的写入顺序可任意 • 写入地址要求: • OCW1必须写入奇地址端口(A0=1) • OCW2,OCW3必须写入偶地址端口(A0=0) 20

  21. 操作命令字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

  22. 操作命令字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

  23. 操作命令字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

  24. OCW3(续) • 查询方式允许8259A不工作于中断方式,而是以查询方式工作。 • CPU先写一个D2=1(查询方式)的OCW3,再对同一地址读入,即可得到如下状态字节: I x x x x R2 R1 R0 I=1表示有中断请求,中断请求号为R2-R0 此查询步骤可反复执行,以响应多个同时发生 的中断。 • 读IRR/ISR:写入此命令后,随后再对同一地址读,即可得到IRR或ISR的内容。 24

  25. 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

  26. 3. 8259A 的工作过程 • 分两步: • (1)处理外设中断申请,决定是否向CPU发中断申请信号。 • (2)若发中断申请信号,且CPU响应,则在CPU中断响应周期送出中断类型号。

  27. (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 发中断请求信号。

  28. ① 中断申请寄存器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

  29. ② 中断屏蔽寄存器 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

  30. ③当前中断服务寄存器 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

  31. ④ 优先级裁决器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

  32. (2) 若发中断申请信号,且CPU响应, 则在CPU中断响应周期送出中断类型号 • CPU接收到 INTR上的中断申请信号后: • 如果 IF 标志为0,则CPU不响应此中断申请信号, 即中断申请被IF屏蔽。 • 如果 IF 标志为1, 则处理完当前的指令后, 进入中断响应周期 • 通过 INTA 引脚发出两个负脉冲信号, • 从数据总线上获取中断类型号, • 进入中断响应的过程。

  33. T1 T4 T1 T4 T2 T3 T2 T3 CLK INTA AD7~AD0 第 一 个 第 二 个 向量类型 中断响应周期 中断响应周期 8086CPU中断响应周期时序

  34. 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

  35. 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响应中断的过程, 执行中断子程,处理中断源申请的功能。

  36. CPU响应中断过程: • ①取中断类型号N • ②当前PSW的内容入栈 • ③ 清IF、TF标志为0 • ④当前CS的内容入栈 • ⑤ 当前IP的内容入栈 • ⑥取内存单元( 0 : N ×4 )字内容送IP取中断子程 • ⑦取内存单元( 0 : N ×4 + 2 )字内容送CS入口地址 • 此时CS:IP指向中断程序的入口,开始执行中断程序。 保存现场 执行完中断子程中最后一条指令IRET后, 返回被中断处,继续执行被中断的程序。

  37. 三、8259A的编程 1. 8259A的编程 2. 8259A的编程方法 (1) 设置中断屏蔽字 (2) 发中断结束命令EOI

  38. 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方式控制 控制部分

  39. 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 控制部分

  40. 用ICW1设置 是否级联 请求格式信号 是否需要设置ICW4 8259初始化流程 用ICW2设置中断类型码 N 是否为级联方式 Y Y 本片设为主片吗? N 设置ICW3,各位 对应IR0~IR7 设置ICW3,高5位 为0,低3位为标识码 需要用到ICW4吗? N Y 用ICW4设置 是否为特殊全嵌套方式 是否为缓冲方式 是否为自动结束中断方式 是否为16位系统 结束,进行中断服务

  41. 2. 8259A的编程方法 • 8259A有多种工作方式,这些工作方式均可编程选择,使用相当灵活。 • (1)通过中断屏蔽寄存器IMR的读写,设置中断屏蔽字 • (2)通过OCW2操作命令寄存器,发中断结束EOI命令 要求掌握:

  42. 对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中送。

  43. (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

  44. 例 已知 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

  45. 设置完成后的结果: 总线 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

  46. (2) 发中断结束命令 EOI • 由 8259A 的工作过程可知: • ISR中的内容是优先级裁决器进行裁决的重要依据 CPU响应某级中断后,8259A自动将ISR的对应位置1,如果CPU已执行完中断子程,而ISR中的对应位仍为1, 8259A的优先级裁决器仍会据ISR的内容做裁决, 从而会屏蔽同级或低级的中断申请。 • 在中断响应后,对 ISR中相应位的清0很重要, 它是8259A认为中断结束的标志。

  47. 总线 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

  48. 20H 0 0 1 0 0 0 0 0 EOI 特征位,表示对OCW2操作 清 ISR 内容的方法有两种: • 一、 初始化8259A时,设置8259A工作方式为自动清0方式, 则在CPU响应中断后,硬件自动将ISR的对应位清0。 • 二、 初始化8259A时,设置8259A工作方式为非自动清0方式, 需在中断子程中,通过软件方式清0。 • 方法是:通过往OCW2写入20H实现,即由偶地址端口写入:

  49. 例 已知 IBM PC系统中, 8259A的偶地址端口地址为 20H; BIOS 初始化 8259A 时,设置 8259A 工作方式为非自动清 0 方式。 编程在中断子程 IRET 返回前,发中断结束命令EOI • intsub PROC • 、、、 • 、、、 • 、、、 • MOV AL, 20H ;将中断结束命令字20H 送AL • OUT 20H, AL ;写入OCW2中 • IRET ;中断返回 • intsub ENDP

  50. 中断服务子程序设计 设计中断子程序的步骤: (1) 选择一个中断向量; (2) 将中断子程序的入口地址置入中断向量表的相应表项中; (3) 使中断服务子程序驻留内存; 举例 50

More Related