微型计算机原理及应用.

Slides:



Advertisements
Similar presentations
A A A.
Advertisements

第1章第1章 PC/AT 系統 1 Chapter 1 Chapter 1 PC/AT 系統 001.
第五章 输入输出系统 5.1 概述 5.3 接口 5.3 系统总线 5.4 直接程序传送方式接口 5.5 中断方式与接口
南山中學 102學年度 性別平等教育週性別教育 性騷擾防治.
第九讲 法律篇 之 民法 思想品德与法律基础-第八章-02民法.
第5章 多级结构的存储系统 5.1 三级结构存储系统概述 主存储器 虚拟存储器 CPU 高速缓存 三级结构的存储系统.
输入输出程序设计 输入输出的基本概念 无条件方式输入输出 查询方式输入输出 中断方式输入输出.
微型计算机技术 教 学 指 导(七) 太原广播电视大学 郭建勇.
第10章 DOS功能调用与BIOS中断调用.
第十二章 DMA控制器 12.1 概述 A DMA控制器 A的应用.
第5章 输入输出与接口技术.
第五章 总线 及其形成 本节课之前,大家学习了:
第五章 微处理器总线操作与时序 三、总线时序 一、 8086/8088引脚 二、最小模式和最大模式.
汇编语言与接口技术 教师:范新民.
输入/输出及接口 输入/输出的传送方式 中断技术 80x86/Pentium中断系统 8259A可编程中断控制器 中断程序设计
第 6 章 I/O 接口和总线 中国科学技术大学 何克东.
第7章 常用数字接口电路.
4.1 汇编语言 4.2 顺序结构程序 4.3 分支程序设计 4.4 循环程序设计 4.5 子程序设计
9.1 可编程并行输入/输出接口芯片8255A 9.2 可编程计数器/定时器 可编程串行输入/输出接口芯片8251A
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月26日.
第7章 中断与异常.
第5章 循环与分支程序设计  循环程序设计  分支程序设计.
第三章 寻址方式与指令系统 3.1 寻址方式 一条指令通常由两大部分构成: 操作码 操作数
第6章 DMA传输 6.1 DMA传输原理 6.2 DMA控制器8237A A的编程使用 欢迎辞.
第7章 并行接口 7.1 简单并行接口 7.2 可编程并行接口8255A 7.3 键盘接口 7.4 LED显示器接口.
微机原理与接口技术 第2章 8086系统结构 朱华贵 2015年09月17日.
第九章 计数器和定时器电路 第一节 概述 第二节 Intel 8253的控制字 第三节 Intel 8253的工作方式 第九章 计数器和定时器电路 第一节 概述 第二节 Intel 8253的控制字 第三节 Intel 8253的工作方式 第四节 Intel 8253在IBM PC机上的应用.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年12月10日.
第5章 存储系统.
输入输出与中断 主要内容 CPU与外设之间数据传送方式 中断技术 8086中断系统和中断处理.
第2章 16位和32位微处理器 位微处理器8086/ 位微处理器80386
第5章 输入输出与接口技术.
第八章 输入输出程序设计 总线 CPU MEM I/O接口 I/O设备.
Ch 9: Input/Output System 输入/输出系统
第二部分 PC 微机异步通信适配器的分析和使用 一、PC中的UART 1.INS PC16450/PC16550
第七章 MCS-51并行口的扩展 MCS51单片机内部有4个并行口,当内部并行口不够用时可以外扩并行口芯片。可外扩的并行口芯片很多,分成2类:不可编程的并行口芯片(74LS3734和74LS245)和可编程的并行口芯片(8255)。 7.1 不可编程并行口芯片的扩展 7.2 可编程并行口芯片的扩展.
微机原理及应用 主讲:郑海春.
第15章 串行通信及接口电路.
微机原理与接口技术 第9章 计时/计数接口.
第8章 PCH中的常规接口.
本 章 重 点 单片机的简单I/O扩展 8255A可编程并口芯片 8279可编程键盘/显示器接口芯片 单片机键盘接口技术
第7章 微型机接口技术 可编程定时/计数器 可编程并行接口 串行接口与串行通信(概念) DMA控制器接口(不做要求) 模拟量输入/输出接口.
微型机系统与接口技术自学部分 只作扩展知识用 本电子课件包含2011版第3, 6, 7, 8章自学部分 东南大学计算机科学与工程学院.
第5章 半导体存储器 存储器基本概念 随机存取存储器(RAM) 只读存储器(ROM) 存储器连接与扩充应用 微机系统的内存结构.
第二章 8086/8088系统结构 主要内容 8086/8088微处理器的内部结构 8086/8088 CPU 的引脚与功能
第3章 微型计算机输入输出接口 3.1 输入/输出接口 3.2 输入输出数据传输的控制方式 3.3 开关量输入输出接口 欢迎辞.
1.3 微型计算机的结构和工作原理.
第二章 模拟量输出通道 本章要点 1.模拟量输出通道的结构组成与模板通用性; 2.8位D/A转换器DAC0832的原理组成及其接口电路
第 12 章 8237A DMA控制器及其应用 中国科学技术大学 何克东.
第5章 循环与分支程序设计 学习目标: 了解并掌握循环程序的构造方法,尤其是对循环控制条件的设置以及可能出现的边界情况的考虑。掌握起泡排序算法这种多重循环程序设计中的常用方法。交换标志位的设置在此算法中更能提高效率。学会在数组排序算法中采用折半查找法来提高查找效率。学会使用跳跃表法实现CASE结构。
第6章作业 3、 需要128块芯片 片内译码地址线:10条 片选择地址线:至少4条
第7章 I/O接口和总线 7.1 I/O接口 7.2 总线.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月19日.
第五章:输入输出基本技术 主讲教师:范新民.
第二章 8086微处理器. 第二章 8086微处理器 微处理器的基本结构 8086微处理器的主要特性和内部结构 8086CPU的工作模式和引脚信号 8086的存储器管理 8086的总线操作和时序.
第九章 微处理器外部结构和总线操作时序.
第10章 可编程外围接口芯片8255A及其应用 10.1 概述 A的工作原理 A的应用举例.
可编程定时计数器.
第九章 BIOS和DOS中断 在存储器系统中,从地址0FE000H开始的8K ROM(只读存储器)中装有BIOS(Basic Iuput /output System)例行程序。驻留在ROM中的BIOS给PC系列的不同微处理器提供了兼容的系统加电自检,引导装入,主要I/O设备的处理程序以及接口控制等功能模块来处理所有的系统中断。使用BIOS功能调用,给程序员编程带来很大方便,程序员不必了解硬件操作的具体细节,直接用指令设置参数,然后中断调用BIOS中的子功能,所以利用BIOS功能编写的程序简洁,可读性好,
键盘 LCD显示器 触摸屏技术 串行总线数据通信 PTR2000无线数据传输
第5章 循环与分支程序设计  循环程序设计  分支程序设计.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年12月17日.
微型计算机技术 教 学 指 导(五) 太原广播电视大学 郭建勇.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月06日.
第十章 直接存储器存取(DMA)控制.
微机原理与接口技术 ——80x86微处理器 西安邮电大学 计算机学院 范琳.
第二章 8086系统结构 /8086的存储器组织 的系统配置及引脚功能 CPU时序
微机原理与接口技术 第5章 汇编语言程序设计 西安邮电大学计算机学院 王 钰.
微机原理与接口技术 西安邮电大学计算机学院 宁晓菊.
第8章 并行接口芯片 并行接口一般具有两个或两个以上的8位I/O接口。各个口的工作方式可由程序分别确定或改变,使用灵活,便于和各种外部设备连接。因此,又称可编程的外部接口(PPI) 目前各主要微处理器厂商都有自己的PPI产品,但它们的功能基本类似.
Presentation transcript:

微型计算机原理及应用

第 7 章 输入和输出 §7.1 概述 §7.2 CPU与外设数据传送的方式 §7.3 DMA控制器

7.1 概述 输入和输出设备是计算机系统的重要组成部分。程序、原始数据和各种现场采集到的资料和信息,都要通过输入设备输入至计算机。计算结果或各种控制信号要输出给各种输出设备,以便显示、打印和实现各种控制动作。常用的输入设备有键盘(Key Board)、鼠标、扫描仪,或者经过A/D(模/数)转换的现场信息等。 常用的输出设备有CRT、各种行打印机(Line Printer)、绘图仪,以及经过D/A(数/模)转换的各种控制信号。近年来,多媒体技术有了很大发展,声音和图像的输入和输出也是重要的I/O设备。CPU与外部设备(Peripheral)交换信息也是计算机系统中十分重要和十分频繁的操作。

外部设备的种类繁多,可以是机械式、电动式、电子式以及其他形式。输入的信息也不相同,可以是数字量、模拟量(模拟的电压、电流),也可以是开关量(两个状态的信息)。而且输入信息的速度也有很大区别,可以是手动的键盘输入(每个字符输入的速度为秒级),也可以是磁盘输入(它能以1Mb/s的速率传送)。所以CPU与外设之间的连接与信息交换是比较复杂的。

7.1.1 输入输出的寻址方式 CPU寻址外设可以有两种方式: 存储器对应输入输出方式和端口寻址的输入输出方式。 1.存储器对应输入输出方式 7.1.1 输入输出的寻址方式 CPU寻址外设可以有两种方式: 存储器对应输入输出方式和端口寻址的输入输出方式。 1.存储器对应输入输出方式 在这种方式中,把一个外设端口作为存储器的一个单元来对待,故每一个外设端口占有存储器的一个地址。从外部设备输入一个数据,作为一次存储器读的操作;而向外部设备输出一个数据,则作为一次存储器写的操作。

这种方式的优点是: (1) CPU对外设的操作可使用全部的存储器操作指令,故指令多,使用方便。如可对外设中的数据(存于外设的寄存器中)进行算术和逻辑运算,进行循环或移位等。 (2) 内存和外设的地址分布图是同一个。 (3) 不需要专门的输入输出指令以及区分是存储器还是I/O操作的控制信号。 这种方式的缺点是: (1) 外设占用了内存单元,使内存容量减小。 (2) 要寻址的外设的端口地址,显然比内存单元的地址要少得多。所以,在用直接寻址方式寻址外设时,它的地址字节,通常总是要比寻址内存单元的地址少一个字节,因而节省了指令的存储空间,缩短了指令的执行时间。

2.端口寻址的输入输出方式 在这种工作方式中,CPU有专门的I/O指令,用地址来区分不同的外设。但要注意,实际上是以端口(Port)作为地址的单元,因为一个外设不仅有数据寄存器还有状态寄存器和控制命令寄存器,它们各需要一个端口才能加以区分,故一个外设往往需要多个端口地址。CPU用地址来选择外设。通常专用的I/O指令,只用一个字节作为端口地址,故最多可寻址256个端口。 在IA-32结构微处理器中,例如在Intel 8088和8086中,若用直接寻址方式寻址外设,则仍用一个字节的地址,可寻址256个端口;而用DX间接寻址外设时,则端口地址是16位的,可寻址216=64K个端口地址。 在用端口寻址方式寻址外设的CPU中,必须要有控制线来区分是寻址内存还是寻址外设。

7.1.2 CPU与I/O设备之间的接口信息 CPU与一个外设之间交换的信息,如图7-1所示。 传送的信息 1. 数据(Data) 在微型计算机中,数据通常为8位、16位或32位。它大致可以分为三种基本类型: (1) 数字量 由键盘等输入的信息是以二进制形式表示的数或以ASCII码表示的数或字符。

(2) 模拟量 当计算机用于控制时,大量的现场信息经过传感器把非电量(例如温度、压力、流量、位移等)转换为电量,并经放大即得到模拟电压或电流。这些模拟量必须先经过A/D转换才能输入计算机;计算机的控制输出也必须先经过D/A转换才能去控制执行机构。 (3) 开关量 开关量是两个状态的量,如电机的运转与停止,开关的闭合与断开,阀门的打开和关闭等。这些量只要用一位二进制数即可表示,故字长8位的机器一次输入或输出可以控制8个这样的开关量。

2.状态信息(Status) 在输入时,有输入设备的状态信息是否准备好(Ready);在输出时,有输出设备的状态信息是否有空(Empty),若输出设备正在输出信息,则以忙(Busy)指示等。 3.控制信息(Control) 例如控制输入输出设备启动或停止等信息。 状态信息和控制信息与数据是不同性质的信息,必须要分别传送。但在大部分微型计算机中(8086也如此),只有通用的输入IN和输出OUT指令,因此,外设的状态也必须作为一种数据输入;而CPU的控制命令,也必须作为一种数据输出。为了使它们之间相互能够区分开,它们必须有自己不同的端口地址,如图7-2所示。

数据需要一个端口;外设的状态需要一个端口,CPU才能把它读入,了解外设的运行情况;CPU的控制信号往往也需要一个端口,以控制外设的正常工作。所以,一个外设往往要几个端口地址,CPU寻址的是端口,而不是笼统的外设。一个端口的寄存器往往是8位的,通常一个外设的数据端口是8位的,而状态与控制端口只用其中的1位或2位,故不同的外设的状态或控制信息可以共用一个端口。

7.1.3 CPU的输入输出时序 在最大组态下,8086的基本输入输出总线周期的时序与存储器读写的时序是类似的。但是,通常I/O接口电路的工作速度较慢,往往需要插入等待状态。所以,基本I/O操作由T1、T2、T3、TW、T4组成,占用5个时钟周期,如图7-3所示。

7.1.4 CPU与接口电路之间数据传送的形式 CPU与外设的信息交换称为通信(Communication)。基本的通信方式有两种: 并行通信——数据的各位同时传送; 串行通信——数据一位一位顺序传送。 并行通信与串行通信方式,如图7-4所示。

7.2 CPU与外设数据传送的方式 当CPU与外设进行信息(数据、状态信号和控制命令)传送时,为了保证传送的可靠性和提高工作效率,有几种不同的传送方式。

7.2.1 查询传送方式 1.查询式输入 CPU与I/O设备的工作往往是异步的,很难保证,当CPU执行输入操作时,外设已把要输入的信息准备好了;而当CPU执行输出时,外设的寄存器(用于存放CPU输出数据的寄存器)一定是空的。所以,通常在程序控制下的传送方式,在传送前,必须要查询外设的状态,当外设准备就绪了才传送;若未准备好,则CPU等待。 所以,接口部分除了数据传送的端口以外,还必须有传送状态信号的端口,其方框图如图7-9所示。

当输入设备的数据已经准备好后便发出一个选通信号,一方面把数据送入锁存器,另一方面使D触发器为“1”,给出“准备好”(Ready)的状态信号。而数据信号与状态信号必须由不同的端口输至CPU数据总线。当CPU要由外设输入信息时,先输入状态信息,检查数据是否已经准备好,当数据已经准备好后,才输入数据。读入数据的命令,使状态信息清“0”。 读入的数据是8位或16位的,而读入的状态信息往往是1位的,如图7-10所示。所以,不同外设的状态信息,可以使用同一个端口,而只要使用不同的位就行。 这种查询输入方式的程序流程图如图7-11所示。

查询部分的程序如下: POLL: IN AL,STATUS_PORT;从状态端口输入状态信息 TEST AL,80H;检查READY是否为1 JE POLL;未READY,循环 IN AL,DATA_PORT;READY,从数据端口输入数据 这种CPU与外设的状态信息的交换方式,称为应答式,状态信息称为“联络”或“握手”(Handshake)信息。

2.查询式输出 在输出时,CPU也必须了解外设的状态,看外设是否有空(即外设不正处在输出状态,或外设的数据寄存器是空的,可以接收CPU输出的信息),若有空,则CPU执行输出指令,否则就等待。因此,接口电路中也必须要有状态信息的端口,其方框图如图7-12所示。

当输出设备把CPU要输出的数据输出以后,发出一个ACK(Acknowledge)信号,使D触发器置“0”,即使“Busy”线为0(Empty=Busy),当CPU输入这个状态信息后,知道外设为“空”,于是就执行输出指令。输出指令执行后,由地址信号和IO/M#及WR#相“与”后,发出选通信号,把在数据线上输出的数据送至锁存器。同时,令D触发器置“1”,它一方面通知外设输出数据已经准备好,可以执行输出操作;另一方面在数据由输出设备输出以前,一直为“1”,告诉CPU(CPU通过读状态端口而知道)外设“Busy”,阻止CPU输出新的数据。 接口电路的端口信息为: 数据端口为8位或16位;状态信息为1位,如图7-13所示,查询式输出的程序流程图如图7-14所示。

查询部分的程序为: POLL:IN AL,STATUS_PORT;从状态端口输入状态信息 TEST AL,80H;检查BUSY位 JNE POLL;BUSY则循环等待 MOV AL,STORE;否则,从缓冲区取数据 OUT DATA_PORT,AL;从数据端口输出 其中,STATUS_PORT是状态端口的符号地址;DATA_PORT是数据端口的符号地址;STORE是存放数据单元的地址偏移量。

3.一个采用查询方式的数据采集系统 一个有8个模拟量输入的数据采集系统,用查询的方式与CPU传送信息,其电路如图7-15所示。 8个输入模拟量,经过多路开关——它由端口4输出的3位二进制码(D0、D1、D2)控制(000——相应于A0输入),每次送出一个模拟量至A/D转换器;同时A/D转换器由端口4输出的D4位控制启动与停止。

A/D转换器的READY信号由端口2的D0输送至CPU数据总线,经A/D转换后的数据由端口3传送至数据总线。所以,这样的一个数据采集系统,需要用到3个端口,它们有各自的地址。 实现这样的数据采集过程的程序为:

START:MOV DL,0F8H;设置启动A/D 转换的信号 LEA DI,DSTOR;存放输入数据缓冲区的地址偏移量→DI AGAIN:MOV AL,DL AND AL,0EFH;使D4=0 OUT 4,AL;停止A/D转换 CALL DELAY;等待停止A/D操作的完成 MOV AL,DL OUT 4,AL;启动A/D,且选择模拟量A0

POLL:IN AL,2;输入状态信息 SHR AL,1 JNC POLL;若未READY,程序循环等待 IN AL,3;否则,输入数据 STOSB ; 存至内存 INC DL;修改多路开关控制信号,指向下一个模拟量 JNE AGAIN;8个模拟量未输入完,循环已完,执行别的程序段

7.2.2 中断传送方式 在上述的查询传送方式中,CPU要不断地询问外设,当外设没有准备好时,CPU要等待,不能干别的操作,这样就浪费了CPU的时间。而且许多外设的速度是较低的,如键盘、打印机等,它们输入或输出一个数据的速度是很慢的,在这个过程中,CPU可以执行大量的指令。为了提高CPU的效率,可采用中断的传送方式。 即当CPU需要输入或输出时,若外设的输入数据已存入寄存器;在输出时,若外设已把上一个数据输出,输出寄存器已空,这时由外设向CPU发出中断申请,CPU就暂停原来执行的程序(即实现中断),转去执行输入或输出操作(中断服务),待输入输出操作完成后即返回,CPU再继续执行原来的程序。这样就可以大大地提高CPU的效率,而且有了中断的概念,允许CPU与外设(甚至多个外设)同时工作。

在中断传送方式时的接口电路,其方框图如图7-16所示。 当输入设备输入一数据,发出选通信号,把数据存入锁存器,又使D触发器置“1”,发出中断请求,若中断是开放的,CPU接受了中断请求信号后,在现行指令执行完后,暂停正在执行的程序,发出中断响应信号INTA,于是外设把一个中断矢量放到数据总线上,CPU就转入中断服务程序——即读入或者输出数据,同时清除中断请求标志。当中断处理完后,CPU返回被中断的程序继续执行。

7.2.3 直接数据通道传送(DMA)方式 利用中断进行数据传送,可以大大提高CPU的利用率。例如某一个外设1秒钟能传送100个字节。若用查询方式输入,则在这1秒钟内CPU全部用于查询和传送;若用中断方式,CPU每传送一个字节的服务程序若需100μs,则传送100个字节,CPU只需用10ms,即只占1秒的1/100的时间,这样99/100的时间CPU可用于执行主程序。 但是中断传送仍然是由CPU通过程序来传送的,每次要保护断点、保护现场需用多条指令,每条指令要有取指和执行时间。这对于一个高速I/O设备,以及成组交换数据的情况,例如磁盘与内存间的信息交换,就显得速度太慢了。

所以希望用硬件在外设与内存之间直接进行数据交换(DMA)而不通过CPU,这样数据传送的速度的上限就取决于存储器的工作速度。但是,通常系统的地址和数据总线以及一些控制信号线(例如IO/M#、RD#、WR#等)是由CPU管理的。在DMA方式时,就希望CPU把这些总线让出来(即CPU连到这些总线上的线处于第三态——高阻状态),而由DMA控制器接管,控制传送的字节数,判断DMA是否结束,以及发出DMA结束等信号。这些都是由硬件实现的。

DMA控制器必须有以下功能: (1) 能向CPU发出HOLD信号; (2) 当CPU发出HLDA信号后,接管和控制总线,进入DMA方式; (3) 发出地址信息,能对存储器寻址以及能修改地址指针; (4) 能发出读或写等控制信号; (5) 能决定传送的字节数,判断DMA传送是否结束; (6) 发出DMA结束信号,使CPU恢复正常工作状态。 通常DMA的工作流程如图7-17所示。

能实现上述操作的DMA控制器的硬件方框图如图7-18所示。 当外设把数据准备好以后,发出一个选通脉冲使DMA请求触发器置“1”,它一方面向控制/状态端口发出准备就绪信号,另一方面向DMA控制器发出DMA请求。于是DMA控制器向CPU发出HOLD信号,当CPU在现行的机器周期结束后响应发出HLDA信号,于是DMA控制器就接管总线。

向地址总线发出地址信号,在数据总线上给出数据,并给出存储器写的命令,就可把由外设输入的数据写入存储器。然后修改地址指针,修改计数器,检查传送是否结束,若未结束则循环直至整个数据传送完毕。DMA工作过程波形图如图7-19所示。

在整个数据传送完后,DMA控制器撤除总线请求信号(HOLD变低),在下一个T周期的上升沿,就使HLDA变低。 当CPU需要运行别的周期时,又取得对总线的控制。 随着大规模集成电路技术的发展,DMA传送已不局限于存储器与外设间的信息交换,而可以扩展为在存储器的两个区域之间,或两种高速的外设之间进行DMA传送,如图7-20所示。

1.DMA控制器的基本功能 DMAC是控制存储器和外部设备之间直接高速地传送数据的硬件电路,它应能取代CPU,用硬件完成图7-17所示的各项功能。具体地说,DMAC应具有如下功能: (1) 能接收外设的请求,向CPU发出DMA请求信号; (2) 当CPU发出DMA响应信号之后,接管对总线的控制,进入DMA方式; (3) 能寻址存储器,即能输出地址信息和修改地址; (4) 能向存储器和外设发出相应的读/写控制信号; (5) 能控制传送的字节数,判断DMA传送是否结束; (6) 在DMA传送结束以后,能结束DMA请求信号,释放总线,使CPU恢复正常工作。

2.DMA传送方式 DMAC一般都有两种基本的DMA传送方式: (1) 单字节方式: 每次DMA请求只传送一个字节数据,每传送完一个字节,都撤除DMA请求信号释放总线; (2) 字节(字符)组方式: 每次DMA请求连续传送一个数据块,待规定长度的数据块传送完了以后才撤除DMA请求释放总线。 在DMA传送中,为了使源和目的之间的数据传送取得同步,不同的DMAC在操作时都受到外设的请求信号或准备就绪信号——READY信号的限制。

7.3 DMA 控 制 器 下面以Intel 8237 DMAC为例介绍DMA控制器(DMAC)的工作原理和使用。 Intel 8237/8237A-5是一种高功能的可编程的DMA控制器,采用5MHz的8237-2传送速度可以达到1.6兆字节/秒。

7.3.1 DMA控制器的主要功能 DMA控制器有以下主要功能:

(4)每一个通道一次传送的最大长度可达64KB,可以在存储器与外设间进行数据传送,也可以在存储器的两个区域之间进行传送。 (5)8237的DMA传送有以下四种方式: ① 单字节传送方式; ② 数据块传送方式; ③ 请求传送方式; ④ 级连方式。 在每一种方式下,都能接收外设的请求信号DREQ,向外设发出响应信号DACK,向CPU发出DMA请求信号HRQ,当接收到CPU的响应信号HLDA后就可以接管总线,进行DMA传送。每传送一个数据,修改地址指针(可以编程规定为增量修改或减量修改),字节数减1,当规定的传送长度(字节数)减到零时,会发出TC信号结束DMA传送或重新初始化。

(6) 有一个结束处理的输入信号EOP,允许外界用此输入端来结束DMA传送或重新初始化。 (7) 8237可以级连,任意扩展通道数。

7.3.2 8237的结构 Intel 8237的方框图如图7-21所示。图中的通道部分只画出了一个通道的情况,即每个通道都有一个基地址寄存器(16位),基字节数计数器(16位),现行地址寄存器(16位)和现行字节数计数器(16位),每一个通道都有一个6位的模式寄存器以控制不同的工作模式,所以,8237的内部寄存器的类型和数量如表7-1所示。

8237的结构中包含了三个基本的控制逻辑块: (1) 时序控制逻辑块 根据编程规定的DMAC的工作模式,产生包括DMA请求,DMA传送以及DMA结束所需要的内部时序和外部信号。 (2) 程序命令控制块 对在DMA请求服务之前CPU编程时所给定的命令字和模式控制字进行译码,以确定DMA服务的类型。 (3) 优先权编码逻辑 对同时有请求的通道进行优先权编码,确定哪个通道的优先权最高。在 8237中,通道的优先权可以是固定的,也可以是旋转的。 另外还有缓冲器。8237的数据引线、地址引线都有三态缓冲器,因而可以接管和释放总线。

7.3.3 8237的工作周期 8237在设计时规定它有两种主要的工作周期,即空闲周期和有效周期。每一个周期又由若干个时钟周期组成。 7.3.3 8237的工作周期 8237在设计时规定它有两种主要的工作周期,即空闲周期和有效周期。每一个周期又由若干个时钟周期组成。 1.空闲周期 当8237的任一通道都无请求时就进入空闲周期(Idle Cycle)。在空闲周期,8237始终执行SI状态,在每一个时钟周期都采样通道的请求输入线DREQ。只要无请求就始终停留在SI状态。 在SI状态,可由CPU对8237编程或从8237读取状态。8237在SI状态也始终采样选片信号CS#,只要CS#信号变为有效,则CPU要对8237进行读/写操作。 当8237采样到CS#为低(有效)而HRQ也为低(无效),则进入程序状态,CPU就可以对8237的内部寄存器进行写入操作,以实现对8237的编程或者改变8237的工作状态。

在这种情况下,由控制信号IOR#和IOW#、地址信号A3~A0来选择8237内部不同的寄存器。 由于8237内部的地址寄存器和字节数计数器都是16位的,而数据线却是8位的,所以,在8237的内部有一个触发器称为高/低触发器,由它来控制写入16位寄存器的高8位还是低 8位。8237还具有一些软件命令,这些命令是通过对地址线A3~A0和IOW#、CS#信号的译码来决定的,不使用数据总线。 2.有效周期(Active Cycles) 当8237在SI状态采样到外设有请求,就脱离SI而进入S0状态,S0状态是DMA服务的第一个状态,在这个状态8237已经接收了外设的请求,向CPU发出了DMA请求信号HRQ,但尚未收到CPU的 DMA响应信号HLDA。当接收到HLDA就使8237进入工作状态,开始DMA传送。

工作状态是由S1、 S2、S3、S4组成以完成数据传送,若外设的数据传送速度较慢,不能在S4之前完成,则可由Ready信号线在S2或S3与S4之间插入SW状态。 在存储器与存储器之间的传送,需要完成从存储器读和存储器写的操作,所以每一次传送需要8个时钟周期,在前4个周期S11、S12、S13、S14完成从存储器读的操作,后4个周期S21、S22、S23、S24完成存储器写操作。

7.3.5 8237的工作模式 8237在DMA传送时有四种工作模式。 1.单字节传送模式 7.3.5 8237的工作模式 8237在DMA传送时有四种工作模式。 1.单字节传送模式 这种模式是编程为一次只传送一个字节。数据传送后字节计数器减量,地址要相应修改(增量或减量取决于编程)。HRQ变为无效,释放系统总线。若数据传送使字节数减为0,TC发生,或者终结DMA传送或者重新初始化。 在这种方式下,DREQ信号必须保持有效,直至DACK信号变为有效。但是若DREQ有效的时间覆盖了单字节传送所需要的时间,则8237在传送完一个字节后,先释放总线,然后再产生下一个 DREQ,完成下一个字节的传送。在8080/8085系统中,这样的方式在两次DMA传送之间,CPU至少执行一个机器周期。

2.块传送方式 在这种传送方式下,8237由DREQ启动就连续地传送数据,直至字节数计数器减到零产生TC(Terminal Count),或者由外部输入有效的EOP#信号来终结DMA传送。 在这种方式下,DREQ信号只需要维持到DACK有效。在数据块传送完了或是终结操作,或是重新初始化。

3.请求传送方式 在这种工作方式下,8237可以进行连续的数据传送。当出现以下三种情况之一时停止传送: ① 字节数计数器减到0,发生TC; ② 由外界送来一个有效的EOP信号; ③ 外界的DREQ信号变为无效(外设的数据已传送完)。 当由于出现第三种情况使传送停下来时,8237释放总线,CPU可以继续操作。而8237的地址和字节数的中间值,可以保持在相应通道的现行地址和字节数寄存器中。只要外设准备好了要传送的新的数据,由DREQ再次有效就可以使传送继续下去。

4.级连方式 这种方式用于通过级连以扩展通道。第二级的HRQ和HLDA信号连到第一级的DREQ和DACK上,如图7-23所示。 第二级各个芯片的优先权等级与所连的通道相对应。在这种工作情况下,第一级只起优先权网络的作用,除了由某一个二级的请求向CPU输出HRQ信号外,并不输出任何其他信号。实际的操作是由第二级的芯片完成的。若有需要还可由第二级扩展到第三级等。

在前三种工作方式下,DMA传送有三种类型: DMA读、DMA写和校验。 DMA读传送是把数据由存储器传送至外设,操作时由MEMR#有效从存储器读出数据,IOW#有效把数据传送给外设。 DMA写传送是把由外设输入的数据写至存储器中。操作时由IOR#信号有效从外设输入数据,由MEMW#有效把数据写入内存。 校验操作是一种空操作,8237本身并不进行任何校验,而只是像DMA读或DMA写传送一样地产生时序,产生地址信号,但是存储器和I/O控制线保持无效,所以并不进行传送。而外设可以利用这样的时序进行校验。

8237可以编程工作在存储器到存储器传送方式,这时就要用到两个通道,通道0的地址寄存器编程为源区地址;通道1的地址寄存器编程为目的区地址,字节数寄存器编程为传送的字节数。传送由设置一个通道0的软件DREQ启动,8237按正常方式向CPU发出DMA请求信号HRQ,待CPU用HLDA信号响应后传送就可以开始。 每传送一个字节要用8个时钟周期,4个时钟周期以通道0为地址从源区读数据送入8237的临时寄存器;另外4个时钟周期以通道1为地址把临时寄存器中的数据写入目的区。每传送一个字节,源地址和目的地址都要修改(可以增量也可以减量修改),字节数减量。传送一直进行到通道1的字节数计数器减到零,产生TC,引起在EOP#端输出一个脉冲,结束DMA传送。

在存储器到存储器的传送中,也允许外部送来一个EOP#信号停止DMA传送。这种方式可用于数据块搜索,当发现匹配时,发出EOP#信号停止传送。

7.3.6 8237的寄存器组和编程 1.现行地址寄存器 每一个通道有一个16位的现行地址寄存器。在这个寄存器中保持用于DMA传送的地址值,在每次传送后这个寄存器的值自动增量或减量。在传送过程中地址的中间值就保存在这个寄存器中。这个寄存器的值可由CPU写入或读出(分两次连续操作)。若编程为自动初始化,则在每次EOP#后,初始化为它的初始值(即保存在基地址寄存器中的值)。 2.现行字节数寄存器 每个通道有一个16位的现行字节数寄存器,保存要传送的字节数,在每次传送后此寄存器减量。在传送过程中字节数的中间值保存在这个寄存器中。其值减为零,TC将产生。该寄存器的值在程序状态可由CPU读出和写入。在自动初始化情况下,当EOP#产生时,它的值可初始化到起始状态。

3.基地址和基字节数寄存器 每一个通道有一对16位的基地址和基字节数寄存器,它们存放着与现行寄存器相联系的初始值。在自动初始化情况下,这两个寄存器中的值用来恢复相应的现行寄存器中的初始值。在程序状态,基寄存器与它们相应的现行寄存器是同时由CPU写入的。这些寄存器的内容不能读出。

4.命令寄存器 这是一个8位寄存器,用以控制8237的工作。命令字的格式如图7-24所示。 D0位用来规定是否工作在存储器到存储器传送方式。 D4位用来选择是固定优先权还是优先权旋转。8237有两种优先权方式可供选择,一种是固定优先权,在这种方式下通道的优先权是固定的,通道0的优先权最高,通道3的优先权最低;另一种方式是优先权旋转,在这种方式下刚服务过的通道的优先权变为最低的,其他通道的优先权也作相应的旋转,如图7-25所示。 命令寄存器可由CPU写入进行编程,复位信号使其清零。

5.模式寄存器 每一个通道有一个6位的模式寄存器以规定通道的工作模式,如图7-26所示。 在编程时用最低两位来选择写入哪个通道的模式寄存器。 最高两位(D7、D6)规定了四种工作模式的某一种,D3、D2两位规定是DMA读还是DMA写或是校验操作。 D5这一位用于规定地址是增量修改还是减量修改。

D4这一位规定是否允许自动初始化。若工作在自动初始化方式,则每当产生EOP#信号时(不论是由内部的TC产生或是由外界产生)都用基地址寄存器和基字节数寄存器的内容,使相应的现行寄存器恢复初始值。而现行寄存器和基寄存器的内容,是由CPU编程时同时写入的,但在DMA传送过程中,现行寄存器的内容是不断修改的,而基寄存器的内容维持不变(除非重新编程)。在自动初始化以后通道就作好了进行另一次DMA传送的准备。

6.请求寄存器 8237的每个通道有一条硬件的DREQ请求线,当工作在数据块传送方式时也可以由软件发出DREQ请求。所以,在8237中有一种请求寄存器,如图7-27所示。 每个通道的软件请求可以分别设置。软件请求是非屏蔽的,它们的优先权同样受优先权逻辑的控制。 软件请求的位由TC或外部的EOP#复位。RESET信号使整个寄存器的内容清除。 只有在数据块传送方式,才允许使用软件请求,若用于存储器到存储器传送,则0通道必须用软件请求,以启动传送过程。

7.屏蔽寄存器 每个通道外设通过DREQ线发出的请求,可以单独地屏蔽或允许。所以,在8237中有一个屏蔽寄存器,如图7-28所示。 在RESET信号作用后,四个通道全置于屏蔽状态,因此在编程时,必须根据需要复位屏蔽位。当某一个通道进行DMA传送后,产生EOP#信号,如果不是工作在自动初始化方式,则这一通道的屏蔽位置位,必须再次编程为允许,才能进行下一次的DMA传送。 也可以用图7-28(b)所示的格式,在一个命令字中对四个通道的屏蔽情况进行编程。

8.状态寄存器 8237中有一个可由CPU读取的状态寄存器,如图7-29所示。 状态寄存器中的低4位,反映了在读命令瞬间每个通道的字节数是否已减到零。高4位反映每个通道的请求情况。

9.临时寄存器 在存储器到存储器的传送方式下,临时寄存器保存从源单元读出的数据,又由它写入目的单元。在传送完成时,它保留传送的最后一个字节,此字节可由CPU读出。READY信号使其复位。 如上所述,8237内部寄存器可以分成两大类,一类是通道寄存器,即每个通道都有的现行地址寄存器、现行字节数寄存器和基地址及基字节数寄存器;另一类是控制和状态寄存器。这些寄存器是由最低4位地址A3~A0以及读写命令来区分的。通道寄存器的寻址如表7-2所示。

10.软件命令 8237在编程状态还有两种软件命令,软件命令不需要通过数据总线写入控制字,而由8237直接对地址和控制信号进行译码。有两种软件命令: (1) 清除高/低触发器 8237内部的高/低触发器用以控制写入或读出16位寄存器的高字节还是低字节。如表7-2中所示,若触发器为零,则操作的为低字节;为“1”,则操作的为高字节。在复位以后,此触发器被清零,每当对16位寄存器进行一次操作,则此触发器改变状态。我们也可以用此命令使它清零,以改变下面要进行的读/写操作的顺序。软件命令的格式如表7-4所示。 (2) 主清除命令 这个命令与硬件的RESET信号有相同的功能,即它使命令、状态、请求、临时寄存器以及内部的高/低触发器清零;使屏蔽寄存器各位全置为“1”(即屏蔽状态);使8237进入空闲周期,以便进行编程。其命令格式示于表7-4中。

11.8237的编程步骤 (1) 输出主清除命令; (2) 写入基与现行地址寄存器; (3) 写入基与现行字节数寄存器; (4) 写入模式寄存器; (5) 写入屏蔽寄存器; (6) 写入命令寄存器; (7) 写入请求寄存器。 若有软件请求,就写入至指定通道,就可以开始DMA传送的过程;若无软件请求,则在完成了(1)~(7)的编程后,由通道的DREQ启动DMA传送过程。

12.编程举例 若要利用通道0,由外设(磁盘)输入32KB的一个数据块,传送至内存8000H开始的区域(增量传送),采用块连续传送的方式,传送完不自动初始化,外设的DREQ和DACK都为高电平有效。 要编程首先要确定端口地址。地址的低4位用以区分8237的内部寄存器,高4位地址A7~A4经译码后,连至选片端CS,假定选中时高4位为5。 按上述要求,可确定如下控制字: ① 模式控制字:84H ② 屏蔽字:00H ③ 命令字:A0H 初始化程序如下:

OUT 5DH,AL;输出主清除命令 MOV AL,00H OUT 50H,AL;输出基和现行地址的低8位 MOV AL,80H OUT 50H,AL;输出基和现行地址的高8位 OUT 51H,AL OUT 51H,AL;给基和现行字节数赋值 MOV AL,84H OUT 5BH,AL;输出模式字 OUT 5AH,AL;输出屏蔽字 MOV AL,0A0H OUT 58H,AL;输出命令字

7.3.7 8237的时序 8237 DMA传送的时序,如图7-30所示。 8237在复位以后就处在空闲周期即SI周期,在此周期CPU可以对8237编程。8237在SI周期采样通道的DREQ线,只要尚未有请求,则8237就始终处在SI周期。当检测到(在SI的脉冲下降沿)某一通道(或几个通道同时)有DREQ请求,则在下一个周期就进入S0周期;而且在SI脉冲的上升沿使向CPU发DMA请求的HRQ信号变为有效。在S0周期,8237等待CPU对总线请求的响应,只要未收到有效的HLDA信号,8237始终处在S0周期,当在S0周期的上升沿,采样到HLDA信号有效,则下一周期就进入DMA传送状态即S1周期。

通道的DMA传送是由S1、S2、S3、S4四个周期组成。在S1周期使地址允许信号AEN有效,自S1周期起一方面把要访问的存储单元的高8位地址通过数据总线DB0~DB7输出,另一方面发出一个有效的地址选通信号ADSTB,利用ADSTB的下降沿把在DB0~DB7上的高8位地址锁存至外部的地址锁存器中。同时地址的低8位由A0~A7输出,且在整个DMA传送期间保持住。 在S2状态,8237 DMA控制器向外设输出DMA响应信号DACK。在通常情况下,外设的DREQ信号必须保持到DACK有效。自S2状态开始DMA控制器也使读或写信号有效,利用这两组控制命令完成外设与存储器之间的数据传送(但数据不进入8237内部),到S4状态数据传送完成。

在块传送方式下,S4以后应接着传送下一个字节,通常情况下,地址的高8位不变,只是低8位经过增量或减量。所以,输出和锁存高8位地址的S1周期不需要了,直接进入S2周期,由输出地址的低8位开始,由新的读和写命令完成数据的传送。这种过程一直继续到把规定的字节数传送完,发出TC信号(产生内部的EOP#信号),则一个DMA传送过程结束,8237又进入SI周期,等待着新的请求。 若存储器和外设不能在S4周期前完成数据传送,则只要设法使READY信号线变低,就可以在S3和S4周期间插入SW周期,在此周期所有控制信号维持不变,从而加宽DMA传送的周期。 8237可以完成从存储器到存储器的传送,其时序如图7-31所示。

传送过程由8个时钟周期组成。前4个周期S11、S12、S13、S14用于从源区读出数据。从S11周期开始,通道0现行地址的高8位通过DB0~DB7输出,由ADSTB锁存至外部锁存器中,地址的低8位由A0~A7输出,自S12周期开始使MEMR#信号有效,在S14周期的时钟上升沿把从源区读出的数据,通过DB0~DB7送至8237的临时寄存器中。接着的4个周期S21、S22、S23、S24用于把数据写入至目的区。先在S21周期把通道1地址的高8位通过DB0~DB7输出,由ADSTB锁存至外部锁存器,地址的低8位由A0~A7输出,使MEMW#信号有效,同时把在8237的临时寄存器中的数据由DB0~DB7输出,由MEMW#信号将其写入至目的区,待整个数据块传送完了发出EOP#信号,结束DMA传送。