微型计算机技术 教 学 指 导(五) 太原广播电视大学 郭建勇
第5章 微计算机中处理器与I/O设备间 数据传输的控制方法 5.1.1 程序方式及其特点 本章重点介绍微机系统中处理器与I/O设备间数据传输控制的两种主要方法,即中断和DMA方式。并结合典型的中断控制器和DMA控制器的学习,掌握两种传输方式的原理,以及在微机系统中的使用方法。 5.1 中断的基本概念 5.1.1 程序方式及其特点 程序方式包括无条件传送和条件传送两种方式: 无条件传送方式: 适用于CPU不需要查询这些设备所处状态,直接执行IN或OUT指令就可以完成与I/O设备之间的数据传输。 条件传送方式又称查询方式,查询方式的特点是: (1)外设的接口电路中需包括反映当前状态的电路,而且CPU可以通过其端口读取状态信息。 (2)交换数据前,先查询外设的状态。如果末准备好,则程序重复检测外设状态,直到外设已经准备好条件,CPU才由IN或OUT指令完成一次数据传输。 程序方式控制数据传输,方法简单、硬件实现容易,CPU的利用率低。
5.1.2 中断系统的功能与组成 中断的慨念:当外部请求服务时,暂时中断当前主程序,转而执行中断处理程序,完成后自动返回被中断的主程序继续运行。 1.中断系统应具有的功能 (1)适用于多个中断源,能用软件进行屏蔽控制。 (2)具有中断优先级判别的功能。 (3)具有中断嵌套的功能。 (4)响应中断后能自动转向中断服务程序,结束后自动返回主程序。 2.中断系统的组成 (1)CPU内部中断处理电路。实现对中断请求信号的检测、发出中断响应信号、保存主程序的断点、自动转向中断服务程序、结束中断后自动返回主程序等功能。 (2)中断控制器。用于管理系统中的多个中断源。主要承担中断优先级的裁决、中断嵌套、中断的屏蔽以及决定中断结束的方式等功能。 (3)中断方式传输的接口电路:包括提供中断请求信号和接收中断响应信号等的接口电路。 (4)中断处理程序。中断系统除硬件电路外,还需要软件共同完成中断处理的全过程。
(1)当外设准备好,发选通信号,数据存入锁存器;中断请求触发器置1; (2)若屏蔽触发器置0,向CPU发出中断请求信号INT; (3)CPU接到中断请求后,若CPU内部允许中断,则在执行完当前指令后响应中断,转向执行中断服务程序。
5.2 中断控制器 5.2.1 8259A的内部结构和外部引脚定义 1.8259A功能和内部结构
各组成部分的功能如下: (1)中断请求寄存储器(IRR) 8位。它寄存外部设备提出的中断请求。 (2)优先权裁决器。对IRR中有请求的中断源以及正在服务的中断源进行判别,以裁决出当前优先级最高的中断请求。 (3)中断在服务寄存器(ISR)8位。与IRR的各位相对应,记录了当前正在中断处理的中断请求。 (4)中断屏蔽寄存器(IMR)。IMR为8位,对应位置1,即可屏蔽IRR中相应位的中断请求。 (5)总线缓冲器。与系统的数据总线连接,是8位双向三态缓冲器。对8259A写入命令字,以及读取状态信息都是通过该缓冲器传送的。 (6)读/写控制逻辑。该逻辑电路接收端口地址信号和CPU的读写控制信号IOW和IOR产生相应的控制信号,控制命令字的写入和状态字的读取。 (7)级联缓冲器和比较器。用来存放和比较系统中从片8259A的标识码。 (8)控制逻辑。控制逻辑中有一组寄存器,用来寄存8259A的命令字,实现对多种工作方式的控制。同时还包括有中断请求和响应的电路,在有中断请求时向CPU发出中断请求,同时接收CPU响应中断时发出的中断响应信号。
2.8259A的外部引脚信号 8259A为28脚双列直插封装。 D7 ~ D0 双向数据线。 RD:输入,读命令信号。与控制总线相连。 WR:输入,写命令信号。与控制总线相连。 CS:输入,片选信号。与地址译码电路相连。 A0:输入,地址线。8259A占用相邻两个端口 地址,A0与CS配合,A0=1时选中奇地址, A0=0 时选中偶地址,而且要求偶地址 低,奇地址高。PC机中主片为20H和21H。 CAS2 ~ CAS0:级联线。在主从结构中,主、 从片8259A的CAS2一CAS0。对应连接。 SP/EN:双向信号线。有两个功能,作为输入时,主片8259A的此信号线接 高电平,从片8259A的此信号线接低电平。做输出时,如果8259A采用缓冲方 式工作,则SP/EN信号作为数据线驱动器的使能信号。 INT:中断请求信号。输出,与CPU的INTR引脚连接,向CPU发出中断请求。 INTA:中断响应信号。输入,与CPU的中断响应输出相连。
优先级自动循环方式有利于平衡各个中断源的响应几率:对于几个中 断源地位几乎相等的情况,默认的优先级总是使得排在前面的中断源 5.2.2 8259A的工作方式 1.优先级方式选择 (1)全嵌套方式。亦称固定优先级方式。在8个中断请求IR0~IR7中,IR0为最高级,依次为IR1,IR2,…,IR7为最低。在中断服务过程中禁止同级和优先级低于本级的中断请求。 (2)特殊全嵌套方式。它与全嵌套方式基本相同,只是在特殊全嵌套方式下,当某级正在处理中断时,同时可以响应本级的中断请求,实现对同级中断的嵌套。 (3)优先级自动循环方式。初始化时,优先级次序为IR0、IR7,IR0最高。IR7最低。当某级中断响应后,则优先级降为最低。例如,IR4响应后的优先级次序变为IR5,IR6,IR7,IR0,IR1,IR2,IR3,IR4。 (4)优先级特殊循环方式。开始时由编程指定最低优先级的中断请求, 其他同优先级自动循环方式。例如,初始化时指定IR6为最低优先级,则优先级次序为:IR7,IR0…….IR6。 优先级自动循环方式有利于平衡各个中断源的响应几率:对于几个中 断源地位几乎相等的情况,默认的优先级总是使得排在前面的中断源 得到响应的几率较大。但是在自动循环方式中,先响应的中断源变为 最低,则提升了后面的优先级,从而平衡了各个中断源的响应几率。
2. 屏蔽中断方式选择 (1)普通屏蔽方式。将操作命令字OCW1写入到片内屏蔽寄存器IMR中,例如IMR=00001100,则IR2,IR3的中 断请求被禁止。 (2)特殊屏蔽方式。在本分式下,当某个中断正在被响应时,允许较低级别的中断源的中断请求。暂时中断正在执行的中断服务程序。 3.中断处理结束方式选择 当中断存服务寄存器ISR中某位ISRn为1时,表示相应的中断请求IRn正在服务中;中断服务结束时,则应将ISRn清0。 (1)白动中断结束方式。8259A在收到CPU的中断响应后,自动将ISR中的正在处理的ISRn位清0。仅适用单片8259A和中断无嵌套的情况。 (2)一般的中断结束方式。在中断服务程序返回前,执行一条一般中断结束命令,将ISR中当前最高的置1位清0。适用全嵌尝方式。 (3)特殊中断结束方式。在中断结束前,向8259A发出一条特殊中断结束命令;根据命令字的编码。将ISR中的指定位清0,以结束中断。 4. 中断请求信号触发方式选择 (1)边沿触发方式:正跳变信号,表示有中断请求。出现正跳变信号后,允许高电平保持。 (2)电平触发方式:高电平信号表示有中断请 求。该请求电平必须在中断服务程序中的中断结束命令执行前予以撤消。
5.2.3 8259A的命令字 1.初始化命令字 初始化命令字共有ICW1~ICW4 四个。 (1)ICW1的格式和定义。 ICW1必须碍到8259A的偶地址端口。 A0 D7 D6 D5 D4 D3 D2 D1 D0 ICW1 0 任意值 1 中断请求电平触发 1 单片 LTIM SNGL 0 中断请求边沿触发 0 多片 1 LTIM ADI SNGL IC4 不用 恒为 1 为了扩大中 断源的数目 8259A可以 多片级连。
(2)ICW2的格式和定义。 ICW2用来设置中断类型码,必须写到8259A的奇地址端口。ICW2用来指定8259A的8个中断请求IR0—IR7的中断类型码。 A0 D7 D6 D5 D4 D3 D2 D1 D0 ICW2 0 其中T7—T3由程序写入,最低3位根据正在响应的中断请求IRn的n值自动填入。 例如:ICW2为40H,则所对应的中断类型码为40H,41H,42H,43H,44H,45H,46H,47H。 (3)ICW3的格式和定义。 8259A作为主片和从片的ICW3格式和含义是不同的,ICW3必须写到8259A的奇地址端口。 8259A作为主片的格式: A0 D7 D6 D5 D4 D3 D2 D1 D0 ICW3 0 主片的IR0~IR7的某个引脚上连接从片8259A,则该位为l,反之为0。 T7 T6 T5 T4 T3 IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0
8259A作为从片的格式: A0 D7 D6 D5 D4 D3 D2 D1 D0 ICW3 1 ID2、ID1、ID0的值取决于本从片的INT输出端连到主片哪个IR输入端。如连到IR7,则ID2,ID1,ID0=111。 从片的CAS7~CAS0接收到主片8259A发来的编码,将该码与从片本身的ICW3中的ID2~ID0比较,若相等,则在中断响应过程中将自己的中断类型码发送到CPU。 (4)ICW4的格式和定义:ICW4必须写入到8259A的奇地址端口 A0 D7 D6 D5 D4 D3 D2 D1 D0 ICW4 1 1 特殊全嵌套方式 0 X 非缓冲方式 SFNM = BUF,M/S = 1 0 从片缓冲方式 0 非特殊全嵌套方式 1 1 主片缓冲方式 1 中断自动结束方式 1 8088/8086系统 0 一般中断结束方式 0 8080/8085系统 ID2 ID1 ID0 SFNM BUF M/S AEOI uPM AEOI = uPM =
对初始化命令字编程时应注意到: 2.8259A的操作命令字 (1)初始化命令字必须按规定的奇、偶地址端口写入。 (2)ICW1~ICW4写入的顺序是固定的,不可颠倒。 (3)ICW1、ICW2是必须设置的,但ICW3、ICW4根据工作方式的需要设置。 2.8259A的操作命令字 8259共有3个操作命令字OCW1—OCW3。 (1)OCW1的格式和定义。这是一个中断屏蔽命令字,OCW1必须写入到8259A的 奇地址端口。 OCW1的格式如下: A0 D7 D6 D5 D4 D3 D2 D1 D0 OCW1 1 OCW1中某位为l时,其对应的中断请求IRn被屏蔽,对应于各位为0的中断请求被允许参与优先权的裁决。 M7 M6 M5 M4 M3 M2 M1 M0
(2)OCW2的格式和定义。OCW2必须写入到8259A的偶地址端口。 OCW2的格式如下: A0 D7 D6 D5 D4 D3 D2 D1 D0. OCM2 0 1 中断优先级循环 1 L2~L0 有效 1 非自动结束中断 R = SL= EOI= 0 中断优先级非循环 0 L2~L0 无效 0 自动结束中断 OCM2控制位的功能组合 R SL EOI 功 能 0 0 0 自动结束中断 、结束优先级自动循环 0 1 0 无意义 1 0 0 中断优先级自动循环方式 1 1 0 优先级特殊循环方式 0 0 1 一般中断结束命令 0 1 1 特殊的中断结束命令 1 0 1 清除当前中断处理程序对应的ISRn,优先级循环方式 1 1 1 清除L2~L0指定的ISR中的特定位,优先级特殊循环方式 R SL EOI L2 L1 L0 一般来讲: EOI=0指定优先 级循环方式。 EOI=1指定中断 结束的命令。
(3)OCW3的格式和定义。OCW3的功能是设置或撤消特殊屏蔽方式,设置中断查 询方式以及设置对8259A内部寄存器读出的命令。 OCW3必须写入到8259A的偶地址端口。 OCW3的格式如下: A0 D7 D6 D5 D4 D3 D2 D1 D0 OCW3 0 ESMM SMM RR RIS 1 1 进入特殊屏蔽方式 1 0 在下条指令读取IRR 1 0 恢复到一般屏蔽方式 1 1 在下条指令读取ISR 1 查询命令 0 不查询命令 OCW3中的P位称为查询方式位,P=1时,使8259A设置为中断查询工作方式。当发出查询命令后,下一条输入指令,CPU就可读取8259A中ISR寄存器的值。OCW3的PR=l,RIS=0时,则()CW3发出后的下一条输入指令就可读取IRR寄存器的值。当RR=1,RIS=1时,则下一条输人指令就可读取ISR寄存器的值。 OCW1~OCW3是在应用程序中设置的,写的次序没有严格规定。 ESMM SMM 1 P RR RIS P =
5.2.4 PC机的 中断控制器及 用户中断编程 在80x86CPU 的微机系统中,使 用了两片8259A构 成了8259A的级联 中断系统,用于管 理15级外部的中断。 右图为PC机中断 系统原理图 用户中断 IRQ9
图中可知,15级可屏蔽中断中有4个已由系统占用,用于系统的日时钟、键盘、实时钟以及协处理器的中断服务(用箭头标出)。 系统分配给主片8259A的端口地址为20H和21H,从片8259A的端口地址为AOH和A1H。系统加电后,由BI()S对两片8259A进行初始化,其设置的工作方式如下:(1)中断优先级采用全嵌套方式。两片的中断请求输入端IR0—IR7。IR0优先级最高,IR7为最低。对于图中的级联系统,其优先级的次序从高到低依次为:主片IR0,IR1,从片IR0一IR7,主片IR3,IR4,IR5,IR6,IR7。 (2)采用普通的中断屏蔽方式。 (3)采用一般的中断结束方式。 (4)中断请求采用边沿触发方式。 图中可知,15级可屏蔽中断中有4个已由系统占用,用于系统的日时钟、键盘、实时钟以及协处理器的中断服务(用箭头标出)。 中断控制器请求输入端分配情况 主8259 中断源 类型码 从8259 中断源 类型码 IRQ2 从8259 0AH IRQ9 用户中断 71H转0AH IRQ3 串口2 0BH IRQ10 保留 72H IRQ4 串口1 0CH IRQ11 保留 73H IRQ5 并口2 0DH IRQ12 保留 74H IRQ6 软盘 0EH IRQ14 保留 76H IRQ7 并口1 0FH IRQ15 保留 77H
2.用户中断的编程 (1)利用微机系统分配给用户使用的“用户中断”入口申请中断: ①用户的中断请求连接到I/O扩展插槽的B4引脚。 ②在应用程序中,利用DOS的功能调用,功能号25H,将中断服务程序的入口地址写入到中断类型OAH的向量表中。 ③在应用程序中向主片8259A写入中断屏蔽字使其IMR D2位置0,向从片8259A写入中断屏蔽字,使其IMR D1位置0。主、从片8259A中IMR的其他位保持原值。 ④中断服务程序结束,返回主程序前,向主片8259A发中断结束命令。 ⑤应用程序结束之前,分别向主、从片8259A写入中断屏蔽字,使主片IMR D2位置1,从片IMR D1位置1,屏蔽用户中断。
(2) 使用外设中断请求入口 具体的编程步骤如下: ①硬件连接。例如,借用并口1(IRQ7),其中断类型码为0FH,中断请求人口端为I/O扩展插槽B21,将用户请求信号连到B21。 ②主程序中,利用DOS功能调用,功能号35H,保存中断类型码0FH的原中断向量。利用DOS功能调用,功能号25H,写入中断类型码0FH及新的用户中断服务程序的入口地址。 ③向主片8259A写人中断屏蔽字,使其IMR D7位置0;允许用户中断。同样也要使IMR的其他位保持原值。 ④中断服务程序结束之前,向主片8259入写入中断结束命令。 ⑤主程序结束前,恢复中断类型码0FH的原中断向量。 ⑥主程序结束前,向主片8259A写入中断屏蔽字。使IMR D7置l。
5.3.1 DMA的基本概念 直接存储器存取(DMA)的传送方式不需要CPU的干预,而是在硬件电路控制下完成I/O设备与存储器之间的数据传输,这种硬件电路称为DMA控制器。 DMA方式与中断方式传送数据相比较有以下的特点: (1)中断方式下, CPU需要执行多条指令,占用一定的时间;而DMA传送1个字节只占用CPU的1个总线周期,占用CPU的时间少。 (2)DMA的响应速度比中断快。I/O设备发出中断请求后,CPU要执行完当前指令后才给予响应,而DMA请求是在总线周期执行完后即可响应。 (3)对于快速的I/O设备,中断方式,其传输速度已无法满足要求。必须采用DMA方式来完成快速I/O设备的数据传送的操作。
5.3.2 DMA的系统组成和工作过程 1.DMA的系统组成 HOLD和HLDA用于DMA方式请求和响应,DMA控制器是DMA传送的核心电路。
(2)DMA控制器接到I/O设备请求后,向CPU发出总线请求信号,请求取得总线控制权。 (1)I/O设备接口向DMA控制器发出请求信号,请求DMA传送。 (2)DMA控制器接到I/O设备请求后,向CPU发出总线请求信号,请求取得总线控制权。 (3)CPU在执行完当前总线周期后,响应请求,向DMA控制器发出总线响应信号;释放总线的控制权,暂停执行主程序,处于等待状态。由DMA控制器取得对总线的控制权。 (4)DMA控制器接到CPU的总线响应信号后,向I/O设备接口发出DMA响应信号。 (5)由DMA控制器发出DMA传送所需的控制信号。当内存储器向I/O设备传送时,DMA控制器向地址总线送出内存地址,并向控制总线发出存储器读 (MEMR)和I/O写(I0W)命令。当执行I/O设备向内存储器传送时,则发出存储器写(MEMW)和I/O读(I0R)命令,完成1个字节的传送。 (6)DMA控制器内部的地址寄存器值加l,字节计数器值减1,如果计数器值不为0,则继续下个地址单元的传送。 (7)当设定的字节数传送完成,结束DMA传送。DMA控制器释放对总线的控制权。CPU重新获得总线的控制权,于是主程序从中断了的当前指令的总线周期开始继续执行。
8237A是由Intel公司研制的可编程DMA控制器,基本功能如下: (1)具有独立的4个DMA通道,每个通道可以请求或屏蔽DMA传送。 (2)四个DMA通道具有不同的优先级。通过编程可以工作在固定优先级方式,也可以是循环优先级方式。 (3)提供4个工作模式:单字节传送、数据块传送、请求传送和级联传送,通过编程进行选择。 (4)提供3种DMA传送类型:写传送、读传送和校验传送。 (5)提供外部硬件DMA请求和软件DMA请求两种方式。
8237A内部结构框图
8237A内部电路由以下各部分组成: (1)DMA通道。8237A内部包含有 4个独立的通道,通道0一通道3。 (2)DMA通道公用的寄存器。 (3)定时和控制逻辑。 (4)优先级编码电路。 2.8237A的外部引脚定义(见教材) 5.4.2 8237A的工作模式和传送类型 1.工作模式 8237A有四种工作模式: 单字节传输模式、 块传输模式、 请求传输模式 级联传输模式。
(1)单字节传输模式。在这种模式下,完成1个字节传送后,字节计数器减1,地址寄存器增l(或减1)。然后8237A释放总线,CPU至少可以获得1个总线周期的时间。由于DREQ继续维持有效电平,因此8237A再次发出总线请求,并获得总线控制权而继续进行传送,直到字节计数器为0时结束。 (2)块传送模式。在此模式下进行DMA传送后,连续传送数据,直到指定的字节数传送完毕才释放总线。DREQ请求信号仅保持到DACK变成有效时即可。 (3)请求传输模式。与块传送模式类似。但是当DREQ的信号变为无效时,则暂停DMA传送;当DREQ再次变为有效时,则DMA传送从暂停处开始卑继续传送,直至字节计数器为0时结束传送。传送暂停期间,CPU可以进行操作。 (4)级联传输模式。这种方式可以实现DMA系统的扩展,几个8237A可以进行级联工作。
2.传送类型 8237A有3种传送类型:读传送、写传送和校验传送。 读传送: 写传送: MEMR IOW DMA控制器 内存 I/O 设备 数据 MEMW IOR DMA控制器 内存 I/O 设备 数据 校验传送:虚 拟传送,用于对 器件的测试。 内存到内存的传送: 实现数据块在不同 内存区间的传送。
每个通道包含有1个16位的基地址寄存器和1个16位的当前地址寄存器。 基地址寄存器:存放DMA传送时的存储器地址初值 1.地址寄存器 每个通道包含有1个16位的基地址寄存器和1个16位的当前地址寄存器。 基地址寄存器:存放DMA传送时的存储器地址初值 当前地址寄存器:记录当前地址,每次传送后寄存器的值增1或减1。 2.字节寄存器 每个通道包含有1个16位的基本字节寄存器和1个当前字节计数器。 基本字节寄存器:用来存放DMA传输的字节数初值。 当前字节计数器:初始化时写入字节数初值,每次传送后,当前字节计数器值减1。
3. 命令寄存器 8237A命令寄存器的格式 0 DACK低电平有效 0 禁止内存间的传输 1 DACK高电平有效 1 允许内存间的传输 0 DREQ高电平有效 1 内存间传输源地址 1 DREQ低电平有效 无意义 0 不扩展写信号 0 允许8237工作 1 扩展写信号 1 禁止8237工作 0 固定优先级 0 正常时序 1 循环优先级 1 压缩时序 D7 D6 D5 D4 D3 D2 D1 D0
4.模式寄存器 8237模式寄存器的格式 模式选择: 通道选择: 00 请求传输 00 通道0 01 单字节传输 01 通道1 模式选择: 通道选择: 00 请求传输 00 通道0 01 单字节传输 01 通道1 10 数据块传输 10 通道2 11 级联传输 11 通道3 地址增/减选择 传送类型选择 0 地址增1 00 校验传输 1 地址减1 01 写传输 自动预置功能选择 10 读传输 0 禁止 11 无意义 1 允许 D7 D6 D5 D4 D3 D2 D1 D0
5. 请求寄存器 8237A请求寄存器的格式 6.屏蔽寄存器 DMA请求标志 通道选择 0 复位请求 00 通道0 ;01通道1 0 复位请求 00 通道0 ;01通道1 1 设置请求 10 通道2 ;11通道3 6.屏蔽寄存器 8237A屏蔽寄存器的格式 屏蔽设置标志 通道选择 0 清除屏蔽 00 通道0 ;01通道1 1 设置屏蔽 10 通道2 ;11通道3 D7 D6 D5 D4 D3 D2 D1 D0 不用 D7 D6 D5 D4 D3 D2 D1 D0 不用
7. 多通道屏蔽寄存器 8237A多通道屏蔽寄存器的格式 8. 状态寄存器 8237A状态寄存器的格式 通道0 通道1 1:置1屏蔽位 通道1 1:置1屏蔽位 通道2 0:置0屏蔽位 通道3 8. 状态寄存器 8237A状态寄存器的格式 通道0 通道0 有请求的 通道1 通道1 1:置1屏蔽位 通道置1 通道2 通道2 0:置0屏蔽位 通道3 通道3 D7 D6 D5 D4 D3 D2 D1 D0 不用 D7 D6 D5 D4 D3 D2 D1 D0
9. 暂存寄存器 它是公用的8位寄存器。在存储器到存储器的传送中暂存中间数据。 10. 先后触发器 16位的基本地址(或基本字节)寄存器是分两次写入的。由先后触发器控制写入顺序。先将触发器清0,就能保证先写入低8位,后写入高8位。 11.软件命令 (1)清0先/后触发器命令。对8237A的DMA+0CH端口地址写入00H字节,即可使先/后触发器处于复位状态。 (2)复位命令。对8237A的DMA+0DH端口地址写入00H字节,即可实现对 8237A的总清,其功能与硬件RESET信号复位具有同样功能。 执行复位命令后,命令寄存器、状态寄存器、请求寄存器、暂存寄存器和内部的先/后触发器都被清0,而屏蔽寄存器则被置位。 (3)清屏蔽寄存器。对8237A的DMA+0EH端口写入00H字节,即可将四个通道的屏蔽触发器全清0。
5.4.4 8237A的初始化编程 1. 在进行DMA传送前,先要对8237A进行初始化编程。 (1)写入屏蔽寄存器。 (2)命令字写入到命令寄存器。 (3)模式字写入到模式寄存器。 (4)置0先/后触发器。 (5)写入基地址寄存器和基本字节寄存器。 (6)清除屏蔽。 (7)写入请求寄存器。 2. 8237A的端口地址(祥见教材P197页 表5.3)