350 likes | 526 Views
第 五章. DMA 技术 课程名称:微机原理与接口技术 授课方式 : 讲课、实验、提问及作业 主讲人:金永贤. 第 5 章 DMA 控制技术. 教学重点 DMA ( Direct Memory Access )特点 8237A 的工作方式 8237A 寄存器组的编程. 5.1 DMA 传送的特点. ( 1 )在内存与 I/O 设备之间或内存与内存之间直接传送数据,不需要 CPU 的中转 ( 2 )主要用于需要高速大批量数据传送的系统中,如磁盘存取、高速数据采集等系统中 ( 3 )需要有 DMA 硬件( DMA 控制器).
E N D
第 五章 DMA技术 课程名称:微机原理与接口技术 授课方式:讲课、实验、提问及作业 主讲人:金永贤
第5章 DMA控制技术 教学重点 DMA( Direct Memory Access)特点 8237A的工作方式 8237A寄存器组的编程
5.1 DMA传送的特点 • (1)在内存与I/O设备之间或内存与内存之间直接传送数据,不需要CPU的中转 • (2)主要用于需要高速大批量数据传送的系统中,如磁盘存取、高速数据采集等系统中 • (3)需要有DMA硬件(DMA控制器)
5.2 DMA传送的过程 • DMA传送从开始到结束全过程分为几个阶段,在DMA操作开始之前,用户应根据需要先对DMA控制器编程,把要传送的数据字节数据,数据在存储器中的起始地址、传送方向、DMAC通道号等信息送到DMAC中,这叫DMAC的初始化。初始化后,就等待外部设备来申请DMA请求。 • 1.申请阶段 • 2.响应阶段 • 3.数据传送阶段 • 4.传送结束阶段
5.3 DMA传送的方式 • 一、DMA操作类型 DMA传送主要是作数据传送操作,但也包括一些并不是进行数据传送的操作,如数据校验和数据检索等。 1.数据传送,数据传送是把源地址的数据传送到目的地址单元中去。并且DMA传送的读/写操作是从存储器的立场来说的,即DMA读是指从存储器读出数据,写到外设中去,DMA写是指从外设读出数据,写到存储器中去。 2.数据校验,校验操作并不是对数据进行传送,只是对数据块内每个字节进行某种校验。
5.3 DMA传送的方式 3.数据检索,数据检索操作和数据校验一样,并不进行数据传送,只是对在指定的内存区内查找某个关键字节或某几个关键数据位是否存在,如果查到就停止检索。
5.3 DMA传送的方式 • 二、DMA操作方式 DMA操作方式是指进行上述每种DMA操作类型时,每次DMA操作所操作的字节数,每种DMA操作类型,一般都有3种操作方式。 1.单字节方式,每次DMA操作只操作一个字节,即发出一次总线请求,DMAC占用总线后,进入DMA周期只传送一个字节数据,便释放总线。 2.连续方式,在数据块传送的整个过程中,只要DMA传送一开始,DMAC始终占用总线,直到数据传送结束,才把总线的控制权还给CPU。
5.3 DMA传送的方式 3.请求方式,这种方式是以外部是否有DMA请求来决定,有请求时,DMAC才占用总线;当请求(DREQ)无效时,DMAC会释放总线,把总线控制权交给CPU。
5.4 DMA控制器(DMAC) • 一、DMA控制器在系统中的地位 DMA控制器在系统中的两种工作状态 DMA控制器是作为两种存储实体之间实现高速数据传送而设计的专用器件。它与其他外围接口器件不同,它具有接管和控制微机中系统总线(地址、数据、控制总线)的功能。对于一般的外设而言它是主控者,对于CPU而言它又是受控者。因此,DMAC在系统中有两种工作状态:被动态与主动态,可在两种不同的地位:受控器和主控器。
5.4 DMA控制器(DMAC) 二、总线控制权在DMA控制器与CPU之间的转移 当DMAC收到一个从外设发来的DREQ请求信号请求进行DMA传送时,DMAC经判优及屏蔽处理后向总线仲裁器送出总线请求HRQ到CPU要求占用总线。CPU在认为可能的情况下,在完成总线周期后进入总线保持状态,使CPU对总线的控制失效(地址、数据、控制总线变为高阻态),并发回HLDA总线应答信号通知DMAC,CPU已交出总线控制权。此时DMAC接管总线控制权,由被动态进入主动态,然后由它向I/O设备发DMA应答信号DACK和读/写信号,向存储器发地址信号和读写信号,开始DMA传送,传送结束DMAC发出过程中止信号EOP。 HRQ DREQ CPU DMAC 外设 HLDA DACK
5.4 DMA控制器(DMAC) 三、DMA控制器8237A-5特性 DMAC8237A-5是Intel公司生产一种应用较广的DMA控制器,具有如下特点: (1)每个8237A芯片有4个DMA通道 (2)每个DMA通道具有不同的优先权 (3)每个DMA通道可以分别允许和禁止 (4)每个DMA通道有4种工作方式 (5)一次传送的最大长度可达64KB,其数据传送率可 达1.5Mb/s (6)多个8237A芯片可以级连,扩展通道
5.4 DMA控制器(DMAC) 四、DMA控制器8237A-5 1.8237A-5的外部特性 8237A-5是一个40引脚的双列直插式芯片。如图4.1所示,由于它既是主控者又是受控者,故外部引脚设置也具有特色,下面对各引脚步功能加以说明。
5.4 DMA控制器(DMAC) • DREQ0~DREQ3:DMA通道请求。当外设需要请求DMA服务时,将DREQ信号置成有效电平,并要保持到产生响应信号,它们的优先级是DREQ0最高。 • HRQ:总线请求。8237A输出有效的HRQ高电平,向CPU申请使用系统总线。 • HLDA:总线响应。8237A接受来自CPU的响应信号HLDA,取得了总线的控制权。 • DACK0~DACK3:DMA通道响应。8237A使请求服务的通道产生相应的DMA响应信号。
5.4 DMA控制器(DMAC) A0-A3:4根低地址线,双向三态。被动态时输入,CPU对8237进行初始化时访问芯片内部寄存器与计数器,4位地址说明8237片内16个端口。主动态时输出,作为20位存储器地址的最低4位。 A4~A7:4根地址线,单向。8237主态时输出,访问存储器地址。 DB0~DB7:双向三态双功能线。 被动态:数据线,CPU对8237进行初始化,或传送状态。 主动态:为地址线,作为访问存储器的地址的高8位地址,同时也作数据线;在M—M传送时,DB0~DB7作暂存数据端。 ADSTB:地址选通,输出。16位地址的高8位锁存器的输入选通。 AEN:地址允许,输出。高8位地址锁存器输出允许信号。
5.4 DMA控制器(DMAC) • MEMR*:存储器读。有效将数据从存储器读出 • MEMW*:存储器写。有效将数据写入存储器 • IOR*/IOW*:I/O读/写信号,双向。8237A为主动态时,输出,对I/O设备进行读/写。被动态时,输入,CPU向DMAC写命令、初始化或读状态。 • READY:准备好。DMA传送的S3下降沿检测到为低时,插入等待状态Sw,直到READY为高才进入第4个时钟周期S4。 • EOP*:过程结束。DMA传送过程结束,输出一个低有效脉冲。外部输入低脉冲信号,则终结DMA传送。 • CS*:片选。低有效时,微处理器与8237A通过数据线通信,主要完成对8237A的编程。
5.4 DMA控制器(DMAC) 2. 8237A-5内部寄存器及编程命令 8237A-5内部逻辑框图,包括定时和控制逻辑,命令控制逻辑,优先权控制逻辑,寄存器组,地址/数据缓冲器等。
5.4 DMA控制器(DMAC) (1)工作方式寄存器,它用于设置DMA的操作类型,操作方式,地址改变方式,自动预置,以及选择通道。 请看方式字的格式
方式字格式 00 DMA校验 01 DMA写 10 DMA读 11 非法 ×× 若D7D6=11 0 地址增量(加1) 1 地址减量(减1) 0 禁止自动预置 1 允许自动预置 00 通道0 01 通道1 10 通道2 11 通道3 00 询问方式 01 单一方式 10 块方式 11 级联模式
5.4 DMA控制器(DMAC) 例1:PC系列软盘读/写操作选择DMA通道2,单字节传送,地址增1,不用自动预置,其读/写校验的方式字如下: 写操作01000110B=46H 读操作01001010B=4AH 校验操作:01000010B=42H
5.4 DMA控制器(DMAC) (2)基地址寄存器,它是16位的寄存器,用于存DMA传送的内存首址,在初始化时,由CPU先写入低字节,再写入高字节。传送过程中基地址寄存器的内容不变。其作用:在自动预置时,将它的值重新装入到当前地址寄存器。 (3)当前地址寄存器,用于存放DMA传送过程中的内存地址,每次传送后地址自动增1或减1 。 (4)基字节计数器,它是16位的寄存器,用于存放DMA传送的总字节数,在初始化时由CPU先低字节后高字节顺序写入,当自动预置时,将它的值重新装入到当前字节计数器。
5.4 DMA控制器(DMAC) (5)当前字节计数器,它是16位的计数器,用于存放DMA传送过程中没有传送完的字节数,每次传送之后,字节计数器减1,当它的值由0减到0FFFFH时,便产生EOP,表示字节传送完毕。 (6)屏蔽寄存器,用于禁止或允许通道的DMA请求。 (7)请求寄存器,由软件来启动DMA请求。 (8)命令寄存器,用于控制8237A-5操作, 请看命令字的格式
0 DACK低有效 1 DACK高有效 0 滞后写 1 扩展写 × 若D3=1 0 DREQ高有效 1 DREQ低有效 0 固定优先权 1 循环优先权 0 允许DMAC工作 1 禁止DMAC工作 0 禁止存储器之间传送 1 允许存储器之间传送 0 正常时序 1 压缩时序 × 若D0=1 0 允许通道0地址改变 1 禁止通道0地址改变 × 若D0=0 命令字格式
5.4 DMA控制器(DMAC) (9)状态寄存器,存放8237A-5的状态,提供哪些通道已到终止计数,哪些通道有DMA请求等状态信息供CPU分析。 请看状态字的格式
1通道3尚有未处理的DMA请求 0通道3无尚有未处理的DMA请求 1通道1尚有未处理的DMA请求 0通道1无尚有未处理的DMA请求 1通道2尚有未处理的DMA请求 0通道2无尚有未处理的DMA请求 1通道0尚有未处理的DMA请求 0通道0无尚有未处理的DMA请求 1通道2已收到终止计数信号 0通道2未收到终止计数信号 1通道0已收到终止计数信号 0通道0未收到终止计数信号 1通道3已收到终止计数信号 0通道3未收到终止计数信号 1通道1已收到终止计数信号 0通道0未收到终止计数信号 状态字格式
5.4 DMA控制器(DMAC) (10)暂存寄存器,在存储器与存储器传送时暂时保存数据。 (11)软命令 软命令只要对特定的地址进行一次写操作,命令就生效。 ①清先/后触发器命令。 在向16位地址寄存器和字节数计数器进行写操作时,分两次写入,由它控制写入次序,为0写入低字节,为1写入高字节。 MOV AL,0AAH ;AL为任意值0AAH OUT 0CH,AL;写入先/后触发器端口使其置0态 ②总清除命令。它与硬件RESET信号作用相同,即执行本软件命令的结果会使:“命令”、“状态”、“请求”、“暂存”寄存器以及“先/后触发器”清除,系统进入空闲状态,而屏蔽寄存器置位,屏蔽所有外部的DMA请求。程序段为: MOV AL,0BBH; AL为任意值0BBH OUT 0DH,AL; 写入总清端口,执行总清命令
5.4 DMA控制器(DMAC) 3. DMA控制器的时序 DMA控制器8237-5有两种工作状态,从时间顺序来看,可看成两个操作周期,DMA空闲周期和DMA有效周期,其中还有一个从空闲周期到有效周期的过渡阶段。 (1)DMA空闲周期SI 未编程之前,或已编程但还没有DMA请求时,进入空闲周期。即处于被动工作方式。此时,控制器一方面检测DREQ,看是否有外设请求DMA服务;另一方面,对CS端进行采样,检测是否CPU要对它进行初始化或读取信息。当发现CS低电平时,且无外设提出DMA请求(DREQ为无效),则认为CPU对DMAC初始化编程。 (2)过渡状态S0 8237A初始化完毕后,若检测到DREQ请求有效,则表示有外设要求DMA传送,此时,DMAC即向CPU发出总线请求信号HRQ。DMAC发出HQR之后,DMAC的时序从SI状态跳出进入S0状态,并重复执行S0状态,直到收到CPU的应答信号HLDA后,才结束S0状态,进入S1状态,开始DMA周期。可见S0是8237A送出HRQ到它收到有效的HLDA之间的状态周期,是DMA控制器从被动工作方式到主动工作方式的过渡阶段
5.4 DMA控制器(DMAC) (3)DMA有效周期 DMA进入有效周期,开始传送数据。一个完整的DMA传送周期包括S1,S2,S3和S4个状态。如果存储器或外设的速度跟不上,可在S3和S4之间插入等待状态周期SW。 ①S1:更新高8位地址。 ②S2:输出16位RAM地址和发DACK信号寻址I/O设备。 在S2状态周期中,要完成两件事: 一、是输出16位地址到RAM,其中高8位地址由数据线DB0~DB7输出,用ADSTB下降沿锁存,低8位地址由地址线A0~A7输出。 二、S2状态周期还向申请DMA传送的外设发出请求回答信号DACK,以寻址I/O设备,为数据传送作好准备。随后发读写命令。
5.4 DMA控制器(DMAC) ③S3:读周期。在此状态,发出MEMR(DMA读)或IOR(DMA写)命 令。把从内存或I/O接口读取的8位数据放到数据线DB0~DB7上,等 待写周期的到来。 ④S4:写周期。发出IOW(DMA读)或MEMW(DMA写)命令。此时,把 读周期之后保持在数据线的数据写到RAM或I/O接口,到此,完成 了一个字节的DMA传送。由于读周期之后所得数据并不送入DMA 控制器内部,而是保持在数据线,所以,写周期一开始,即可快速 地从数据线上直接写到RAM或I/O接口,高速DMA真正含义。
5.4 DMA控制器(DMAC) 若采用提前写(扩展写),则在S3中同时发MEMW(DMA写)或 IOW(DMA读)命令,即把写命令提前到与读命令同时从S3开始,或 者说,写命令和读命令一样扩展为2个时钟周期。若采用压缩时 序,则去掉S3状态,将读命令宽度压缩到写命令的宽度,即读周期 和写周期同为S4。因此,在成组连续传送不更新高8位地址的情况 下,一次DMA传送可压缩到2个时钟周期,这可获得更高的数据吞 吐量。 S4状态开始前,8237A检测就绪(READY)端的输入信号,如 果未就绪,即READY信号为低电平,则在S3和S4之间插入等待状态 周期SW;如果已就绪,即READY为高电平,则不插入Sw,8237直 接进入S4状态周期。
Si Si S0 S0 S1 S2 S3 S4 S2 S3 S4 Si Si CLK DREQ HRQ HLDA AEN A8~A15 MEMR(IOR) IOW(MEMW) 图5.3 8237-5的DMA传送时序 ADSTB DB0~DB7 A0~A7 DACK
5. 5 DMA系统 • 一、IBM-PC微机的DMA系统 PC微机的DMA系统配置逻辑结构图如图4.7所示 1.单片的DMAC的DMA系统 系统中只有1片8237-5。支持4个通道DMA传送,其中0通道用于动态RAM的民刷新, 1通道保留, 2通道用于软盘,3通道用于硬盘传送数据。 2.双片DMAC的 DMAC系统 采用2片8237-5,支持7个通道的DMA传送,片0的通道2仍为软盘DMA传送用,片0的通道0、通道1和通道3未使用,片1 的通道4用于和片0级连,片1 的5、6、7通道保留未用。
5. 5 DMA系统 • 二、DMA系统的初始化 1.初始化编程应注意的事项 DMA初始化是指CPU对DMA控制器8237-5的初始化,与一般的I/O接口芯片基本相同,但要有几点要注意: (1)为确保软件编程时不受外界硬件的信号影响,在编程时要通过命令寄存器发送命令禁止8237-5工作或向屏蔽寄存器发送屏蔽命令,将要编程的通道加以屏蔽。 (2)所有通道的工作方式寄存器都要加载。 (3)为提供存储器高位地址,CPU对8237-5进行初始化编程时,除了向基地址寄存器和当前地址寄存器装入低16位地址值之外,还应向页面地址寄存器写入高位的地址。
5. 5 DMA系统 (4)对8237-5芯片的检测。通常,在系统上电期间,要对DMA芯片进行检测,只有在芯片检测通过后,方可继续DMA初始化,实现DMA传送。检测内容是对所有通道的16位寄存器进行读/写测试,当写入和读出结果相等,则判断芯片正确可用,否则,视为致命性错误,令系统停机。 2. 初始化编程 对8237-5进行编程,程序中的变量DMA地址是00H,测试程序对4个通道的8个16位寄存器先后写入“1”和全“0”,再读出比较,看前后是否一致,若不一致则出错,停机。
;检测前,禁止DMA控制器工作 MOV AL,04H ;禁止8237工作 OUT DMA+08H,AL ;命令字送命令寄存器 OUT DMA+0DH,AL ;总请命令 ;作全“1”检测 MOV AL,OFFH C16: MOV BL,AL MOV BH,AL MOV CX,8 ;循环测试8个寄存器 MOV DX,DMA ;FFH写入0~3号通道的地址或字节数寄存器 C17: OUT DX,AL ;写入低8位 OUT DX,AL ;写入高8位 MOV AL,01H ;读前,破坏原内容 IN AL,DX ;读出刚才写入的低8位 MOV AH,AL IN AL,DX ;再读出刚才写入的高8位
CMP BX,AX JE C18 HLT C18: INC DX ;指向下一个寄存器 LOOP C17 ;作全“0”检测 INC AL ;使AL=0 JE C16 ;返回再作写全“0”检测 ;检测通过,开始设置命令 SUB AL,AL OUT DMA+8,AL ;各通道工作方式寄存器加载 MOV AL,40H OUT DMA+0BH,AL ┇