Transcript A 0 =0
§7.3 可编程中断控制器8259A 一、引言 二、8259A的引脚、编程结构和工作过程 三、8259A的编程 1. 设置中断屏蔽字 2. 发中断结束命令EOI 四、8259A在IBM PC/XT系统中的应用 1 一、引言 中断申请 8086 CPU 中断申请 管理接口 IF INTR 接口1 网络 接口2 硬盘 接口3 软盘 接口4 打印机 INT 2 中断申请管理接口的主要功能: 1. 向CPU的引脚INTR发中断申请信号 当有多个外设同时发出中断请求时, 能按照一定的优先级顺序,向CPU发出中断申请, 使CPU能优先响应优先级最高的外部设备的中断申请。 2. 送中断类型号 在CPU中断响应周期,针对不同外设的中断请求, 向CPU传送不同的中断类型号, 使CPU执行相应的中断子程。 在IBM PC机由8259A可编程中断控制器(PIC)来完成。 3 二、 8259A的引脚、编程结构和工作过程 1. 8259A的引脚 2. 8259A的编程结构 3. 8259A的工作过程 4 双列直插式芯片,28个引脚 1. 8259A的引脚 8259A Vcc 总线 D0 ~ D7 IOR IOW 数据线 RD WR A0 A0 A5 ~ A9 INTA INTR D0 ~ D7 片 选 20~3FH 译 码 CS INTA INT IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 SP/EN CA0 CA1 CA2 + 5V 17.2Hz 定时器 方波 键盘 保留 串 口2 串 口1 硬盘 软盘 打印机 用于多片 8259A 级连情况 GND 5 级联工作方式 1、单片8259A可支持8个中断源; 2、采用多片8259A级连,可最多支持64个中断 源。n片8259A可支持7n+1个中断源; 3、级连时只能有一片8259A为主片,其余的均 为从属片; 4、涉及到的8259A引脚包括: CAS0-CAS2 SP/EN IRi INT 6 6 SP/EN:双功能的双向信号线,分别表示主从定 义/缓冲器方向这两种工种方式。 在主从方式中,它作为输入信号线SP,由该信号 的高低电平来区分“主”或“从” 8259A:若SP =1,则本片为“主”8259A;若SP=0,则为“从” 8259A。只有一个8259A时,它应接高电平。 在缓冲方式时,则它作为输出信号线EN,用于控 制缓冲器的传送方向:若EN=1,则CPU将把数据 写入8259A;若EN=0,将把数据由8259A读出至 CPU。 7 7 8 8 2.8259A的编程结构 处理部分 总线 D0 ~ D7 A0 A5 ~ A9 IOR IOW INTA INTR 数据线 A0 片 选 CS 译 码 RD D0 ~ D7 ISR 当前 中断 服务 寄存器 0 IRR 0 中断 0 申请 0 PR 寄存器 0 0 优先级 0 0 裁决器 0 0 0 0 0 0 0 0 ICW1 芯片控制 A0 1 × I3 I4 0 1 WR INT 0 0 0 OCW2 优先级设置、发EOI ICW3 主从片连接关系 INTA A0 1 0 0 1 0 1 0 0 1 OCW1 中断屏蔽寄存器 IMR ICW2 中断类型号 1 ICW4 方式控制 IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 0 1 0 SP/EN CA0 CA1 CA2 VCC OCW3特殊屏蔽,查询方式设置 1 控制部分 GND 9 8259A的编程结构 8259A内部有9个 可读写的寄存器 4个初始化命令寄存器 ICW1、ICW2 ICW3、ICW4 8259A中断控制器 处理部分 0 ISR 0 当前 0 中断 0 服务 0 寄存器 00 0 3个操作命令寄存器 ICW1 芯片控制 1 × I3 I4 OCW1(IMR) ICW2 中断类型号 OCW2、OCW3 当前中断服务寄存器 ISR 中断申请寄存器 IRR IRR 0 中断申请 0 寄存器 0 0 0 0 0 0 PR 优先级 裁决器 OCW1 1 0 0 1 0 1 0 0 中断屏蔽寄存器 IMR 0 0 ICW3 主从片关系 OCW2 0 1 ICW4 方式控制 OCW3 控制部分 10 (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工作情况 11 初始化命令字在8259正常工作前设置。它决 定8259的工作方式和环境。返回 A0 ICW1 0 D7 D6 D5 D4 A7 A6 A5 1 LTIM ADI SNGL IC4 8086不用 0:边沿检测 1:电平检测 D3 D2 D1 D0 0:不需要ICW4 1:需要ICW4 0:级联使用 1:单独使用 8086/ 8088不用 12 12 初始化8259A必须从ICW1开始 写ICW1意味着重新初始化8259A 写入ICW1后,8259A的状态如下: 清除ISR和IMR(全0); 将中断优先级设成初始状态:IR0最高,IR7 最低; 设定为一般屏蔽方式; 采用非自动中断结束方式; 状态读出逻辑预置为读IRR。 13 13 A0 1 D7 T7 D6 T6 D5 D4 D3 D2 D1 D0 T5 T4 T3 X X X 中断类型码高5位 中断源 IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 D2 0 0 0 0 1 1 1 1 D1 0 0 1 1 0 0 1 1 自动填入 D0 0 1 0 1 0 1 0 1 在中断响应的第二个总线周期,通过数据线发送 中断类型码给CPU 返回 14 14 A0 1 D7 T7 D6 T6 D5 T5 D4 T4 D3 T3 D2 x D1 x D0 x T7~T3: 中断向量码的高5位 T2~T0: 最低3位为中断源的序号IRn 000~111分别对应IR0~IR7 由8259A根据中断源的序号自动填入 例如: 若ICW2命令字为48H,则IR0的中断向量码为48H, IR7的中断向量码为4FH,等等。 15 15 D7 S7 A0 1 主片 D6 D5 D4 D3 S6 S5 S4 S3 D2 S2 D1 S1 D0 S0 主8259的级联标志 1:相应的IR上有从8259 0:相应的IR上无从8259 从片 A0 1 D7 0 D6 0 D5 0 D4 0 D3 0 D2 ID2 D1 ID1 D0 ID0 ID2~ID0:从8259 的IR识别码 级连初始化必须与硬件连接一致 16 16 ICW3必须与主从片的连接关系一致: 例如,主片的IR4与从片的INT线连接,则 主片的ICW3=10H,从片的ICW3=04H。 中断响应时,主片通过级连线CAS2-CAS0 送出被允许中断的从片标识码,各从片用 自己的ICW3与CAS2-CAS0比较,二者一 致的从片才可发送中断向量码。 17 17 A0 1 D7 D6 D5 D4 D3 D2 D1 D0 0 0 0 SFNM BUF M/S AEOI µPM 0:一般的全嵌套方式 1:特殊的全嵌套方式 0×:非缓冲方式 10:缓冲方式/从片 11:缓冲方式/主片 0:8085方式 1:86/88方式 0:非自动EOI 1:自动EOI 返回 初始化命令字ICW1~ICW4 是以写入的顺序来区分的 18 18 单片8259应用于8086系统,IR0的中断类型码为 18H,电平触发方式,全嵌套非缓冲方式,自动 结束中断,要求初始化ICW4。端口地址为0A0H 开始,初始化程序为: MOV AL,13H ICW1初始化 OUT 0A0H,AL ;写入ICW1 MOVAL,18H ICW2 初始化 OUT 0A2H,AL ;写入ICW2 MOV AL,03H ICW4初始化 OUT 0A2H,AL ;写入ICW4 19 19 OCW用于设置8259的工作状态 在初始化后写入 OCW的写入顺序可任意 写入地址要求: OCW1必须写入奇地址端口(A0=1) OCW2,OCW3必须写入偶地址端口(A0=0) 20 20 OCW1 A0 1 D7 M7 D6 M6 D5 M5 D4 M4 D3 M3 D2 M2 D1 M1 D0 M0 0:清中断屏蔽位 1:置中断屏蔽位 Mi=1 中断请求线IRi被屏蔽(不允许中断) =0 允许该IRi中断 OCW1将写入IMR寄存器。 A0=1时读OCW1可读出设置的IMR内容。 21 21 OCW2 A0 0 D7 D6 D5 R SL EOI D4 D3 0 0 D2 L2 D1 D0 L1 L0 0 0 …… 1 1 0 R=1:循环优先权 0 R=0:固定优先权 1 SL=1:L2L1L0指定IR位1 0 SL=0:L2L1L0无效 1 EOI=1:中断结束 1 0 0 1 0 0 0 1 1 1 1 1 1 0 0 1 0 0 0 对应IRi 1 的编码 常规EOI 特殊EOI,由L2~L0指定结束IRi 自动优先权循环,常规EOI 自动优先权循环 取消自动优先权循环(固定优先权) 特殊EOI,由L2~L0指定特殊优先权循环 特殊优先权循环,由L2~L0设定最低优先级 无操作 22 22 OCW3 0 0 0 1 1 0 A0 0 D7 D6 - ESMM D5 D4 D3 D2 SMM 0 1 P 1 1 无意义 清除特殊 设定特殊 屏蔽方式 屏蔽方式 0 0 0 1 0:非查询方式 1:查询方式 D1 D0 RR RIS 1 0 1 1 无意 读 读 义 IRR ISR 8259的工作方式编程并没有固定顺序,各命 令字之间用地址信号A0及特征位加以区分。 23 23 查询方式允许8259A不工作于中断方式, 而是以查询方式工作。 CPU先写一个D2=1(查询方式)的OCW3, 再对同一地址读入,即可得到如下状态字节: I x x x x R2 R1 R0 I=1表示有中断请求,中断请求号为R2-R0 此查询步骤可反复执行,以响应多个同时发 生 的中断。 读IRR/ISR:写入此命令后,随后再对同 一地址读,即可得到IRR或ISR的内容。 24 24 CLI MOV OUT MOV OUT MOV OUT MOV OUT MOV OUT MOV OUT STI =0001 0111B ;关中断 AL,17H;ICW1:单片,边缘触发,需要ICW4 20H,AL =0000 1000B AL,08H ;ICW2:中断类型码的D7~D3位为00001 21H,AL =0000 0001B AL,01H;ICW4:非自动的EOI,非缓冲,80X86方式 21H,AL =0000 0100B AL,04H ;OCW1:只屏蔽IRQ2(保留中断) 21H,AL =0010 0000B AL,20H ;OCW2:固定优先权,一般的EOI 20H,AL =0100 1011B AL,4BH;OCW3:正常屏蔽,非查询方式,可读ISR 20H,AL ;开中断 25 25 3. 8259A 的工作过程 分两步: (1)处理外设中断申请,决定是否向CPU发中断 申请信号。 (2)若发中断申请信号,且CPU响应, 则在CPU 中断响应周期送出中断类型号。 26 (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 发中断请求信号。 27 ① 中断申请寄存器IRR 锁存外部的中断申请。 若 IR0~IR7 引脚上有中断申请,则将 IRR 相应位置1 总线 D0 ~ D7 数据线 A0 A0 A5 ~ A9 IOR 片 选 CS 译 码 RD IOW WR INTA INTA INTR INT D0 ~ D7 ISR 当前 中断 服务 寄存器 0 0 0 0 0 0 0 0 ICW1 芯片控制 ICW2 中断类型号 ICW3 主从片关系 ICW4 方式控制 IRR 中断 申请 寄存器 PR 优先级 裁决器 01 0 0 0 0 0 0 01 IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 1 0 0 1 0 1 0 0 OCW1 中断屏蔽寄存器 IMR 0 0 OCW2 优先级、发EOI OCW3 特殊屏蔽设置 28 ② 中断屏蔽寄存器 IMR 决定 IRR 中的中断申请 是否进入优先级裁决器 PR。 IMR对应位为 0,允许中断申请进入优先级裁决器, 为 1,不允许进入,中断申请被IMR屏蔽。 总线 D0 ~ D7 数据线 A0 A0 A5 ~ A9 IOR 片 选 CS 译 码 RD IOW WR INTA INTA INTR INT D0 ~ D7 ISR 当前 中断 服务 寄存器 0 0 0 0 0 0 0 0 ICW1 芯片控制 ICW2 中断类型号 ICW3 主从片关系 ICW4 方式控制 IRR 中断 申请 寄存器 PR 优先级 裁决器 1 0 0 0 0 0 0 1 IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 1 0 0 1 0 1 0 0 OCW1 中断屏蔽寄存器 IMR 0 0 OCW2 优先级、发EOI OCW3 特殊屏蔽设置 29 ③ 当前中断服务寄存器 ISR 记录CPU正在响应的中断。 ISR中的某位为1,表示CPU正在响应此级中断, 即正在执行此中断源的中断子程; ISR中的某位为 0,表示CPU没有或已响应完此级中断, 即不在执行此中断源的中断子程 总线 D0 ~ D7 数据线 A0 A0 A5 ~ A9 IOR 片 选 CS 译 码 RD IOW WR INTA INTA INTR INT D0 ~ D7 ISR 当前 中断 服务 寄存器 0 0 1 0 0 0 0 0 ICW1 芯片控制 ICW2 中断类型号 ICW3 主从片关系 ICW4 方式控制 IRR 中断 申请 寄存器 PR 优先级 裁决器 1 0 0 0 0 0 0 1 IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 1 0 0 1 0 1 0 0 OCW1 中断屏蔽寄存器 IMR 0 0 OCW2 优先级、发EOI OCW3 特殊屏蔽设置 30 ④ 优先级裁决器PR据新进入的中断申请和 ISR的内容, 决定是否发中断申请信号。 如果进入的中断申请比 ISR 中记录的中断优先级高, 则通过 8259A 的 INT 引脚向 CPU发出中断请求信号; 如果进入的中断申请不比 ISR 中记录的中断优先级高,同级或低级, 总线 D0 ~ D7 则不向 CPU 发中断请求信号。 数据线 A0 A0 A5 ~ A9 IOR 片 选 CS 译 码 RD IOW WR INTA INTA INTR INT D0 ~ D7 ISR 当前 中断 服务 寄存器 0 0 1 0 0 0 0 0 ICW1 芯片控制 ICW2 中断类型号 ICW3 主从片关系 ICW4 方式控制 IRR 中断 申请 寄存器 PR 优先级 裁决器 1 0 0 0 0 0 0 1 IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 1 0 0 1 0 1 0 0 OCW1 中断屏蔽寄存器 IMR 0 0 OCW2 优先级、发EOI OCW3 特殊屏蔽设置 31 (2) 若发中断申请信号,且CPU响应, 则在CPU中断响应周期送出中断类型号 CPU接收到 INTR上的中断申请信号后: 如果 IF 标志为0,则CPU不响应此中断申请信号, 即中断申请被IF屏蔽。 如果 IF 标志为1, 则处理完当前的指令后, 进入中 断响应周期 通过 INTA 引脚发出两个负脉冲信号, 从数据总线上获取中断类型号, 进入中断响应的过程。 32 8086CPU中断响应周期时序 第 一 个 中断响应周期 T1 T2 T3 T4 第 二 个 中断响应周期 T1 T2 T3 T4 CLK INTA AD7~AD0 向量类型 33 8259A在接收到第一个INTA中断响应信号后: ① 将 ISR 中相应位置1, 表示 CPU 响应此级中断,执行此中断源的中断子程。 ② 把 IRR中对应的位清0,清除IRR中锁存的中断申请信号。 总线 D0 ~ D7 数据线 A0 A0 A5 ~ A9 IOR 片 选 CS 译 码 RD IOW WR INTA INTA INTR INT D0 ~ D7 ISR 当前 中断 服务 寄存器 01 0 1 0 0 0 0 0 ICW1 芯片控制 ICW2 中断类型号 ICW3 主从片关系 ICW4 方式控制 IRR 中断 申请 寄存器 PR 优先级 裁决器 01 0 0 0 0 0 0 1 IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 1 0 0 1 0 1 0 0 OCW1 中断屏蔽寄存器 IMR 0 0 OCW2 优先级、发EOI OCW3 特殊屏蔽设置 34 8259A在接收到第二个INTA中断响应信号后: ① 通过数据线,将被响应申请的中断类型号送给CPU。 类型号由ICW2提供,在初始化8259A时已设定好。 ② CPU获得中断类型号后,进入CPU响应中断的过程, 执行中断子程,处理中断源申请的功能。 总线 D0 ~ D7 数据线 A0 A0 A5 ~ A9 IOR 片 选 CS 译 码 RD IOW WR INTA INTA INTR INT D0 ~ D7 ISR 当前 中断 服务 寄存器 01 0 1 0 0 0 0 0 ICW1 芯片控制 ICW2 中断类型号 ICW3 主从片关系 ICW4 方式控制 IRR 中断 申请 寄存器 PR 优先级 裁决器 01 0 0 0 0 0 0 1 IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 1 0 0 1 0 1 0 0 OCW1 中断屏蔽寄存器 IMR 0 0 OCW2 优先级、发EOI OCW3 特殊屏蔽设置 35 CPU响应中断过程: ① 取中断类型号N ② 当前PSW的内容入栈 ③ 清IF、TF标志为0 保存现场 ④当前CS的内容入栈 ⑤ 当前IP的内容入栈 ⑥ 取内存单元( 0 : N ×4 )字内容送IP 取中断子程 ⑦ 取内存单元( 0 : N ×4 + 2 )字内容送CS 入口地址 此时CS:IP指向中断程序的入口,开始执行中断程序。 执行完中断子程中最后一条指令IRET后, 返回被中断处,继续执行被中断的程序。 36 三、8259A的编程 1. 8259A的编程 2. 8259A的编程方法 (1) 设置中断屏蔽字 (2) 发中断结束命令EOI 37 1. 8259A的编程 8259A内部有9个 可读写的寄存器 4个初始化命令寄存器 ICW1、ICW2 ICW3、ICW4 8259A中断控制器 处理部分 0 ISR 0 当前 0 中断 0 服务 0 寄存器 00 0 3个操作命令寄存器 ICW1 芯片控制 1 × I3 I4 OCW1(IMR) ICW2 中断类型号 OCW2、OCW3 当前中断服务寄存器 ISR 中断申请寄存器 IRR IRR 0 中断申请 0 寄存器 0 0 0 0 0 0 PR 优先级 裁决器 OCW1 1 0 0 1 0 1 0 0 中断屏蔽寄存器 IMR 0 0 ICW3 主从片关系 OCW2 0 1 ICW4 方式控制 OCW3 控制部分 38 8259A中断控制器 处理部分 8259A有两个I/O端口地址 A0=0 偶地址端口 A0=1 奇地址端口 对 9个寄存器的读写 均通过这两个端口实现 写入数据的特征位 根据 写入的先后顺序 区分是对哪个寄存器 进行操作 0 8 D0 ISR 0 0 当前 ~ 0 D7 中断 0 服务 0 A0 寄存器 0 0 CS IRR 0 中断申请 0 寄存器 0 0 0 0 0 0 PR 优先级 裁决器 A0 ICW1 芯片控制 A0 OCW1 1 × I3 I4 0 1 0 0 1 0 1 0 0 1 RD 中断屏蔽寄存器 ICW2 中断类型号 1 WR 0 0 0 OCW2 ICW3 主从片关系 ICW4 方式控制 0 0 1 1 OCW3 1 控制部分 39 是否级联 8259初始化流程 用ICW1设置 请求格式信号 是否需要设置ICW4 用ICW2设置中断类型码 N 是否为级联方式 Y Y 本片设为主片吗? N 设置ICW3,各位 设置ICW3,高5位 对应IR0~IR7 为0,低3位为标识码 需要用到ICW4吗? Y 用ICW4设置 是否为特殊全嵌套方式 是否为缓冲方式 是否为自动结束中断方式 是否为16位系统 N 结束,进行中断服务 40 2. 8259A的编程方法 8259A有多种工作方式,这些工作方式均可编 程选择,使用相当灵活。 要求掌握: (1)通过中断屏蔽寄存器IMR的读写,设置中断屏蔽字 (2) 通过OCW2操作命令寄存器,发中断结束EOI命令 41 对8259的端口寻址及其基本操作(读/写基本操作) PIC1 PIC2 CS A0 WR RD 输入操作(RD) 20H 21H 0 0 1 1 IRR ISR 查询字(OCW3) IMR(OCW1) CPU DB7-0 0A0H 0A1H 0 1 0 0 输出操作(WR) 20H 0A0H 21H 0A1H 0 0 0 0 0 0 0 1 0 0 1 X 0 1 X X 0 0 0 0 1 1 1 1 OCW2 CPU写 DB7-0 OCW3 ICW1 写(IMR).OCW1.ICW2.3.4 注意:8259只有两个端口,由A0一位确定: 1:奇数口 0:偶数口 由奇/偶数端口及控制字中的某些特定 位来确定命令字往那个R中送。 42 (1)设置中断屏蔽字 通过往奇地址端口写入IMR内容实现 对应位为0,允许该级中断申请进入 对应位为1,禁止该级中断申请进入 总线 D0 ~ D7 数据线 A0 A0 A5 ~ A9 IOR 片 选 CS 译 码 RD IOW WR INTA INTA INTR INT D0 ~ D7 ISR 当前 中断 服务 寄存器 0 0 0 0 0 0 0 0 ICW1 芯片控制 ICW2 中断类型号 ICW3 主从片关系 ICW4 方式控制 IRR 中断 申请 寄存器 PR 优先级 裁决器 1 0 0 0 0 0 0 1 IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 1 0 0 1 0 1 0 0 OCW1 中断屏蔽寄存器 IMR 0 0 OCW2 优先级、发EOI OCW3 特殊屏蔽设置 43 例 已知 IBM PC/XT系统中 8259A的奇地址端口地址为21H 新增允许 IR2 的中断申请 IN AL, 21H AND AL, 1111 1011B OUT 21H, AL ;读入原IMR的内容 ;D2=0,允许IR2的中断申请 ;写入IMR 禁止 IR4 的中断申请 IN AL, 21H ;读入原IMR的内容 OR AL, 0001 0000B ;D4=1,禁止IR4的中断申请 OUT 21H, AL ;写入IMR 44 设置完成后的结果: 总线 D0 ~ D7 数据线 A0 A0 A5 ~ A9 IOR 片 选 CS 译 码 RD IOW WR INTA INTA INTR INT D0 ~ D7 ISR 当前 中断 服务 寄存器 0 0 0 0 0 0 0 0 ICW1 芯片控制 ICW2 中断类型号 ICW3 主从片关系 ICW4 方式控制 IRR 中断 申请 寄存器 PR 优先级 裁决器 1 0 0 0 0 0 0 1 IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 1 0 0 1 0 0 0 0 OCW1 中断屏蔽寄存器 IMR 0 0 OCW2 优先级、发EOI OCW3 特殊屏蔽设置 45 (2) 发中断结束命令 EOI 由 8259A 的工作过程可知: ISR中的内容是优先级裁决器进行裁决的重要依据 CPU响应某级中断后,8259A自动将ISR的对应位置1, 如果CPU已执行完中断子程,而ISR中的对应位仍为1, 8259A的优先级裁决器仍会据ISR的内容做裁决, 从而会屏蔽同级或低级的中断申请。 在中断响应后,对 ISR中相应位的清0很重要, 它是8259A认为中断结束的标志。 46 总线 D0 ~ D7 数据线 A0 A0 A5 ~ A9 IOR 片 选 CS 译 码 RD IOW WR INTA INTA INTR INT D0 ~ D7 ISR 当前 中断 服务 寄存器 1 0 1 0 0 0 0 0 ICW1 芯片控制 ICW2 中断类型号 ICW3 主从片关系 ICW4 方式控制 IRR 中断 申请 寄存器 PR 优先级 裁决器 1 0 0 0 0 0 0 1 IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 1 0 0 1 0 1 0 0 OCW1 中断屏蔽寄存器 IMR 0 0 OCW2 优先级、发EOI OCW3 特殊屏蔽设置 47 清 ISR 内容的方法有两种: 一、 初始化8259A时,设置8259A工作方式为自动清0方式, 则在CPU响应中断后,硬件自动将ISR的对应位清0。 二、 初始化8259A时,设置8259A工作方式为非自动清0方 式, 需在中断子程中,通过软件方式清0。 方法是:通过往OCW2写入20H实现,即由偶地址端口 写入: 0 0 1 EOI 0 0 0 0 0 20H 特征位,表示对OCW2操作 48 例 已知 IBM PC系统中, 8259A的偶地址端口地址为 20H; BIOS 初始化 8259A 时,设置 8259A 工作方式为非自动清 0 方式。 编程在中断子程 IRET 返回前,发中断结束命令EOI intsub PROC 、、、 、、、 、、、 MOV AL, 20H OUT 20H, AL IRET intsub ENDP ;将中断结束命令字20H 送AL ;写入OCW2中 ;中断返回 49 设计中断子程序的步骤: (1) 选择一个中断向量; (2) 将中断子程序的入口地址置入中断向量表 的相应表项中; (3) 使中断服务子程序驻留内存; 举例 50 50 如果是采用硬件中断,则要使用由硬件确定 的中断向量。如果是采用软件中断,即用执 行INT n指令的方式来执行中断服务程序, 则可以在系统预留给用户的中断向量号中选 某一个中断向量。例如,选50H号向量。 51 51 (2)将中断子程序的入口地址置入中断向量表的相 应表项中 设选择的向量号为n,其置入方法有两种:一是用数 据传送指令将中断服务子程序入口的相对地址存放在 物理地址为4×n的字单元中,将中断服务子程序入口 的段地址存放在物理地址为4×n+2的字单元中。二 是采用DOS中设置新中断向量的中断功能(25功能), 向量号 21H 功能号 25H 入口参数:DS DX AL=新增的向量号。 52 52 使程序驻留内存,要求该程序以.COM形式运 行,因为.COM程序将定位于低地址区,DOS常 在低地址区增加驻留程序,而.EXE将定位于 高地址区。使程序驻留内存的方法是采用DOS 的中断调用,即:向量号21H 功能号31H 入口参数:DX 该功能使当前程序的DX个字节驻留内存并返 回DOS。 53 53 例:在微机中增加一中断服务子程序,其向量号为50H,其功能是BX内容增1。 C SEGMENT ASSUME CS:C ORG 100H B: MOV AX,SEG SUBP MOV DS,AX MOV DX,OFFSET SUBP MOV AH,25H MOV AL,50H INT 21H ;建立50H MOV DX,N MOV AH,31H INT 21H ;中断服务程序驻留内存并返回DOS SUBP PROC FAR INC BX IRET SUBP ENDP N EQU C ENDS END B 54 54 在IBM PC/XT机中,只用1片8259A中断控制器, 用来提供8级中断请求,其中IR0优先级最高, IR7优先级最低。它们分别用于日历时钟中断、 键盘中断、保留、网络通信、异步通信中断、 硬盘中断、软盘中断及打印机中断。8259A片 选地址为20H、21H。 8259A 的使用步骤如下: 1. 初始化 2. 送中断向量入口地址 3. 中断子程序结束 4. 中断嵌套 55 55 MOV AL, 13H OUT MOV OUT MOV OUT MOV ;写ICW1,单片,边沿触发,要ICW4 20H,AL AL,8 ;写ICW2,中断类型号从8开始 21H,AL AL,0DH ;写ICW4,缓冲工作方式,8088/8086配置 21H,AL AL,0 ;写OCW1,允许IR0~IR7全部8级中断 OUT 21H,AL 56 56 例如,异步通信中断IR4,其中断向量类型码 为8+4=12(0CH),则中断入口地址的偏移量 (IP值)与段基址(CS)在入口地址表中的 存放地址为12×4=48(30H),49(31H), 50(32H),51(33H)。其中30H、31H存放 指令指针IP;32H,33H存放指令段码CS。 57 57 由于8259A采用中断工作方式,且ICW4中的D1 位(即AEOI)为0,这意味着采用正常结束中 断,因此,在中断子程序结束前必须发EOI命 令和IRET MOV AL,20H (即发EOI命令) OUT 20H,AL IRET ;写OCW2命令,使ISR相应位复位 ;开放中断允许,并从中断返回 58 58 为了使中断嵌套,即在中断响应过程中,允许 比本中断优先级高的中断进入,只要在进入中 断处理程序后,执行开中断指令STI即可达到 此目的。 59 59 四、8259A在IBM PC/XT系统中的应用 1.8259A与系统的连线。 2.BIOS初始化程序对8259A的设置。 60 1.与系统的连线 注意:8259A在连线中的位置 A15~A8 S6~S3/A19~A16 AD7~AD0 CLK RESET READY MN/MX VCC +5V RD QS0 QS1 LOCK TEST HIGH NMI GND 地址锁存器 8282(两片) 地址总线 内 存 STB 数据收发器 8086 CPU OE T 数据总线 8286 总 DT/R DEN S0 S1 S2 INTR RQ/GT0 GND RQ/GT1 MRDC 8288 MWTC ALE 总线 IORC 控制器 IOWC INTA PC 线 控制总线 I/O 接口 8259A 及有关电路 61 ① 8259A的片选地址范围为 20 ~ 3F H 偶、奇端口地址通常取用20H、21H 8259A Vcc 总线 D0 ~ D7 IOR IOW 数据线 RD WR A0 A0 A5 ~ A9 INTA INTR D0 ~ D7 片 选 20~3FH 译 码 CS INTA INT IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 + 5V 17.2Hz 方波 键盘 保留 串 口2 串 口1 硬盘 软盘 打印机 SP/EN CA0 CA1 CA2 用于多片 8259A 级连情况 GND 62 ② 8259A的8个中断申请与外设的连接 IR0 接一个频率为17.2Hz的方波; 若CPU对该申请给予响应, 17.2Hz时钟信号 则每秒执行17.2次该申请对应的中断子程。 IR1接键盘接口发出的中断申请; 每按下一键,若CPU对该申请给予响应, 则执行一次该申请对应的中断子程。 IR2~IR7通过系统总线引出, 对应引脚信号为IRQ2~IRQ7。 63 主 板 08h IR0 8086 17.2Hz 方波 键盘 IF INTR 当前 中断 服务 寄存器 INT 键盘 09h IR1 中断申请 接口 0Ah IR2 ~ ~ 0Fh IR7 中断屏蔽寄存器 8259A IRQ2 ~ IRQ7 键 盘 外 设 接 口 外 设 PC 总 线 IBM PC/XT微机可屏蔽中断响应过程示意图 64 GND RESET +5V IRQ2 -5V DRQ2 -12V +12V GND MEMW MEMR IOW IOR DACK3 DRQ3 DACK1 DRQ1 DACK0 CLOCK IRQ7 IRQ6 IRQ5 IRQ4 IRQ3 DACK2 T/C ALE +5V OSC GND I/O CH CK D7 D6 D5 D4 D3 D2 D1 D0 I/O CH RDY AEN A19 A18 A17 A16 A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 IBM PC/XT总线插槽引脚信号 65 2.BIOS初始化程序对8259A的设置 ① IR0~IR7 中断申请信号为上升沿触发方式; ② IR0~IR7 对应的中断类型号分别为08H~0FH; ③ 优先级IR0最高, IR7最低; ④ 采用非自动结束方式, 需向OCW2发EOI中断结束命令, 清除ISR中的记录。 66 8259A Vcc 总线 D0 ~ D7 IOR IOW 数据线 RD WR A0 A0 A5 ~ A9 INTA INTR D0 ~ D7 片 选 20~3FH 译 码 CS INTA INT 08H IR0 09H IR1 0AH IR2 0BH IR3 0CH IR4 0DH IR5 0EH IR6 0FH IR7 SP/EN CA0 CA1 CA2 GND + 5V 17.2Hz 方波 键盘 保留 串口2 串口1 硬盘 软盘 打印机 用于多片 8259A 级连情况 67 PCI 总 线 PCI 总 中 断 路 由 器 IRQ8 IRQ9 IRQ10 IRQ11 IRQ12 IRQ13 IRQ14 IRQ15 芯片组 从 INT 8259 系统时钟 键盘 IRQ0 IRQ1 IRQ3 IRQ4 IRQ5 IRQ6 IRQ7 线 主 8259 INT 至CPU IRQ7 IRQ6 IRQ5 IRQ4 IRQ3 IRQ2 ISA总线68 68 中断系统由两片8259,一个中断路由器构成 从8259的中断申请与主8259的IRQ2相连 ISA总线上有6个中断申请,其中IRQ2连至从8259的IRQ9 系统软件上,将IRQ9的中断向量指向IRQ2的中断向量 主8259的端口地址为: 20H,21H 8个对应的中断申请IRQ7~IRQ0类型号为0Fh~08h 从8259的端口地址为: A0H,A1H 8个对应的中断申请IRQ15~IRQ8类型号为77h~70h 中断路由器(Interrupt Router) : 动态分配PCI上的中断申请到8259中未被占用的中断上 69 69 中断程序举例 PC机中主8259A的I/O地址为20H和21H,中断向 量码为08H; 中断请求从IR6引入,故中断类型号为0EH; 主程序如下: ;保存原来的中断向量 mov ah,35h mov al,0eh int 21h mov save_ip,bx mov save_cs,es ;中断类型码 ;取原中断向量(在es:bx中) ;保存原来的中断向量 70 70 ;设置自己的中断向量 push ds mov dx,offset my_int mov ax,seg my_int mov ds,ax ;DS:DX的内容为my_int的首地址 mov ah,25h mov al,0eh int 21h ;设置自己的中断向量 pop ds ;初始化堆栈指针 mov sp,my_stack_top ;设置8259A的中断屏蔽字 in al,21h and al,10111111b ;开放IR6中断 out 21h,al sti …… <其他代码放在这里> …… 71 71 子程序如下: my_int my_int proc far pusha … <中断服务程序主体> … popa mov al,20h ;EOI命令,00100000B out 20h,al ;写OCW2 sti iret endp pusha是将我们所有的16位通用寄存器压 入堆栈,popa同理是将我们所有的16通用 寄存器取出堆栈。 72 1、中断优先方式 两类优先级控制方式:固定优先级和循环优 先级 固定优先级方式 所有中断请求IRi的中断优先级固定不变 优先级排列顺序可编程改变 加电后8259A的默认方式,默认优先级顺序从 高到低为IR0~IR7 默认优先级 优先级可编程改变 IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 7 最低级 6 5 4 3 2 1 0 优先级 最高级 3 2 1 0 最高级 7 6 5 最低级 73 4 73 2、循环优先级方式 中断源轮流处于最高优先级,即自动中断优先级 循环 初始优先级顺序可用编程改变 某中断请求IRi被处理后,其优先级别自动降为 最低,原来比它低一级的中断上升为最高级 IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 ISRi 0 1 0 1 0 0 0 0 7 6 5 4 3 2 1 0 IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 ISR内容 最高级 最低级 IR4的服务结束以前 0 1 0 0 0 0 0 0 2 1 0 7 6 5 4 3 最高级 最低级 IR4的服务结束以后 74 74 3、中断嵌套方式 在中断处理过程中允许被更高优先级的事件 所中断称为中断嵌套。8259A有两种中断嵌套 方式: 普通全嵌套方式(默认方式) 一中断正被处理时,只有更高优先级的事件可 以打断当前的中断处理过程而被服务。 特殊全嵌套方式 一中断正被处理时,允许同级或更高优先级的 事件可以打断当前的中断处理过程而被服务。 注: 特殊全嵌套仅用于多个8259A级连时的主8259A, 而不能用于从属8259A或单8259A系统。 75 75 一般全嵌套方式与特殊全嵌套方式的区别 B. 一 般 嵌 套 方 式 : C. 一般嵌套方式: IR4的中断被服务 时,这些中断将 被封锁。 去CPU 主8259A 从8259A IR0 IR0 IR1 IR1 IR2 IR2 IR3 IR3 INT IR4 INT IR4 IR5 IR5 IR6 IR6 IR7 IR7 D. 特殊嵌套方式: IR4 的 中 断 被 服 务时,只封锁 IR5-IR7。 从片的INT被主片封 锁,故更高级别的 IR0-IR2中断也无法 得到响应 A. E. 假定IR3发生中断, 并获得服务 特殊嵌套方式: 因主片不封锁从片的 INT,故级别高的IR0IR2中断可以得到响应。 ( 但 IR3-IR7 仍 被 本 从 片封锁) 76 76 1、当某一IRi中断被服务时,ISR中的相 应位ISRi=1。当服务结束后,则必须 清零该ISRi位。使ISRi=0是通过向 8259A发出中断结束命令(EOI命令) 实现的。 2、三种EOI命令 自动EOI(AEOI)——(自动EOI方式) 非指定EOI(NSEOI)——(正常EOI方式) 指定EOI(SEOI)——(特殊EOI方式) 77 77 AEOI:在第2个INTA#结束时,由8259A使 ISRi自动复位; 因不保留当前正在服务的中断的状态,故AEOI不 能用于中断嵌套方式 指定EOI:由CPU发出一条SEOI命令,该EOI 命令中指出了所要复位的ISR的位号。 用于特殊屏蔽方式 非指定EOI:由CPU发出正常EOI命令,该 EOI命令使ISRi=1的位中优先级最高的那一 位复位。 用于普通全嵌套方式 78 78 特殊全嵌套方式 下的EOI处理 只有当从PIC 的中断全部处理 完后,才能向主 PIC发EOI命令 中断服务程序 ┇ 向从PIC发EOI命令 读从PIC的ISR 全0? N Y 向主PIC发EOI命令 恢复现场 IRET 79 79 1、IMR屏蔽字决定了允许或禁止某位IRi所 对应的中断:IMi=1 禁止, IMi=0 允许。 2、特殊屏蔽方式: 提供了允许较低优先级的中断能够得到响 应的特殊手段。 原理:假定当前正在处理IR6,先进入特殊 屏蔽方式,然后设置IM6=1。这时,除IR6外 的所有中断请求均能得到响应。 特殊屏蔽方式中只能用SEOI命令结束中断。 80 80 特殊屏蔽例: CLI MOV OUT IN OR OUT STI AL,68H 0C0H,AL AL,0C1H AL,10H 0C1H,AL CLI IN AND OUT MOV OUT STI AL,0C1H AL,0EFH 0C1H,AL AL,48H 0C0H,AL MOV OUT IRET AL,20H 0C0,AL ;IR4中断处理程序 ;OCW3:0 1 1 0 1 0 0 0 ;设置特殊屏蔽方式 ;屏蔽IR4 ;IR7请求,响应,返回 ;为设命令字 ;读出屏蔽字 ;清除IMR4 ;OCW3:0 1 0 0 1 0 0 0 ;取消特殊屏蔽 ;继续IR4中断服务 ;OCW2:0 0 1 0 0 0 0 0 (EOI) 81 81 第一小节结束, 谢谢您的合作! 82