7.2 CPU与外设之间数据传送的方式

在微型计算机系统中,CPU与外设之间的数据传送方式主要有程序传送方式、中断传送方式和直接存储器存取(DMA)传送方式,分别介绍如下。 
    7.2.1 程序传送方式 
    程序传送方式是指直接在程序控制下进行数据的输入/输出操作。程序查询方式分为无条件传送方式和查询方式(条件传送方式)两种。 
    一. 无条件传送方式 
    微机系统中的一些简单的外设,如开关、继电器、数码管、发光二极管等,在它们工作时,可以认为输入设备已随时准备好向CPU提供数据,而输出设备也随时准备好接收CPU送来的数据,这样,在CPU需要同外设交换信息时,就能够用IN或OUT指令直接对这些外设进行输入/输出操作。由于在这种方式下CPU对外设进行输入/输出操作时无需考虑外设的状态,故称之为无条件传送方式。 
    对于简单外设,若采用无条件传送方式,其接口电路也很简单。如简单外设作为输入设备时,输入数据保持时间相对于CPU的处理时间要长得多,所以可直接使用三态缓冲器和数据总线相连,如图7.5(a)所示(如图7.5)。当执行输入的指令时,读信号RD有效,选择信号M/IO处于低电平,因而三态缓冲器被选通,使其中早已准备好的输入数据送到数据总线上,再到达CPU。所以要求CPU在执行输入指令时,外设的数据是准备好的,即数据已经存入三态缓冲器中。 
    简单外设为输出设备时,由于外设取数的速度比较慢,要求CPU送出的数据在接口电路的输出端保持一段时间,所以一般都需要锁存器,如图7.5(b)所示。CPU执行输出指令时,M/IO和WR信号有效,于是,接口中的输出锁存器被选中,CPU输出的信息经过数据总线送入输出锁存器中,输出锁存器保持这个数据,直到外设取走。 
    无条件传送方式下,程序设计和接口电路都很简单,但是为了保证每一次数据传送时外设都能处于就绪状态,传送不能太频繁。对少量的数据传送来说,无条件传送方式是最经济实用的一种传送方法。 
    二.查询传送方式 
    查询传送也称为条件传送,是指在执行输入指令(IN)或输出指令(OUT)前,要先查询相应设备的状态,当输入设备处于准备好状态、输出设备处于空闲状态时,CPU才执行输入/输出指令与外设交换信息。为此,接口电路中既要有数据端口,还要有状态端口。 
    查询传送方式的流程图如图7.6所示。从图中可以看出,采用查询方式完成一次数据传送要经历如下过程: 
    1.CPU从接口中读取状态字; 
    2.CPU检测相应的状态位是否满足“就绪”条件; 
    3.如果不满足,则重复1、2步;若外设已处于“就绪”状态,则传送数据。 
    如图7.7所示给出的是采用查询方式进行输入操作的接口电路。输入设备在数据准备好之后向接口发选通信号,此信号有两个作用:一方面将外设中的数据送到接口的锁存器中,另一方面使接口中的一个D触发器输出“1”,从而使三态缓冲器的READY位置“1”。CPU输入数据前先用输入指令读取状态字,测试READY位,若READY位为“1”,说明数据已准备就绪,再执行输入指令读入数据。由于在读操作时RD信号已将状态位READY清0,于是可以开始下一个数据输入过程。 
    如图7.8所示给出的是采用查询方式进行输出操作的接口电路。CPU输出数据时,先用输入指令读取接口中的状态字,测试BUSY位,若BUSY位为0,表明外设空闲,此时CPU才执行输出指令,否则CPU必须等待。执行输出指令时由端口选择信号、M/IO信号和写信号共同产生的选通信号将数据总线上的数据打入接口中的数据锁存器,同时将D触发器置1。D触发器的输出信号一方面为外设提供一个联络信号,通知外设将锁存器锁存的数据取走;另一方面使状态寄存器的BUSY位置1,告诉CPU当前外设处于忙状态,从而阻止CPU输出新的数据。输出设备从接口中取走数据后,会送一个回答信号ACK,该信号使接口中的D触发器置0,从而使状态寄存器中的BUSY位清0,以便开始下一个数据输出过程。 
    前面介绍的都是对单个外设进行的查询式输入/输出,实际上,一个微机系统中往往会有多个外设与CPU交换信息,对于多个外设,如何利用查询方式实现输入/输出呢?通常采用的是轮流查询法对各个外设依次进行查询,并进行信息交换。 
    查询传送方式的主要优点是能保证主机与外设之间协调同步的工作,且硬件线路比较简单,程序也容易实现。但是,在这种方式下,CPU花费了很多时间查询外设是否准备就绪,在这些时间里,CPU不能进行其它的操作;此外,在实时控制系统中,若采用查询传送方式,由于一个外设的输入/输出操作未处理完毕就不能处理下一个外设的输入/输出,故不能达到实时处理的要求。因此,查询传送方式有两个突出的缺点:浪费CPU时间,实时性差。所以,查询传送方式适用于数据输入/输出不太频繁且外设较少、对实时性要求不高的情况。 
    不论是无条件传送方式还是查询传送方式,都不能发现和处理预先无法估计的错误和异常情况。为了提高CPU的效率、增强系统的实时性,并且能对随机出现的各种异常情况做出及时反应,通常采用中断传送方式。 
    7.2.2 中断传送方式 
    中断传送方式是指当外设需要与CPU进行信息交换时,由外设向CPU发出请求信号,使CPU暂停正在执行的程序,转去执行数据的输入/输出操作,数据传送结束后,CPU再继续执行被暂停的程序。 
    查询传送方式是由CPU来查询外设的状态,CPU处于主动地位,而外设处于被动地位。中断传送方式则是由外设主动向CPU发出请求,等候CPU处理,在没有发出请求时,CPU和外设都可以独立进行各自的工作。目前的微处理器都具有中断功能,而且已经不仅仅局限于数据的输入/输出,而是在更多的方面有重要的应用。例如实时控制、故障处理以及BIOS和DOS功能调用等。有关中断技术的具体内容将在下一节做介绍。 
    中断传送方式的优点是:CPU不必查询等待,工作效率高,CPU与外设可以并行工作;由于外设具有申请中断的主动权,故系统实时性比查询方式要好得多。但采用中断传送方式的接口电路相对复杂,而且,每进行一次数据传送就要中断一次CPU。CPU每次响应中断后,都要转去执行中断处理程序,都要进行断点和现场的保护和恢复,浪费了很多CPU的时间。故这种传送方式一般适合于少量的数据传送。对于大批量数据的输入/输出,可采用高速的直接存储器存取方式,即DMA方式。 
    7.2.3 直接存储器存取(DMA)传送方式 
    一.DMA传送方式简介 
    DMA传送方式是在存储器和外设之间、存储器和存储器之间直接进行数据传送(如磁盘与内存间交换数据、高速数据采集、内存和内存间的高速数据块传送等),传送过程无需CPU介入,这样,在传送时就不必进行保护现场等一系列额外操作,传输速度基本取决于存储器和外设的速度。DMA传送方式需要一个专用接口芯片DMA控制器(DMAC)对传送过程加以控制和管理。进行DMA传送期间,CPU放弃总线控制权,将系统总线交由DMAC控制,由DMAC发出地址及读/写信号来实现高速数据传输。传送结束后DMAC再将总线控制权交还给CPU。一般微处理器都设有用于DMA传送的联络线。 
    DMAC中主要包括一个控制状态寄存器、一个地址寄存器和一个字节计数器,在传送开始前先要对这些寄存器进行初始化,一旦传送开始,整个过程便全部由硬件实现,所以数据传送速率非常高。DMAC的基本结构及其与系统的连接如图7.9所示。 
    二.DMA控制器的工作方式 
    DMAC一般可以有如下几种工作方式: 
    1. 单字节传输方式 
    该方式下,DMAC每次控制总线后只传输一个字节,传输完后即释放总线控制权。这样CPU至少可以得到一个总线周期,并进行有关操作。 
    2. 成组传输方式(块传输方式) 
    采用这种方式,DMAC每次控制总线后都连续传送一组数据,待所有数据全部传送完后再释放总线控制权。显然,成组传输方式的数据传输率要比单字节传输方式高。但是,成组传输期间CPU无法进行任何需要使用系统总线的操作。 
    3. 请求传输方式 
    该方式下,每传输完一个字节,DMAC都要检测I/O接口发来的DMA请求信号是否有效。若有效,则继续进行DMA传输;否则就暂停传输,将总线控制权交还给CPU,直至DMA请求信号再次变为有效,再从刚才暂停的那一点继续传输。 下面将以成组传输方式为例介绍DMA操作的基本过程。 
    三.DMA操作的基本过程
    1. DMAC的初始化 DMAC的初始化主要做如下几方面工作: 
    (1)指定数据的传送方向。即指定外设对存储器是做读操作还是写操作,这就要对控制/状态寄存器中的相应控制位置数。 
    (2)指定地址寄存器的初值。即给出存储器中用于DMA传送的数据区的首地址。 
    (3)指定计数器的初值。即明确有多少数据需要传送。 
    2. DMA数据传送 
    DMA数据传送(以数据输入为例)按以下步骤进行: 
    (1)外围设备发选通脉冲,把输入数据送入缓冲寄存器,并使DMA请求触发器置1; 
    (2)DMA请求触发器向控制/状态端口发准备就绪信号,同时向DMA控制器发DMA请求信号; 
    (3)DMA控制器向CPU发出总线请求信号(HOLD); 
    (4)CPU在完成了现行机器周期后,即响应DMA请求,发出总线允许(HLDA),并由DMA控制器发出DMA响应信号,使DMA请求触发器复位。此时,由DMA控制器接管系统总线; 
    (5)DMA控制器发出存储器地址,并在数据总线上给出数据,随后在读/写控制信号线上发出写的命令; 
    (6)来自外设的数据被写入相应存储单元; 
    (7)每传送一个字节,DMA控制器的地址寄存器加1,从而得到下一个地址,字节计数器减1。回到(5),传送下一个数据。如此循环,直到计数器的值为0,数据传送完毕。 
    3. DMA结束 
    DMA传送完毕,由DMAC撤消总线请求信号,从而结束DMA操作。CPU撤消总线允许信号,恢复对总线的控制。 
    前面介绍的三种传送方式各有利弊,在实际使用时,要根据具体情况选择既能满足要求,又尽可能简单的方式。

http://cs.xiyou.edu.cn:84/wjyl/OnlineClass/7.2.html

CPU与外设传送数据方式的更多相关文章

  1. TMS320C54x系列DSP的CPU与外设——第5章 数据寻址

    第5章 数据寻址 C54x DSP提供7种基本寻址方式. ■ Immediate addressing uses the instruction to encode a fixed value.    ...

  2. TMS320C54x系列DSP的CPU与外设——第2章 TMS320C54x DSP体系结构总体介绍

    第2章 TMS320C54x DSP体系结构总体介绍 本章介绍TMS320C54x DSP体系结构的概况,包括中央处理单元(CPU).存在器和片内外设. C54x DSP采用了高级的改进哈佛结构,用8 ...

  3. TMS320C54x系列DSP的CPU与外设——第3章 存储器

    第3章  存储器 本章介绍了TMS320C54x DSP存储器的构成和操作.一般来说,C54x器件共有192K 16位字的存储窨,这个空间分成3个专用的部分:64K字程序.64K字数据和64K字I/O ...

  4. sqoop数据迁移(基于Hadoop和关系数据库服务器之间传送数据)

    1:sqoop的概述: (1):sqoop是apache旗下一款“Hadoop和关系数据库服务器之间传送数据”的工具.(2):导入数据:MySQL,Oracle导入数据到Hadoop的HDFS.HIV ...

  5. FLASH位宽为8、16、32时,CPU与外设之间地址线的连接方法

    转 http://blog.csdn.net/linweig/article/details/5556819 flash连接CPU时,根据不同的数据宽度,比如16位的NOR FLASH (A0-A19 ...

  6. 外设位宽为8、16、32时,CPU与外设之间地址线的连接方法

    有不少人问到:flash连接CPU时,根据不同的数据宽度,比如16位的NOR FLASH (A0-A19),处理器的地址线要(A1-A20)左移偏1位.为什么要偏1位? (全文有点晦涩,建议收藏本文对 ...

  7. python接口自动化(十)--post请求四种传送正文方式(详解)

    简介 post请求我在python接口自动化(八)--发送post请求的接口(详解)已经讲过一部分了,主要是发送一些较长的数据,还有就是数据比较安全等.我们要知道post请求四种传送正文方式首先需要先 ...

  8. python3+requests:post请求四种传送正文方式(详解)

    前言:post请求我在python接口自动化2-发送post请求详解(二)已经讲过一部分了,主要是发送一些较长的数据,还有就是数据比较安全等,可以参考Get,Post请求方式经典详解进行学习一下. 我 ...

  9. HTTP请求(GET与POST区别)和响应(get是从服务器上获取数据,post是向服务器传送数据,格式与举例都非常清楚)

    HTTP有两部分组成:请求与响应,下面分别整理. 一.HTTP请求 1.HTTP请求格式: <request line> <headers> <blank line> ...

随机推荐

  1. kafka配额控制

    转载请注明地址http://www.cnblogs.com/dongxiao-yang/p/5217754.html Starting in 0.9, the Kafka cluster has th ...

  2. return的用处

    #include "stdio.h" main() { ,c=; ;a<;a++) { c=c+a; } printf("%d",c); return ; ...

  3. 弹出窗口zDialog的使用

    因为没有元素可以显示到Frameset上面去,所以重新定义了,一个index.htm,对其的操作是: Index.htm    <script language="javascript ...

  4. Qt之遍历文件夹(经典详解)

    关于Qt操作文件夹.文件的知识用途较多,比如遍历下一层乃至所有子孙文件.文件夹,获取它们的一些信息(大小.类型.最后更改时间等).当然,也可以进行级联删除.     首先看简单的: 一.Qt遍历文件夹 ...

  5. mysql 锁 实验

    CREATE TABLE `kk` ( `a` ) NOT NULL, `b` ) NOT NULL, `c` ) NOT NULL, PRIMARY KEY (`a`), UNIQUE KEY `b ...

  6. 慢查询日志 与 general_log

            慢查询日志: 打开慢查询日志: set global slow_query_log=on; 输出格式定义:log_output: [file|table] FILE: set glob ...

  7. windows和linux双系统删除linux

    装了Windows和linux双系统的朋友,在后期要删除linux是个比较头痛的问题,因为MBR已经被linux接管,本文的目的是如何在windows 和linux双系统下,简单,完美地卸载linux ...

  8. 【转载】Shared Configuration

    Introduction The Internet changes the ways in which companies handle their day-to-day business and h ...

  9. Python之路【第五篇】:面向对象和相关

    Python之路[第五篇]:面向对象及相关   面向对象基础 基础内容介绍详见一下两篇博文: 面向对象初级篇 面向对象进阶篇 其他相关 一.isinstance(obj, cls) 检查是否obj是否 ...

  10. python-字典(第二篇(四):字典)

    [Python之旅]第二篇(四):字典 摘要: 说明:     显然Python中字典的学习过程与列表是一样的,主要是围绕下面的函数来进行重点学习: 1 2 3 4 5 6 7 8 9 10 11 & ...