第5章输入输出技术.ppt

上传人:本田雅阁 文档编号:2606905 上传时间:2019-04-17 格式:PPT 页数:156 大小:4.85MB
返回 下载 相关 举报
第5章输入输出技术.ppt_第1页
第1页 / 共156页
第5章输入输出技术.ppt_第2页
第2页 / 共156页
第5章输入输出技术.ppt_第3页
第3页 / 共156页
亲,该文档总共156页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第5章输入输出技术.ppt》由会员分享,可在线阅读,更多相关《第5章输入输出技术.ppt(156页珍藏版)》请在三一文库上搜索。

1、第五章 输入输出技术,5.1 概述 5.2 中断方式 5.3 直接存贮器存取(DMA) 5.4 I/O处理器 习 题,5-1 概 述,输入输出是计算机与外部世界进行信息交换不可缺少的手段,在整个计算机系统中占有极其重要的地位。没有输入、输出,计算机将变得毫无意义。由于外部设备种类繁多,要求输入或输出的信号形式、电平、速率千差万别。这些问题在考虑采用输入输出技术时必须认真加以考虑。在本节中,我们将介绍如下几个有关的问题。,一、外设接口的编址方式 在微型计算机系统中,主要采用两种不同的外设地址的编址方式。 1.外设地址与内存地址统一编址。 这种编址方式又称为存贮器映射编址方式。在这种编址方式中,将

2、外设接口地址和内部存贮器地址统一安排在内存的地址空间中。即把内存地址分配给外设,由外设来占用这些地址。用于外设的内存地址,存贮器不能再使用。,2.外设与内存独立编址。 在这种编址方法中,内存地址空间和外设地址空间是相互独立的。例如,在8086 (8088)CPU中,内存地址是连续的1M字节,从00000HFFFFFH。,二、输入输出的基本方法 在微型计算机系统中,主要的输入输出方法有以下四种: 无条件传送。 查询方式。 中断方式。 直接存贮器存取(DMA)方式。,1.无条件传送。 在微机系统中,有一些简单的外设,当它工作时,随时都准备好接收CPU的输出数据或它的数据随时都是准备好的,CPU什么

3、时候读它的数据均可以正确地读到。也就是说外设无条件准备好向CPU提供数据或接收CPU送来的数据。所以CPU可以无条件地向这样的外设传送数据。在CPU与这样的外设交换数据的过程中,数据交换与指令的执行是同步的。故有人也称其为同步传送。,作为无条件数据输入的例子,我们来看一下图5-1所示的电路。在图中,我们把开关K看做是一个简单的外设。K的状态是确定的,要么闭合,要么打开。当计算机通过外设接口读K的状态时,一定会读到指令执行时刻K的状态。,图5-1 开关K的输入接口,无条件数据传送的另一个例子如图5-2表示。图中外设是简单的发光二极管。此外设的接口用锁存器(273)来实现。锁存器是在打入脉冲CP上

4、升沿将输入端D的数据锁存在它的输出Q端。,图5-2 锁存器输出接口,图5-2中,锁存器作为输出接口,其外设地址为0000H。当CPU执行如下指令时,即可将图中两个发光二极管点亮。 MOV AL,81H MOV DX,0000H OUT DX,AL 当执行OUT指令时,CP端会有负脉冲产生,这就可以将数据线上的81H锁存在输出端,从而点亮发光二极管。,2.查询方式。 无条件传送对于那些慢速的总是准备好的外设是适用的,但是,还有许多外设并不是总是准备好的。CPU与这类外设进行数据交换,经常采用程序查询方式。查询方式传送数据过程如下:如果CPU要从外设接收一个数据,则CPU首先查询外设的状态,看外设

5、数据是否准备好,若没有准备好则等待;若外设已将数据准备好,则CPU由外设读取数据。接收数据后,CPU向外设发响应信号,表示数据已被接收。外设收到响应信号之后,即可开始下一个数据的准备工作。,若CPU需要向外设输出一个数据,同样,CPU首先查询外设的状态,看其是否空闲。若正忙,则等待;若外设准备就绪,处于空闲状态,则CPU向外设送出数据和输出就绪信号,后者通知外设CPU送来有效数据。外设接收数据后,向CPU发出数据已收到的状态信息。这样,一个数据的输出过程就告结束。 以上所描述的查询方式工作的输入输出过程,可简要地用图5-3所示的流程图来说明。CPU查询外设的状态而后决定数据的传送。,图5-3

6、查询方式输入输出框图,下面的一段程序是将BL的内容输出到外设上去。 MOV DX,00FFH LOOP: IN AL,DX AND AL,01H JZ LOOP MOV AL,BL OUT DX,AL,图5-4 查询方式I/O接口,图5-5 多外设查询方式工作流程,5-2 中断方式,一、中断的基本概念 1.中断的概念及中断源分类 在CPU执行程序过程中,由于某种事件发生,强迫CPU暂时停止正在执行的程序而转向对该发生的事件进行处理,当对事件的处理结束后又能回到原中止的程序,接着中止前的状态继续执行原来的程序,这一过程称为中断。,2.中断响应的一般过程 在这里主要是介绍可屏蔽中断的响应过程,只要

7、INTR的响应过程清楚了,NMI的响应过程也就很容易理解了。可屏蔽中断的响应过程按其先后顺序分为如下几步: (1) 中断请求 当外部设备要求CPU对它服务时,产生一个有效的中断请求信号,注意是一个电平信号加到CPU的中断请求输入端,即可对CPU提出中断请求。,(2) 中断承认 CPU 在每条指令执行的最后一个时钟周期检测中断请求输入端有无请求发生,而后决定是否对它做出响应。CPU 承认一个中断请求,必须满足以下四个条件: 一条指令执行结束。CPU 在一条指令执行的最后一个时钟周期对请求进行检测,当满足我们要叙述的四个条件时,本指令结束,即可响应。, CPU 处于开中断状态。只有在CPU的IF=

8、1开中断时,CPU 才有可能响应可屏蔽中断请求。 没有发生复位(RESET),保持(HOLD)和非屏蔽中断请求(NMI)。 开中断指令(STI)、中断返回指令(IRET)执行完,还需再执行一条指令才能响应INTR请求。另外,一些前缀指令,如LOCK、REP等,将它们后面的指令看作一个总体,直到这种指令执行完,方可响应INTR请求。,(3) 断点保护 在中断响应过程中,CPU 硬件对断点进行保护。只是不同的CPU断点保护的内容略有不同。8086(88)CPU 在中断响应时硬件自动关中断、将标志寄存器压入堆栈进行保护、将CS和IP的内容压入堆栈加以保护。,有两种常用的确定中断源的方法; 软件查询

9、软件查询中断源,需要硬件支持,其硬件电路简图如图5-6所示。图5-6中,当中断源要提出中断请求时,INT 变为高电平。它经或门加到CPU 上提出中断请求。同时,利用并行接口(可以是三态输入口)将INT的状态输入CPU。,图5-6 查询中断源硬件,一旦中断请求得到响应,在保护断点后,CPU读INT的输入口,利用软件对中断源逐一查询,确定中断源并对相应的中断源进行服务。当然,应当注意到,一旦确定了中断源之后,应当立即将相应的INT状态变低去掉请求信号。查询确定中断源的流程框图如图5-7所示。 中断矢量法 利用不同中断源提供不同中断矢量,从而确定中断源。该方法已得到广泛的应用。在下一节中将仔细加以说

10、明。,图5-7 软件查询确定中断源流程图,(5) 中断服务 我们将用户为进行中断处理所编写的程序统称为中断服务程序。通常用户编写的服务程序包括断点保护是指在中断响应过程中CPU硬件未能保护的那些寄存器的内容,要进行保护。对中断源进行针对其要求的服务,假定采用矢量中断,识别中断源已经解决。最后是恢复断点,开中断,中断返回。上述内容都是用户在编写中断服务程序时需要做的工作。,中断服务程序分为两种情况:第一种是如图5-8所示的、不允许被中断的中断服务程序。这种中断服务程序进入过程是中断源请求,CPU 响应承认、断点保护后进入该服务程序的入口。在入口时刻,CPU 内部硬件已经关中断并进行了部分断点保?

11、护工作。从图5-8流程图中可以看到,本服务程序直到中断返回IRET前才开中断,保证在整个中断服务程序中不会被INTR所中断。 第二种是可以被中断的中断服务程序,其流程图如图5-9是允许被其他优先级更高的中断源中断的服务程序。同样,在流?程图中,在某些CPU最后一次开中断是可以不要的。,图5-8 不允许被中断的中断服务程序流程图,图5-9 允许中断的中断服务程序流程图,(6) 断点恢复 与前面所提到的断点保护相对应,由于中断响应过程中,CPU 硬件本身只保护有限的几个寄存器的内容,而服务程序中可能还会用到其他一些寄存器,这些寄存器的内容就必须加以保护。 (7) 中断返回 中断返回是一条指令,执行

12、这条指令,其操作刚好是CPU硬件在中断响应时自动保护断点的逆过程。即将堆栈的内容依次弹回到IP、CS和FLAG之中。,3.中断优先级及中断嵌套 当微型计算机系统中存在着多个中断源,这些中断源在提出中断请求后,要求CPU对它响应的快慢程度是不一样的。而且从微机系统的设计者的眼光来看,在多个中断源的系统中,设计者会知道哪些中断源特别重要,所要求的响应要快;哪些中断源速度比较慢或重要性比较低,对它们的响应稍微晚一点是可以的。为了能够根据中断源的轻重缓急对多个中断进行合理的响应,在微机中提出了中断优先级的控制问题。中断优先级控制应当解决这样两种可能出现的情况:, 当不同优先级的多个中断 源同时提出中断

13、请求时,CPU 首先响应最高优先级的中断源。 当CPU正在对某一中断源服务时,比它优先级更高的中断源提出中断请求,CPU能够中断正在执行的中断服务程序转向响应并对优先级更高的中断源服务。服务结束再返回原优先级较低的中断服务程序继续执行。,图5-10 中断嵌套示意图,二、8086(88)的中断系统 8086(88)具有功能很强的中断系统,可以处理256个不同方式的中断。每一个中断赋于一个中断向量码,CPU根据向量码的不同来识别不同的中断源。8086(88)中断源分为两大类,下面将逐一加以介绍。 1.内部中断源 8086(88)的内部中断主要是如下五种:,(1) 除法错中断 在8086(88)执行

14、除法指令时,如果所得的商超过了CPU所能表示的最大值, CPU会立即产生一个向量码为0的中断。 (2) 单步中断 8086(88)CPU 的标志寄存器中有一位TF标志陷井状态标志。CPU每执行完一条指令都检测TF的状态。,(3) 断点中断 8086(88)的指令系统中有一条专门用做设置断点的指令,其操作码为单字节CCH。 (4) 溢出中断 当CPU进行算术运算时,如果发生溢出,则会使标志寄存器的OF标志置1。 (5) 用户自定义的软件中断 用户可以用INTn这样的指令形式来产生软件中断。,2.外部中断 8086(88)有两个信号输入端供外部中断源提出中断请求来使用,下面分别予以说明。 (1)

15、非屏蔽中断NMI 如前所述,8086(88)的NMI不受IF标志的限制,只要是CPU在正常执行程序,一旦NMI请求发生,CPU在一条指令执行结束后将对它作出响应。NMI输入为上升沿有效。,(2) 可屏蔽中断请求INTR 通常简称中断请求。它受中断允许标志位IF的约束。只有当IF=1,CPU 才有可能响应INTR请求。INTR是高电平有效。 INTR的响应过程中,在获得中断向量码上与内部中断和NMI中断不同。其时序关系图如图5-11所示。,图5-11 INTR中断响应时序关系,由CPU 在INTR请求响应时,从数据总线上获取由外部中断控制器件提供的中断向量码。而一个字节的中断向量码是可以由用户来

16、加以指定的。一个中断源对应一个8位二进制数所表示的向量码。所以,最多可以区分256个中断源。当然,这些向量码的一部分已分配给内部中断和NMI所用。 综上所述,我们用图5-12表示8086(88)CPU响应中断的处理过程。,图5-12 8086(88)的中断处理过程, 在8086(88)CPU中,内部中断的除法错、溢出、断点及用户自定义软件中断的优先级最高,其次是NMI,比NMI优先级低的是INTR,优先级最低的是单步中断。 从图5-12可以看到,各中断的处理过程大致是相同的。即CPU将标志寄存器压栈保护,暂存寄存器TEMP存放中断前的TF状态,清除IF和TF,而后将CS和IP压入堆栈保护起来,

17、再根据向量码转向相应的服务程序。,3.中断向量表 在前面的叙述中,无论是内部中断还是外部中断,对应每一个中断源都有它相应的中断向量码。前面已经强调,每个中断源的向量码或者由CPU内部硬件决定或者由用户来指定。不同的向量码代表着不同的中断源。在8086(88)内存的开始1k字节建立了一个中断向量表,如图5-13所示。,图5-13 中断向量表,三、中断控制器 在前面的叙述中,曾经提到利用可编程中断控制器是当前最常用的解决中断优先级控制的方法。中断控制器8259具有很强的控制功能,它能对8个或级联对更多的中断源实现优先级控制,利用提供不同的中断向量码来识别这些中断源。为用户构成中断系统提供强有力的手

18、段。,1. 8259的外部引线 可编程中断控制器8259外部引线图如图5-14所示。 D0D7为双向数据线,与系统总线的数据线相连接。 WR、RD为写和读控制信号,与系统总线的读写信号相连接。 CS为片选信号 . A0是8259内部寄存器的选择信号,它的不同状态,对应不同的内部寄存器。 INT为8259的中断请求输出信号,可直接接到CPU的INTR输入端。,图5-14 8259引线图,INTA中断响应输入信号,在中断响应过程中,CPU的中断响应信号由此端进入8259。 CAS02为级联控制线。当多片8259级联工作时,其中一片为主控级芯片,其他均为从属级芯片。 SP/EN为双功能引线。 IR0

19、7中断请求 输入端。,2. 8259的工作方式通过编程,可以设置8259的不同工作方式,以便适应不同环境的需要。这也说明8259工作的灵活性和适应性。 (1) 80/85与86/88工作模式 8259可以应用于8080(85)系统中,也可以用于8086(88)系统中。利用初始化命令字(见后)可以指定8259是工作在8080/85系统模式下还是工作在8086/88模式下。,在80/85模式下,服务程序的入口地址高8位和低8位可通过编程由用户来指定。由于8259可以处理8个中断源,每个中断源入口地址间的间隔可以是4个字节,也可以是8个字节。这也是由用户通过编程来指定的。当间隔为4字节时,要求用户编

20、程指定低位地址的A7、A6、A5三位;当间隔为8个字节时,用户仅需指定A7和A6两位。具体情况如图5-15所示。当然,一般来说,中断服务程序用4个字节或8个字节大概都是不够的,这时,可在这里面放上JP指令,将中断服务程序安排在其他地方。,图5-15 80/85模式下第二中断响应字节,(2) 特殊屏蔽方式 在正常情况下,当一个中断请求被响应时,8259将禁止所有同级及更低优先级中断请求,这就称为一般屏蔽方式。但是,在一特殊情况下,希望较低优先级的中断请求也能允许产生中断。这时,可用特殊屏蔽方式。要做到这一点,需要利用后面将要提到的8259初始化命令字。 一个特殊屏蔽方式的示意图如图5-17所示,

21、其中SMM等需参看后面的命令字的定义。,图5-16 86/88模式下的中断向量码,图5-17 特殊屏蔽示意图,(3) 中断结束 在8259中,中断结束有两种方法: 自动结束。利用设置自动结束初始化命令字写入8259,此后,当8259获得CPU送来的最后一个INTA下降沿时,即自动将相应的ISR(中断服务寄存器)复位完成中断结束。 非自动结束。在这种情况下,中断结束要利用中断服务程序的EOI中断结束命令。EOI命令有两种形式:特殊结束命令SEOI和一般结束命令EOI。后者用于全嵌工作方式,前者用于特殊屏蔽方式。,(4) 优先权循环 根据8259的命令字规定,它有两种优先级规定:循环优先权和固定优

22、先权。固定优先级规定8个中断源的优先级以IR0最高,依次降低直到IR7最低。而且这种安排是不变的。,循环优先权有三个结构: 自动优先权循环用于中断源具有相等的优先级。在自动循环时,规定刚才获得服务的中断源在服务结束后具有最低优先级。 指定优先级循环可以利用命令一次性改变优先级。利用指定优先权循环命令,指定最低优先级,而后其他中断源的优先级也就决定了。 自动结束方式(AEOI)下的优先权循环,其优先权控制方式与自动优先权循环相同。只是中断结束是由8259自动发出的。,(5) 查询与读状态 通过命令字中的查询命令,CPU可以读得8259的查询字节,如图5-18所示。其中I=1表示有中断;I=0为无

23、中断。W0W2的编码表示处于中断请求中断源的最高优先级。,图5-18 查询读出的数据字节,3. 8259的编程 8259的功能是很强的,在它工作以前必须通过软件命令它做什么。只有在8259接收了CPU的命令,它才能按照命令所指示的方式工作,这就是对8259的编程。CPU命令分为两大类:一类是初始化命令字(ICW),主要是使8259处于初始状态。另一类是操作命令字(OCW)是使处于初始状态的8259去执行具体的某种操作方式。操作命令字可在8259初始化后的任何时刻写入。,(1) 初始化命令字 ICW1,初始化命令字1是在A0=0,D4为1时写入,各位的功能见图5-19。,图5-19 初始化命令字

24、1(ICW1), ICW2,初始化命令字2(ICW2)在80/85模式下它为中断入口地址的高8位,与前ICW1的D7D5形成的低8位构成16位的入口地址。在86/88模式下,仅用ICW2提供不同中断源的中断向量码。当中断响应时,再根据中断向量表获得入口地址。ICW2如图5-20所示。,图5-20 初始化命令字2(ICW2), ICW3,初始化命令字3(ICW3)是用于多片8259级联的。在主控8259中,ICW3的每一位对应一个IR输入。哪一位为1,表示相应的IR接从属8259。 从属8259的ICW3使用其最低三位编码来表示表该从属8259接的是主控8259的IR编号。例如从属片接主控的IR

25、4,则从属ICW3的D0D2编码为100(4)。两个ICW3如图5-21所示。,图5-21 初始化命令字3(ICW3), ICW4,初始化命令字4(ICW4)各位的功能如图5-22所示。值得说明的是AEOI位在其为0时,必须在中断服务程序中利用程序结束,以便将最高优先权复位。利用自动EOI则可省去这一步。但是,这要求在中断响应时应去掉提出中断的设备的中断请求信号,否则会产生错误。,图5-22 初始化命令字4(ICW4),(2) 操作命令字OCW 在对8259用初始化命令字初始化之后,它就进入工作状态,准备好接受IR端进入的中断请求。在8259工作期间,可随时写入操作命令字,使8259按照操作命

26、令字的规定来工作。操作命令字有三个,可单独使用。, OCW1,操作命令字1(OCW1)。它用于设置对8259中断的屏蔽操作。当这个8位的操作命令字的某一位置1时,它就屏蔽相对应的IR输入。如图5-23所示,当M0=1时,屏蔽IR0;M1=1时,屏蔽IR1,依次类推。未被屏蔽的IR可继续正常工作。 OCW2,操作命令字2(OCW2)。该命令字用来设置优先级是否循环,循环的方式及中断结束的方式。OCW2的各位功能如图5-24所示。,图5-23 操作命令字1(OCW1),图5-24 操作命令字2(OCW2 ), OCW3,操作命令字3(OCW3)。利用OCW3可以设置查询方式,特殊屏蔽方式以及用来读

27、8259的中断请求寄存器IRR,中断服务寄存鱅SR,中断屏蔽寄存器IMR的当前状态。OCW3各位功能如图5-25所示。,图5-25 操作命令字3(OCW3),4. 8259的寻址与连接 为了使8259按照设计者的要求工作,就需要利用软件将初始化命令字及操作命令字写入8259;另一方面为了知道8259的工作状态,又必须将其内部的一些寄存器的内容读出来。对寄存器和命令的访问控制如下表5-1所示:,表5-1 8259寄存器及命令的访问控制,图5-26是8088总线与8259与总线的连接图。在图中由于只用一片8259,故CAS02没有连接。IR端与中断源相连接,可以是定时器的输出或其他中断源。此时,8

28、259的接口地址为FF00HFF07H。本来8259占用2个接口地址,从图上可见,为了译码简单,只采用部分地址译码。在使用中,我们可以用FF00H和FF02H或其他地址。,图5-26 8259的连接,5. 8259的初始化使用 前面已经提到,8259仅占两个接口地址。在利用众多的命令字对其初始化时,一方面利用这两个地址,同时利用命令字中D4和D3的状态及命令字的写入顺序即可对这些命令加以区分,做到有条不紊地初始化8259。 对8259初始化命令字的写入顺序如图5-27所示。其中ICW2必须跟在ICW1之后,这就是顺序问题。后面的ICW3和ICW4是否需要初始化,取决于ICW1命令字的内容。它们

29、指ICW2,ICW3,ICW4均使用一个地址,这就决定于图5-27所示的顺序。此后可接收操作命令。,图5-27 8259初始化顺序,下面是8259的初始化程序: SET59A: MOV DX,0FF00H ;8259A的地址,A0=0 MOV AL,13H ;ICW1,LT1M=0,单片,需要ICW4。 OUT DX,AL MOV DX,0FF02H ;8259地址,此时A0=1 MOV AL,48H ;ICW2,中断向量码 OUT DX,AL MOV AL,03H ;ICW4,86/88模式,自动EOI,非缓冲 OUT DX,AL ;方式,一般全嵌套,MOV AL,0E0H ;0CW1,屏蔽

30、IR5,IR6,IR7。因为 OUT DX,AL ;未用到这三个中断输入。 如前所述,可以利用程序来读出8259内部寄存器的内容。下面的程序是先将数写入IMR再把它读出来校验,以证明8259中断屏蔽寄存器是否正常,若不正常则转IMERR。,MOV DX,0FF02H MOV AL,0 ;取0CW1为00H OUT DX,AL ;将00H写入IMR IN AL,DX ;读IMR OR AL,AL ;判断其内容为00H否 JNZ IMERR MOV AL,0FFH OUT DX,AL IN AL,DX ADD AL,1 JNZ IMERR,在读IMR时,可直接在对应A0=1的地址上读出;但要读IR

31、R或ISR时,则必须先对8259写入一个命令字OCW3。以下是读出ISR内容的一段程序: MOV DX,0FF00H ;对应A0=0 MOV AL,0BH ;0BH为OCW3 OUT DX,AL ;OCW3写入8259 IN AL,DX ;读出ISR的内容, ;放在AL中,6. 8259级的联工作 当一个微型机系统中的中断源较多,一片8259不能解决问题时,可以采用级联工作方式。这时指定一片8259为主控芯片,它的INT接到CPU上而其余的8259芯片均作为从属芯片,其INT输出接到主控芯片的IR输入端。由于主控8259有8个IR输入端,故一个主控8259可以连接8片从属8259,最多允许有6

32、4个IR输入。 一个由主控259和两片从属8259构成的级联中断系统框图如图5-28所示。,图5-28 22中断输入的级联8259框图,为了避免一般全嵌套方式的这一缺点,在级联方式时,可采用前面提到的特殊全嵌套方式。在对主控片初始化为特殊全嵌套方式后必须注意到如下两种情况: 当从属片的中断请求响应后,主控芯片并不封锁从属片的INT输入。这样就可以使从片中优先级更高的请求得到响应。 当从片的中断响应结束时,要用软件来检查中断状态寄存器ISR的内容,看看当前被服务的是否是本从属片的唯一一个中断请求。,5-3 直接存贮器存取(DMA),一、DMA的工作过程 要实现DMA传送,目前都采用大规模集成电路

33、芯片DMA控制器(DMAC)。DMA的工作过程大致如下: 外设向DMAC发出DMA传送请求。 DMAC通过接到CPU的HOLD信号向CPU提出DMA请求。 CPU在完成当前总线周期后会立即对DMA请求做出响应。,CPU的响应包括两个方面:一方面是CPU 将控制总线、数据总线和地址总线置高阻,即CPU 放弃对总线的控制权;另一方面将通过HLDA信号端的有效信号加到DMAC上,用此信号来通知DMAC,CPU已经放弃了总线的控制权。, DMAC等到CPU已使总线置高阻放弃总线控制权,则DMAC即开始对总线实施控制并向外设送出DMA的应答信号。 DMAC送出地址信号和控制信号,实现外设与内存或内存与内

34、存的数据传送。 当DMAC将规定的数据字节传送完之后,DMAC通过HOLD撤消对CPU的DMA请求,CPU收到此信号,一方面使HLDA无效,另一方面又重新开始控制总线,实现正常的运行。,做为例子,我们仅将DMA存贮器写总线周期画在图5-29上。图从DMAC获得执行权开始,从S0周期开始到S4结束为止,其间插入了一个等待的时钟周期SW。在这期间DMAC选中写入的内存地址单元和控制信号,将由外设提供的有效数据写入规定的内存单元。图5-29仅仅是使读者了解一个DMA总线周期的过程。对其他DMA周期就不再详细说明。,图5-29 DMA存贮器写总线周期时序图,二、DMA控制器8237 DMA控制器(DM

35、AC)芯片8237是一种高性能的可编程DMA控制器。芯片上有4个独立的DMA通道,可以用来实现内存到接口,接口到内存及内存到内存之间的高速数据传送。最高数据传送速率可达1.6 Mbytes/s。在PC机中,利用8237的传送速率仅仅是476 kbytes/s。,1. 8237的引线及功能 DMAC8237的外部引线图如图5-31所示。 A0A3:为双向地址线,具有三态输出。它可以做为输入地址信号,用来选择8237的内部寄存器。当8237作为主控芯片用来控制总线进行DMA传送时, A0A3做为输出信号成为地址线的最低4位,即A0A3。,图5-30 PC机中DMA操作流向图,图5-31 8237引

36、线图,A4A7: 三态输出线,在DMA传送过程中,由这4条引出线送出A4A7 4位地址信号。 DB0DB7:双向三态数据总线。它们与系统的数据总线相连接。在CPU控制系统总线时,可以通过DB0DB7对8237编程或读出8237的内部寄存器的内容。,IOW:I/O写控制信号。双向三态,低电平有效。当DMAC空闲即CPU掌握系统总线的控制权时,CPU利用此信号(及其他信号)实现对8237的写入。 IOR:双向三态低电平有效的I/O读控制信号,除IOR是用来控制数据的读出外,其双重作用与IOW一样。,MEMW:三态输出低电平有效的存贮器写控制信号。在DMA传送期间,由该端送出有效信号,控制存贮器的写

37、操作。 MEMR:三态输出低电平有效的存贮器读控制信号。其含义同MEMW。 ADSTR:地址选通信号,高电平有效的输出信号。 AEN:地址允许信号,高电平有效输出信号。 CS:片选信号,低电平有效输入信号。 RESET:复位信号,高电平有效输入信号。,I/O接口时,可由它们提供READY信号,使DMAC在传送过程中插入时钟周期SW,以便适应慢速内存或外设。 HRQ:保持请求信号,高电平有效的输出信号。 DREQ0DREQ3:DMA请求(通道03)。其有效电平可由程序设定的输入信号。 DACK0DACK3:DMA响应信号,分别对应通道03,该信号是一个有效电平可编程的输出信号。 CLK:时钟输入

38、,用来控制8237的内部操作并决定DMA的传送速率。 EOP:过程结束,低电平有效的双向信号。,2. 8237的工作方式 8237工作有两种周期,即空闲周期和工作周期。 (1) 空闲周期。当8237的4个通道均无请求时,即进入空闲周期。在此状态下,CPU可对其编程,设置工作状态。 (2) 工作周期 当处于空闲状态的8237某一通道提出DMA请求,它将输出HRQ有效信号加到CPU上并且在未收到CPU回答时,8237仍处于编程状态,又称为初始状态,这就是在图5-29所示的S0的状态。,8237的工作周期工作于下面四种工作类型之一: 单字节传送方式。在这种方式下,DMA传送仅传送一个字节的数据,传送

39、后8237将地址加1(或减1),并将要传送的字节数减1。 数据块传送。在这种传送方式下,DMAC一旦获得总线控制权,便开始连续传送数据,每传送一个字节,自动修改地址,并使要传送的字节数减1,直至将所有规定的字节数全部传送完,或收到外部EOP信号,DMAC才结束传送将总线控制权交给CPU。, 请求传送,利用DREQ有效,DMA传送一直进行,直到连续传送到字节计数为0或外部提供的EOP或DREQ变为无效时为止。 级联方式。利用这种方式可以把多个8237联接在一起,以便扩充系统的DMA通道。下一层的HRQ接到上一层的某一通道的DREQ上。而上一层的响应信号DACK可接下一层的HLDA上。其连接如图5

40、-32所示。,图5-32 级联8237的框图,(3)传送类型 8237主要完成3种不同的传送:存贮器到I/O接口;I/O接口到存贮器;存贮器到存贮器。 接口到存贮器的传送。 当利用DMAC进行由接口到存贮器的数据传送时,来自接口的数据利用DMAC送出IOR控制信号,将数据输送到系统数据总线D0D7上。, 存贮器到接口。与前一种情况类似,在进行这种传送时,DMAC送出存贮器地址及MEMR控制信号,使被选中的存贮单元的内容输出放在数据总线D0D7上。 存贮器到存贮器 8237具有存贮器到存贮器的传送功能。利用8237编程命令寄存器,选择其通道0和通道1两个通道实现由存贮器到存贮器的传送。,(4)

41、优先级 8237有两种优先级方案可供编程选择: 固定优先级。规定各通道的优先级是固定的,即通道0的优先级最高,依次降低,通道3的优先级最低。 循环优先级。规定刚被服务的通道的优先级最低,依次循环。,(5) 传送定时 8237在一般情况下,一次DMA操作需要6个时钟周期(包括一个附加的SW周期)。这时没有考虑在响应前的S0周期,例如,PC机中一个DMA总线周期用6210 ns=1260 ns。 另外,8237为了提高传送速率,可以在压缩定时状态下工作。,3. 8237的内部寄存器 8237有4个的独立的DMA通道,有许多内部寄存器用于支持8237的工作。在这里我们先利用表5-2给出这些寄存器的名

42、称、长度和数量。然后对它们逐一做解释。,表5-2 8237的内部寄存器,表5-2中凡是数量为4个的寄存器,则每个通道一个, 凡是只有一个的则为各通道所公用。下面就对这些寄存器逐个加以说明。 (1) 基地址寄存器 存放16位地址,在编程时,它与当前地址寄存器被同时写入某一起始地址。 (2) 基字数寄存器 存放该通道数据传送的个数,在编程时它与当前字数寄存器同时写入要传送数据的个数。,(3) 当前地址寄存器 该寄存器寄存DMA传送期间的地址值。每次传送后自动加1或减1。 (4) 当前字数寄存器 它存放当前的字节数,每传送一个字节,该寄存器的内容减1。 (5) 地址暂存寄存器和字数暂存寄存器这两个1

43、6位的 寄存器和CPU不直接发生关系。对我们使用8237没有影响。,(6)方式寄存器 方式寄存器每个通道有一个,其内容用来指定通道的工作方式。各位的作用见图5-33所示。 (7) 命令寄存器 8237的命令寄存器存放编程的命令字,命令字各位的功能如图5-34所示。,图5-33 8237的方式字,图5-34 8237命令字,D0用来规定是否允许采用存贮器到存贮器的传送方式。若允许这样做,则利用通道0和通道1来实现。 D1规定通道0的地址是否保持不变。 D2是允许或禁止8237芯片工作的控制位。 D3位用于选择总线周期中写信号的定时。,(8) 请求寄存器该寄存器用于在软件控制下产生一个DMA请求,

44、就如同外部DREQ请求一样。利用图5-35所示的请求字,D0D1不同的编码用来表示不同通道的DMA请求。,图5-35 8237请求字,(9) 屏蔽寄存器 8237的屏蔽字有两种形式: 单个通道屏蔽字。这种屏蔽字的格式如图5-36所示。 四通道屏蔽字。可以利用这个屏蔽字同时对8237的四个通道的屏蔽进行操作。该屏蔽字的格式如图5-37所示。,图5-36 单通道屏蔽字,图5-37 四通道屏蔽字,(10) 状态寄存器 状态寄存器存放各通道的状态,其内容由CPU读出后可得知8237的工作状况。主要信息是哪个通道计数已达到计数终点对应位为1;哪个通道的DMA请求尚未处理对应位为0。状态寄存器的格式如图5

45、-38所示。,图5-38 8237的状态字,(11) 暂存寄存器 这个8位寄存器用于存贮器到存贮器传送过程中对数据的暂时存放。 (12) 字节指针触发器 这是一个特殊的触发器,用于对前述各16位寄存器的寻址。,4. 8237的寻址及连接 8237的4个通道的寄存器及其他各种寄存器的寻址编码如下表5-3(略)和5-4 (略)所示。,图5-39 利用页寄存器产生存贮器地址,图5-40 8237在系统中连接简图,5.初始化8237 通常在对 8237初始化之前,利用硬件产生的RESET信号,或用表5-4所示的软件命令写入A3A2A1A0为1101的地址可对8237复位。复位将使屏蔽寄存器置位而清除所

46、有其他寄存器,这样,8237就进入空闲状态,这时就可以开始对它初始化。,下面我们就抽出PC机中BIOS对DMAC初始化的部分程序加以说明: 为了对DMAC初始化,首先用写入接口地址总清地址的指令来进行。只要求对该地址进行写操作。而写入什么数是无关紧要的。 对DMAC(8237)的4个通道的基与当前地址寄存器、基及当前字数寄存器先写入FFFFH再读出比较看读写操作是否正确。 程序对DMAC(8237)的零通道初始化。在PC机中,通道0用于产生对动态存贮器的刷新控制。,程序如下: OUTDMA+0DH,AL ; 总清8237 ;WRAP DMA CHANNELS ADDRESS AND COUNT

47、 REGISTERS MOV AL,0FFH ; C16: MOV BL,AL MOV BH,AL MOV CX,8 ;置8次循环 SUB DX,DX ;形成DMA通道0地址#;,C17: OUT DX,AL ;写入低字节 OUT DX,AL ;写入高字节 INAL,DX ;读出低字节 MOV AH,AL IN AL,DX ;读出高字节 CMP BX,AX ;比较 JE C18 HLT ;,C18: INC DX LOOP C17 INC AL ;使AL=0再做一次循环 JZ C16 ;INIT1AL1ZE AND START DMA FOR MEMORY REFRESH MOV DS,BX

48、MOV ES,BX ;初始化DS和ES MOV AL,0FFH OUT DMA+1,AL ;通道0的传送字节数,为64,OUT DMA+1,AL ;K字节 MOV DL,0BH ;使DX=000BH MOV AL,58H OUT DX,AL ;写方式字 MOV AL,0 OUT DMA+8,AL ;写入命令字; OUT DMA+10,AL; ;写屏蔽字,另外,值得注意的是,在初始化通道0时,未初始化地址。因为地址寄存器仅用于送出DRAM的行地址,总清后它们初始值为0,而后根据方式字地址递增,实现每次刷新一行。再就是PC机中DMA方式不是通过CPU(8088)的HOLD实现的,而是利用等待方式来

49、实现。这时CPU处于等待操作状态,仅仅是系统总线交给DMAC来控制。 为了进一步理解DMAC的工作,我们再以8237用于从存贮器把数据传达到接口为例,说明其工作及初始化过程。,DMAC 8237的硬件连接可参见图5-40,其地址可以改变译码器74LS138的连接达到所希望的地址。接口地址及连接简图如图5-41所示。,图5-41 DMAC传送数据到接口电路框图,DMAC初始化程序如下: INITADM: OUT DMA+0DH,AL ;总清 MOV AL,40H OUT DMA+2,AL ;送地址低字节到通道1 MOV, AL,74H OUT DMA+2,AL ;送地址高字节到通道1 MOV AL,80H OUT PAG,AL ;送页寄存器 MOVAL,64H OUT DMA+3

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1