当前位置: 首页 > news >正文

微机原理与接口技术:中断技术 详细笔记与例题解析

文章目录

  • 笔记
    • 1.中断原理
      • 1.1.中断的基本概念
      • 1.2.中断工作方式的特点
      • 1.3.中断管理
        • 1.3.1.对中断全过程的控制
        • 1.3.2.中断源的识别
        • 1.3.3.中断的优先权
        • 中断优先权的确定方法
        • 1.3.4.中断嵌套
      • 1.4.中断过程
      • 1.5.8086 CPU中断系统
        • 1.5.1.8086的中断类型
        • 1.5.2.8086的中断向量表
    • 2.可编程控制器8259A
      • 2.1.8259A引脚及内部结构
        • 2.1.1.8259A引脚
        • 2.1.2.中断请求寄存器IRR
        • 2.1.3.中断屏蔽寄存器IMR
        • 2.1.4.中断服务状态寄存器ISR
        • 2.1.5.优先权处理器
        • 2.1.6.控制逻辑
        • 2.1.7.数据总线缓冲器
        • 2.1.8.读写控制逻辑
        • 2.1.9.级联缓冲/比较器
    • 2.2.8259A的工作方式
      • 2.2.1.8259A的工作过程
      • 2.2.2.8259A的优先权管理
        • 2.2.2.1.固定优先级
        • 2.2.2.2.循环优先级
      • 2.2.3.中断屏蔽方式
      • 2.2.4.中断结束方式
      • 2.3.8259A的编程
        • 2.3.1.初始化命令字
          • 2.3.1.1.初始化命令字ICW1
          • 2.3.1.2.初始化命令字ICW2
          • 2.3.1.3.初始化命令字ICW3
          • 2.3.1.4.初始化命令字ICW4
          • 2.3.1.5.8259A初始化
        • 2.3.2.操作命令字
          • 2.3.2.1.操作控制字OCW1
          • 2.3.2.2.操作控制字OCW2
          • 2.3.2.3.操作控制字OCW3
    • 3.中断方式输入输出
      • 3.1.中断方式输入输出程序设计
        • 3.1.1.主程序设计
        • 3.1.2.中断服务程序设计
  • 例题

笔记

1.中断原理

1.1.中断的基本概念

中断的定义:由于某个事件的发生,CPU暂停当前正在执行的程序,转而执行处理该事件的一个程序,该程序执行完成后,CPU再接着执行被暂停的程序。这个过程称为中断。

中断源的定义:引发中断的事件称为中断源。

内部中断和外部中断的定义:发生在CPU内部的中断称为内部中断,CPU外部的中断称为外部中断。程序异常、单步运行和执行特殊指令所导致的是内部中断;I/O事件、外部故障等所引起的是外部中断。大多数的中断都是外部中断。

中断类型:用若干位二进制表示的中断源的编号,称为中断类型。

中断断点的定义:发生中断时即将被执行的指令的地址称为中断断点。

中断服务程序的定义:处理中断事件的程序段称为中断服务程序。不同的中断需要使用不同的中断服务程序。

  • 中断服务程序与子程序的区别:子程序的调用是程序事先设定的,因此是确定的;中断服务程序由某个事件引发,往往是随机且不确定的。

中断向量的定义:中断服务程序的入口地址称为中断向量。

中断系统的定义:为实现计算机中的中断功能而配置的相关硬件、软件的集合。

1.2.中断工作方式的特点

  • 并行处理能力:有了中断功能,可以实现CPU和多个外部设备同时工作,仅仅在它们相互需要交换信息时才进行中断,这样就提高了CPU的工作效率。
  • 实时处理能力:计算机用于实时控制时,能够对外部事件及时响应。
  • 故障处理能力:利用中断方式及时处理故障,而不影响其他程序的运行。
  • 多道程序或多重任务的运行:在操作系统的调度下,使CPU运行多道程序或多重任务。

1.3.中断管理

1.3.1.对中断全过程的控制

  • 中断源发出中断请求时,CPU能够决定是否响应该中断。
  • 如果响应该中断,CPU能够在保护断点后,将控制权转移到相应的中断服务程序。
  • 中断处理完成后,CPU可以返回到断点处继续执行被中断的程序。

1.3.2.中断源的识别

计算机内有多个不同的中断源。CPU接收中断请求后,需要识别是哪一个中断源发出中断请求信号,以便执行相应的中断服务程序。

1.3.3.中断的优先权

  • 计算机内有多个不同的中断源,必须根据中断的性质以及轻重缓急对中断源进行排队并确定优先权。
  • 同时有多个中断申请时,首先处理优先级高的中断。
  • 确定优先级的常用方法有:软件查询法、分类申请法、菊花链法和可编程中断控制器法等。

中断优先权的确定方法

软件查询法

  • CPU响应中断后,通过软件查询哪个软件发出了中断申请。
  • 同时有多个中断申请时,越早被查询的中断越早被处理。

分类申请法

  • CPU设有两个中断申请信号的输入引脚,将中断申请信号的传入设置“可屏蔽中断请求引脚INTR”和“不可屏蔽中断请求引脚NMI”。
  • 普通的中断申请信号通过可屏蔽中断请求引脚INTR输入CPU,CPU通过中断允许标志寄存器IF来判定是否响应可屏蔽中断:如果IF=1,则CPU的一条指令执行完成后可以响应这一类中断申请;如果IF=0则CPU不响应来自INTR引脚的中断请求。
  • 连接到NMI引脚的中断请求具有更高的优先级,一般是紧急的中断申请信号。

链式优先权排队——菊花链法

  • 菊花链是一种在CPU外部管理中断优先级的一个简单硬件方法。
  • 在每个中断源的接口电路中设置一个逻辑电路,这些电路首尾相连,称为菊花链,由它来控制中断响应信号的传递。
  • 当多个中断请求同时发生时,越靠近CPU的接口越先得到中断响应,也就是有越高的优先级,而其后的接口就不能得到中断响应信号。

可编程中断控制器法

  • 采用可编程中断控制器是当前微型计算机解决中断优先权管理的常用方法。
  • 一个中断控制器可以接收并管理多个中断请求,各个I/O接口送来的中断请求信号都并行地送到中断控制器的输入端。
  • 可以通过程序设定中断控制器优先权的分配规则。

早期计算机采用软件查询或菊花链来管理中断优先级,目前的计算机普遍使用分类申请并使用中断控制器来实现优先权管理。

1.3.4.中断嵌套

  • 中断嵌套的定义:CPU处理低级别的中断过程中,如果出现了高级别的中断,CPU会停止执行低级中断的处理程序而去优先处理高级中断,等高级中断处理完成后再来接着执行低级中断。这个过程称为中断嵌套。
  • 注意事项:只有在中断处理程序中加入了开中断指令,才有可能进行中断嵌套。

1.4.中断过程

中断源请求中断

  • 中断源的分类:中断源可以分为外部中断源和内部中断源。外部中断源是由外部硬件产生的可屏蔽或不可屏蔽中断的请求信号;内部中断源是在程序运行过程中发生了指令异常或其他情况产生中断。
  • 中断屏蔽的概念:CPU可以用程序的方法允许某些中断源发出中断请求,而禁止某些中断源请求中断,称为中断屏蔽。
  • 中断屏蔽的实现:可以在外部设备的接口中增设一个中断屏蔽触发器,只要适当地设置中断屏蔽触发器的状态就可以控制中断请求信号能否送到INTR端。

中断响应

响应不同类型的中断所需要满足的条件不同。

  • 响应可屏蔽中断的条件:当前指令执行结束;CPU处于允许响应中断状态(IF=1);没有不可屏蔽中断请求和DMA请求。
  • 响应不可屏蔽中断的条件:当前指令执行结束;没有DMA请求。
  • 响应内部中断的条件:当前指令执行结束。

中断响应周期:CPU接收中断请求后进行中断响应周期,执行下列内容:

  1. 识别中断源,取得中断源的中断类型;
  2. 将标志寄存器FLAGS和CS、IP(断点)压入堆栈保存;
  3. 清除自陷标志位TF和中断允许标志位IF;
  4. 获取相应的中断服务程序入口地址,转入中断服务程序。

中断服务

中断服务程序的主要内容如下:

  1. 保护现场:将中断服务时要使用的寄存器中的内容压入堆栈保护。
  2. 开中断:为了在执行中断服务程序时,能够相应较高级别的中断请求。
  3. 中断处理:执行中断保护程序的具体内容。执行过程中允许CPU响应较高级别设备的中断请求。
  4. 关中断:保证在恢复现场不会被新的中断打扰。
  5. 恢复现场:将堆栈中的内容按与入栈相反的方向顺序弹出送回到原来的CPU寄存器。
  6. 返回:将堆栈中的标志寄存器值弹出,使得程序回到被中断的地址,恢复中断前的状态。

1.5.8086 CPU中断系统

1.5.1.8086的中断类型

类型表示:8086用8位二进制表示一个中断类型,因此可以有256个不同的中断。这些中断又可以分为内部中断、不可屏蔽中断、可屏蔽中断三类。

8086中断的优先级:最高级为除法错误中断INT 0,溢出中断INTO以及INT n指令;其次为不可屏蔽中断NMI,再者为可屏蔽中断INTR;单步中断的优先级最低。

开中断和关中断指令:可以使用STI指令使得IF=1,实现开中断;使用CLI指令使得IF=0,实现关中断。

可屏蔽中断的实现过程

  1. 8086的可屏蔽中断源由8259A统一管理,每片9=8259A可以接收8个外部设备的中断请求。
  2. 外部设备将中断请求信号送到8259A的输入端,8259A根据屏蔽状态决定是否给8086的INTR端发出信号。
  3. 8086响应中断请求后向8259A发出#INTA信号,8259A利用这个信号,将中断优先级最高的中断类型码送给8086。
  4. INTR中断的类型码可以是8-255。

不可屏蔽中断的实现过程

  • NMI接收上升沿触发的中断请求信号,只要输入脉冲有效宽度大于两个时钟周期就能被8086锁存。
  • CPU对NMI中断请求的响应不受标志位IF的控制。
  • NMI中断类型码固定为2。

内部中断概述:内部中断是由于执行INT n、INTO等指令,或者是由于除法出错,或是进行单步操作引起的中断。8086CPU中的内部中断有5种类型。

  • 除法错中断:进行除法是除数为零或商超过寄存器能表达的范围。中断类型码为0。
  • 单步中断:8086CPU种设置有一个自陷标志位TF,如果TF=1则CPU每执行完一条指令就引起一次中断。中断类型码为1。单步中断用于实现单步操作,是一种强有力的调试手段。
  • 断点中断:程序调试过程中通过设置断点引起的中断。中断类型码为3。执行断点中断时原程序暂停执行,此时可以读出程序的执行环境供程序员调试使用。
  • INTO指令:如果前面的指令执行结果使得8086内溢出标志寄存器OF=1,则引起此中断。中断类型码为4。
  • INT n指令:用户可以产生的一种中断,其中n为中断类型码。

1.5.2.8086的中断向量表

  • 空间占用:中断向量表占用存储器从00000H开始的最低地址区,每个中断向量占用4个字节。
  • 中断服务程序地址:中断服务程序入口的偏移地址存入两个低地址字节,入口的段基址存入两个高地址字节。使用某个中断前,应先把中断服务程序的入口地址的段基址和偏移地址分别装入中断向量表的相应单元中。
  • 自定义中断服务程序的注意事项:如果用户以自己的中断服务程序替换系统某类中断,则必须将原始中断向量保存起来,用户停止使用自己的中断向量时,再将其恢复。

2.可编程控制器8259A

8259A中断控制器的性能

  • 具有8级优先权控制,通过级联可以扩展至64级。
  • 每一级都可以由程序进行屏蔽或开放。
  • 在中断响应周期,8259A可以提供相应的中断类型号。
  • 可以通过编程来选择8259A的各种工作方式。

2.1.8259A引脚及内部结构

2.1.1.8259A引脚

  • DB7-DB0:双向三态数据总线。
  • A0:输入地址线,用于选择内部端口。习惯上把A0=0的端口称为偶端口;A0=1的端口称为奇端口。
  • #CS:片选信号输入。
  • #RD:读信号输入。
  • #WR:写信号输入。
  • #INTA:中断相应信号输入。
  • INT:中断请求信号输出。
  • CAS2-CAS0:3根双向的级联线。
  • IR7-IR0:外部设备向8259A发出的中断请求信号输入。
  • #SP/#EN:主从设备设定/缓冲器读写控制信号,双向双功能。

2.1.2.中断请求寄存器IRR

中断请求寄存器用于锁存外部设备送来的IR7-IR0中断请求信号,这个寄存器中的内容可以被CPU读出。

2.1.3.中断屏蔽寄存器IMR

  • 中断屏蔽寄存器也是一个八位寄存器,用于设置中断请求的屏蔽信息。
  • 寄存器中哪一位被置一时与之对应的外部中断请求线被屏蔽。
  • 可以通过软件设置寄存器中的内容,确定每一个中断请求的屏蔽状态。
  • 设置IMR还可以改变中断请求优先级。

2.1.4.中断服务状态寄存器ISR

  • ISR是一个八位寄存器,记录了当前正在被服务的所有中断级,包括尚未服务完而被更高优先级打断的中断级。
  • 若CPU响应了IRi的中断请求,则ISR中与之对应的第i位ISRi被置一,同时IRR中相应位IRRi清零。
  • 该中断处理结束前,要使用指令清除ISR中的这一位。
  • ISR中的内容可以被CPU读出。

2.1.5.优先权处理器

  • 优先权处理器用于识别和管理各中断请求信号的优先级别。
  • 当几个中断信号同时出现时,优先权处理器根据控制逻辑规定的优先级规则判断请求信号的最高优先级。
  • CPU响应中断请求时,把优先权最高的IRR中的1送入ISR。
  • 当8259A芯片正在为某一级中断服务时,如果出现新的中断请求,则由优先权处理器判断新出现的中断请求的优先级是否高于正在处理的那一级,如果是则进入多重中断处理。

2.1.6.控制逻辑

  • 8259A的控制逻辑电路中,有一组初始化命令字寄存器ICW1-ICW4和一组操作命令字寄存器OCW1-OCW3。
  • 初始化命令字在系统初始化时置入,工作过程中保持不变。
  • 操作命令字在工作过程中根据需要设定。
  • 控制逻辑电路按照编程设定的工作方式管理8259A的全部工作。

2.1.7.数据总线缓冲器

  • 这是一个八位的双向三态缓冲器,是8259A与系统数据总线的接口。
  • 8259A通过数据总线缓冲器接收CPU发来的控制字,也通过数据总线缓冲器向CPU发送中断类型代码和状态信息。

2.1.8.读写控制逻辑

这个电路控制8259A与CPU交换信息的方向,决定访问8259A的哪个寄存器。

2.1.9.级联缓冲/比较器

  • 级联缓冲比较器的作用:当系统需要扩展而使用多个8259A时,要有一个8259A作为主器件而其他的为从器件。级联缓冲比较器用于在级联方式的主从结构中控制8259A的级联。
  • #SP/#EN引脚:#SP/#EN信号接高电平时,该8259为主器件;#SP/#EN接低电平时,开启双向缓冲器,该8259A作为从器件。
  • CAS2-CAS0引脚:8259A主从芯片之间专用的总线。对于主8259A,CAS2-CAS0是输出线,用于在CPU响应中断时输出从片选择代码,表示哪一个从器件的中断请求被响应;对于从8259A,CAS2-CAS0是输入线,用于接收主器件送来的从片选择代码。

2.2.8259A的工作方式

2.2.1.8259A的工作过程

  1. 中断源在中断请求输入端IR0-IR7上提出中断请求;
  2. 经过IMR屏蔽后得到的最终中断请求被锁存在IRR中,并将结果送到优先权电路进行判优排序;
  3. 控制逻辑接收中断请求,向CPU输出INT信号。
  4. CPU从INTR引脚接收来自8259A的INT信号,进入连续两个INTA周期;
  5. 优先权电路检测出优先权最高的中断请求位,设置ISR中的对应位,清除IRR中的对应位;
  6. 如果8259A作为主控中断控制器,则在第一个INTA周期将级联地址从CAS0-CAS2送出。如果8259A是单独使用或由CAS0-CAS2选择的从属控制器,就在第二个INTA周期将一个中断类型号输出到低8位数据总线上;
  7. CPU读取该中断类型号,转移到相应的中断服务程序;
  8. 在中断处理结束前,中断处理程序向8259A发送一条EOI命令,使得ISR相应位复位,本次中断到此结束。

2.2.2.8259A的优先权管理

8259A的两种确定优先权的方法:固定优先级和循环优先级。

2.2.2.1.固定优先级

固定优先级概述:固定优先级中,各个中断源的优先级由它所连接的引脚编号决定,一旦连接,那么它的优先级就已经确定。

固定优先级分类:固定优先级可以分为全嵌套方式和特殊全嵌套方式两种。

全嵌套方式

  • 8259A最常用的工作方式,也是默认方式。
  • 该方式下中断优先权从IR0-IR7逐级递减。
  • 系统中只有一片8259A时常常采用这种方式。

特殊全嵌套

  • 特殊全嵌套方式一般用于8259A级联的情况。
  • 系统中有多片8259A时,主片必须采用特殊全嵌套方式,从片可以采用全嵌套方式。
  • 工作原理:从片上的8个中断请求通过它的INT引脚连接到主片上某个中断请求输入端IRi上。从主片的角度看,从片上的8类中断都来自于一个引脚,因此认为是同一种优先级。如果主片采用全嵌套方式,则不会响应来自同一个引脚的第二次中断请求(如从片第二次中断请求的优先级更高,则从片会两次向主片申请中断);采用特殊全嵌套方式后会响应该请求。

2.2.2.2.循环优先级

循环优先级概述:在这种方式下,各个中断申请具有大体相同的优先级,具体有优先权自动循环方式和优先权特殊循环方式两种方法。

  • 自动循环方式:初始化IR0优先权最高,IR7优先权最低;当某一个中断源得到中断服务后,它的优先权就降为最低,而其后一个中断源的优先权升级为最高。
  • 特殊循环方式:与优先权自动循环的唯一区别在于通过编程对初始优先权进行设置。

2.2.3.中断屏蔽方式

中断屏蔽请求的实现:8259A输入的每一个中断请求都可以根据需要决定是否屏蔽,这是通过编程写入相应的屏蔽字实现的,具体可以分为普通屏蔽方式和特殊屏蔽方式两种。

  • 普通屏蔽方式:将中断屏蔽字写入IMR。如果某一位写入1表示中断请求被屏蔽,如果写入0表示中断请求开放。
  • 特殊屏蔽方式:为了实现在执行较高优先级的中断服务时,由于某种特殊原因希望开放较低级别的中断请求。这种方式是通过用屏蔽字对IMR中的某一位置一时同时使得ISR中的对应位清零实现的。

2.2.4.中断结束方式

中断结束概述:中断服务完成后,必须给8259A发一个命令,使得这个中断级在ISR中的相应位清零,表示该中断处理已经结束。

中断结束分类:中断结束方式可以分为自动中断结束方式和非自动中断结束方式。

自动中断结束方式(AEOI)

  • 系统一旦进入中断响应,8259A就在第二个中断响应周期的INTA信号的后沿,自动将ISR中被响应的中断级的对应位清零。
  • 这是一种最简单的中断处理方式,可以通过初始化命令字来设定。
  • 这种方式只能用于系统中只有一个8259A,且多个中断不会嵌套的情况。

非自动中断结束方式(EOI)

  • 工作原理:中断服务完成后,必须给8259A发出一个命令,使得这个中断级在ISR中的相应位清零,表示中断已经结束。具体做法有两种。
  • 一般的中断结束方式:指令内不指定清除ISR中的哪一位,由8259A自动选择优先权最高的位。一般来说,首先结束的中断服务就是当前优先级最高的中断,这种实现方法比较简单。
  • 特殊的中断结束EOI命令:在指令内指明要清除ISR中的哪一位。

2.3.8259A的编程

编程的作用:8259A是可编程的中断控制器,使用前需要根据使用要求和硬件连接方式对其进行编程。

命令字的分类:CPU送给8259A的命令分为初始化命令字ICW和操作命令字OCW两类。

2.3.1.初始化命令字

  • 初始化命令字在系统初始化时写入,用来设置8259A的基本工作方式。
  • 初始化命令字共有ICW1-ICW4共四个,每一个都存储在一个八位存储器中。
2.3.1.1.初始化命令字ICW1
  • A0=0,D4=1:初始化命令字ICW1的标志。无论何时,当CPU向8259A送入一条A0=0,D4=1的命令时,该命令被译码为ICW1,它启动8259A的初始化过程,相当于RESET信号的作用。自动完成以下操作:

①清除中断屏蔽寄存器IMR;
②设置以IR0为最高优先级,依次递减,IR7为最低优先级的全嵌套方式,固定中断优先权排序。

  • D3(LTIM):中断请求信号触发方式设定。D3=1表示电平触发,D3=0表示边沿触发。
  • D1(SNGL):单片/级联方式设定。D1=1表示单片使用,D1=0表示级联使用。
2.3.1.2.初始化命令字ICW2
  • A0=1:对ICW2编程的标志。
  • D7-D3:设定中断类型代码的高5位。

ICW2应该紧接在ICW1后写入奇地址端口。

2.3.1.3.初始化命令字ICW3
  • 初始化命令字ICW3专用于级联方式的初始化编程,单片方式不需要写入ICW3。
  • 级联方式需要对主片和从片分别写入ICW3命令,主片和从片的ICW3有不同的格式。

主片ICW3初始化

  • A0=1:对ICW3编程标志;
  • S0-S7:表示中断源的类别。Si=1表示对应的IRi输入来自从片8259A的INT输出;Si=0表示对应的IRi输入来自中断源。

从片ICW3初始化

  • D2-D0:从片ID码(标识码),用来说明这一从片8259A的中断请求输出(INT引脚)连接在主8259A的哪一个IRi端。
  • A0=1:对ICW3编程标志。
2.3.1.4.初始化命令字ICW4
  • A0=1:对ICW4编程标志。
  • D1:选择中断结束方式。D1=1表示自动中断结束方式,D1=0表示非自动中断结束方式。
  • D2:与缓冲位BUF一起使用。在缓冲方式下,D2用于设定8259A是主片还是从片。D2=1表示为主片,D2=0表示为从片。在非缓冲方式下无意义。
  • D3(BUF):设定是否采用缓冲方式。D3=1表示采用缓冲方式,这时#SP/#EN用作控制缓冲器的信号;D3=0表示非缓冲方式。
  • D4:选择中断嵌套方式。D4=0,8259A工作于全嵌套方式;D4=1,8259A工作与特殊全嵌套方式。
2.3.1.5.8259A初始化

CPU对8259A的初始化操作要求有一定的顺序

  1. 依次写入命令字ICW1和ICW2。
  2. ICW1中的SNGL(D1)=0时,需要送ICW3。主片和从片都需要送ICW3且格式不同。
  3. 送入ICW4。

注意事项:级联方式下,每一片8259A都要独立地按上面的顺序写入初始化命令字。

2.3.2.操作命令字

操作命令字的写入时间:初始化后的任何时刻都可以向8259A中写入操作命令字,用来动态地控制8259A的操作。

操作命令字的作用:修改和设置8259A管理中断的方式。8259A共有OCW1-OCW3三个操作控制字。

写入要求:OCW不是按照既定流程写入,而是按照需要选择性写入。

2.3.2.1.操作控制字OCW1

控制字功能:OCW1用来设置中断屏蔽寄存器IMR的值,确定对8259A输入信号IRi的屏蔽操作。

控制字格式

  • A0=1:对OCW1编程的标志;
  • M7-M0:将OCW1中的某一位置一,则IMR中相应位也置一,从而屏蔽相应的输入信号IR。
2.3.2.2.操作控制字OCW2

控制字功能:设置和改变中断优先级模式;发送中断结束命令(EOI命令)。

控制字格式

  • A0=0,D4=0,D3=0:OCW2的标志;
  • D7:优先权模式控制位。D7=0表示固定优先权,D7=1表示循环优先权。
  • D5(EOI):中断结束命令位。EOI=1表示向8259A发出中断结束命令;EOI=0时该位不起作用。
  • D2-D0:这三位的编码分别对应IR0-IR7。
  • D6:指出D2-D0编码是否有效的有效位。
2.3.2.3.操作控制字OCW3

控制字功能:OCW3控制字主要用来设置中断屏蔽方式,发查询和读出命令。

控制字格式

  • A0=0,D4=0,D3=1:对OCW3编程标志(D7未使用)。
  • D6:设置/保持屏蔽方式命令位。D6=1时表示根据D5位重新设置屏蔽方式;D6=0时保持原来的屏蔽方式。
  • D5:与D6位配合设置屏蔽方式。当D6=1且D5=1时,设置特殊屏蔽方式;D6=1且D5=0时恢复一般屏蔽方式。
  • D2:查询命令位。D2=1时CPU向8259A发送查询命令;D2=0时不发送查询命令。
  • D1和D0:读8259A状态的功能位。D1D0=10时,下一个脉冲时读IRR;D1D0=11时,下一个脉冲读ISR。D1=0时这两位不起作用。

3.中断方式输入输出

3.1.中断方式输入输出程序设计

中断方式程序的两个模块

  • 主程序:完成输入输出所需要的初始化工作和结束工作。
  • 中断服务程序:完成数据传输和输入输出控制工作。

3.1.1.主程序设计

主程序初始化的任务

  • CPU初始化:设置堆栈,设置中断向量,开放中断。
  • 中断控制器8259A初始化:选择工作方式,设置优先级规则,清除相应的屏蔽位。
  • 接口的初始化:将接口恢复到初始状态,对于可编程的接口,要设置接口的工作方式,设置接口的中断开放位等。
  • 中断服务程序的初始化:设置中断服务程序使用的缓冲区指针,计数器,状态位等。

3.1.2.中断服务程序设计

  1. 保护现场:把所有中断服务程序要使用到会改变值的寄存器压入堆栈(保护内容需要包括段寄存器)。
  2. 开放中断:允许CPU响应优先级更高、更紧急的中断。
  3. 装载数据缓冲区指针、计数器:在中断方式下,它们的值平时应存放在内存中,使用前装入对应的寄存器,这些寄存器因此需要在保护现场阶段压入堆栈保存。
  4. 输入输出处理
  5. 关闭中断:中断服务进入结束阶段,关闭中断以避免不必要的中断嵌套。
  6. 恢复现场
  7. 中断返回

中断服务程序设计注意事项

  • 中断服务程序要短小精悍,运行时间短。执行一次中断服务程序的时间要大大小于两次中断的时间间隔。对于耗费时间多的数据处理工作应该交给主程序完成。
  • 应该避免在中断服务程序内进行DOS调用。

例题

1.8259工作在优先级自动循环方式,则IRQ4的中断请求被响应并且服务完毕以后,优先级最高的中断源是 (B)。

A.IRQ3
B.IRQ5
C.IRQ0
D.IRQ4

解析:当8259A工作在优先级自动循环方式时,每有一个引脚的中断请求被响应后,紧随其后的一个引脚获得最高的优先级。因此,本题中IRQ4被响应后,IRQ5获得最高的优先级。

2.CPU响应INTR引脚上来的中断请求的条件是(B)

A.IF=0
B.IF=1
C.TF=0
D.TF=1

解析:INTR引脚是可屏蔽中断引脚,而CPU可以通过中断标志位IF来选择是否响应来自INTR引脚上的中断请求。当IF=1时表示响应可屏蔽中断请求,当IF=0时表示不响应可屏蔽中断请求。

3.8259芯片共有 (B)个初始化命令字。

A.3
B.4
C.6
D.7

解析:8259芯片共有4个初始化命令字ICW1-ICW4以及3个操作命令字OCW1-OCW3。

4.如果对从片8259写入的ICW2=70H,则该从片IR5引脚所对应的的中断类型码是(D)。

A.103H
B.0D0H
C.76H
D.75H

解析:8259中的初始化命令字ICW2用于设定中断类型代码的高五位。本题中ICW2=70H,转换为二进制即为01110B,而中断类型代码的后三位由引脚决定,IR5对应的后三位为101B。将高五位和低三位进行拼接后得到完整中断类型码,即为01110101B,转换为十六进制即为75H。

5.8259芯片中,中断结束是特指将(C)中相应位复位(清除)的动作。

A.IMR
B.IRR
C.ISR
D.以上都不对

解析:IMR是中断屏蔽寄存器,记录连接的每一个中断请求是否被屏蔽;IRR是中断请求寄存器,用来锁存外设的中断请求信息;ISR是中断服务状态寄存器,用来记录当前所有已经开始服务但是还未服务完成的中断。当中断结束时,需要将ISR中的对应位进行清零。

6.屏蔽IR1和IR3的中断申请,写出OCW1。(00001010)

解析:8259A中,操作字命令字OCW1用于设置需要屏蔽的引脚。OWC1中哪一位为1表示屏蔽相应的引脚。因此如果需要屏蔽IR1和IR3,则OCW1为00001010。

7.如果ICW2为A0H,则IR2和IR4的中断类型号是?(A2H和A4H)

解析:8259A中,初始化命令字ICW2用于设定中断类型号的高五位。此处ICW2的值为A0H,转换为十六进制即为10100B;中断类型号的后三位与IR引脚编号一一对应,因此IR2和IR4对应的中断类型号后三位分别是010B和100B。将中断类型号的前五位和后三位进行拼接,可以分别得到IR2和IR4的中断类型号分别为10100010B和10100100B,转换为十六进制即为A2H和A4H。

相关文章:

  • 超详细的水果FL Studio21最新版更新全功能详细介绍!80项更新与改进!
  • RabbitMQ实现订单超时设计思路、以及在订单过期临界点支付成功如何处理
  • 高阶测试开发必备技能: k8s入门
  • 2022-12-6-Cmake工程转VS环境开发
  • 一个redux使用案例模板
  • [安装] Doris集群搭建环境
  • 汽车电子之功能安全介绍
  • 刷爆力扣之非递减序列
  • GeoGebra 與數學探索 1 GeoGebra 入門到進階之整體介紹
  • 代码随想录算法训练营第五十六天|583. 两个字符串的删除操作、72. 编辑距离
  • 大数据给企业带来了哪些挑战
  • 加载器、反射、xml、DTD、schema、注解、单元测试
  • 计算机毕业设计Java能源控制系统(源代码+数据库+系统+lw文档)
  • 电力系统潮流计算与PowerWorld仿真(牛顿拉夫逊法和高斯赛德尔法)(Matlab实现)
  • OushuDB数据库基本用法(下)
  • CBAP.BABOK.商业分析.业务分析.概述
  • zookeeper四字命令_java培训
  • Pr:导出设置之音频
  • 前端面试前端性能优化篇
  • 计算机毕业设计Java校园资料分享平台(系统+源码+mysql数据库+lw文档)
  • 配置安全的linux-apache服务器(5)
  • 【栈】数据结构栈的实现
  • BPMP 需求
  • 软件测试(概念Ⅰ) · 软件测试的基本概念 · 什么是需求 · 测试用例的概念 · 软件错误(bug)的概念
  • 理论一:当谈论面向对象的时候,我们到底在谈论什么?
  • 带你三分种了解网络用语之网络层、传输层
  • 元宵节:css画灯笼
  • 异步编程实践
  • Go XORM学习
  • 【golang/go语言】go语言中包的使用、Init()函数、协程和接口
  • 2023年重庆高考588分能报什么大学 588分能上哪些院校
  • 2023年山东春季高考考试时间 什么时候考试
  • 单招被调剂可以不去吗 还能高考吗
  • 2023湖南双一流大学名单 湖南哪所学校好
  • 中专考大学要考什么科目 内容有哪些
  • 预计2023国家专项计划录取分数线是多少
  • 2021年浙江工商大学杭州商学院学费是多少 各专业收费标准
  • 神经科学专业课程有哪些
  • 2023软件工程专业课程有哪些 就业方向是什么
  • 现在进行时结构是什么 怎么构成的