Transcript
Page 1: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

12.1 概述12.2 8237A DMA 控制器12.3 8237A 的应用

第十二章 DMA 控制器

Page 2: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

12.1 概述

DMA=Direct Memory Access ,直接存储器存取

CPU

内存 外设

数据通道 数据通道

非 DMA 方式( 包括程序控制方式和中断方式 )

DMAC

内存 外设数据通道

DMA 方式

Page 3: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

概述

DMAC 具有独立的控制三大总线来访问存储器和 I/O端口的能力,它能像 CPU 一样提供数据传送所需的地址信息和读写控制信息

DMAC 和 CPU 都挂在系统总线上,当进入 DMA 方式时, DMAC 成为总线主控。

在总线上,可以控制其他部件的部件称为总线主控或主控 (bus master) ,被控部件称为从控 (slave) 。任意时刻,总线上只有一个主控。

Page 4: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

DMA 操作之前,应先对 DMAC 编程,把要传送的数据块长度、数据块在存储器中的起始地址,数据传送方向等信息发送给 DMAC

DMA 操作过程包括三个阶段:•DMA 请求•DMA 响应和数据传送•传送结束

DMA 初始化概述

Page 5: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

当外设要求以 DMA 方式为它服务时,发 DMA 请求信号 DREQ到 DMACDMAC 检查该信号是否被屏蔽及其优先权,如确认该信号有效则向 CPU 发送总线请求信号 HRQ( 连到 CPU的 HOLD)

DMA 请求阶段

CPU

DMAC

HRQ

外设DREQ

地址总线

数据总线 存储器

概述

Page 6: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

每个总线周期结束时 CPU 检测 HOLD ,如为高电平,则响应HOLD 请求进入保持态,使三态总线 CPU 侧呈高阻状态,并以总线保持响应信号 HLDA 通知 DMACDMAC 接管总线,并以 DACK 信号通知外设,使之成为 DMA传送时被选中的设备,同时 DMAC 给出内存地址以及 I/O 读写和存储器读写控制信号,在外设和存储器之间完成数据传送

DMA 响应和数据传送阶段

CPU

DMAC

HLDA

外设DACK

存储器

地址总线

数据总线

IOR/IOW

MEMR/MEMW

概述

Page 7: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

传送结束阶段

传送完成后, DMAC 放弃总线,撤消总线请求 (HRQ为低 ), CPU 检测到 HRQ(HOLD) 为低后,撤消HLDA , CPU 重新获得总线控制权

CPU

DMAC

HRQ

外设EOP

地址总线

数据总线 存储器

概述

Page 8: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

一、内部结构PC 系列微机使用可编程 DMA 控制器 8237A( 简称 8237) 实现 DMA 功能

8237 有四个通道,每个通道都有独立的与相应外设接口相联系的信号,四个通道共享与 CPU 相连的控制信号、地址信号、数据信号

PC/AT 以上的微机使用两片 8237, Pentium 微机系统中没有独立的 8237 芯片,其功能集成在芯片组中

12.2 8237A DMA 控制器

Page 9: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

8237 的编程结构

Page 10: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

二、引脚功能

12.2 8237A DMA 控制器

Page 11: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

8237 的引脚功能

•请求 / 应答信号

外设接口电路向 8237 的请求信号: DREQ3~DREQ0

8237 对外设接口电路的应答信号: DACK3~DACK0

8237 向 CPU 申请总线的信号: HRQ (连至 CPU 的 HOLD )

CPU 向 8237 传送的允许使用总线信号: HLDA

Page 12: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

8237 的引脚功能

•地址信号

: CPU 初始化 8237 或读 8237 状态时所需的片选信号

A7~A0 (输出): 8237 访问存储器的地址信号的低 8位。

A3~A0 (输入): CPU 初始化 8237 或读 8237 状态时,用于寻址 8237 内部寄存器

Page 13: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

8237 的引脚功能

•数据信号 ( 双向 ) : DB7~DB0

CPU 为主控时,可以通过 I/O 读命令查询 8237 的状态寄存器的内容,或通过 I/O 写命令对 8237 的内部寄存器进行编程,数据传送通过 DB7~DB0

8237 为主控时, DB7~DB0 输出要访问的内存地址的高 8 位,并通过 ADSTB 锁存到外部地址锁存器中,和 A7~A0 输出的低 8 位地址一起构成 16 位地址

Page 14: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

8237 的引脚功能

•地址允许信号: AEN

8237 作为主控时( 8237 控制总线),输出 AEN=1 。

8237 作为从控时( CPU 控制总线),输出 AEN=0 。

•DMA 传输结束信号: (双向)

当 DMAC 内部任一通道传输结束, 8237 发出

若由外部给 DMAC 送入有效的 ,则强制 DMAC 内部所有通道结束传输。

Page 15: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

8237 的引脚功能

MEMR/MEMW :

8237 发出的存储器读 / 写信号

IOR/IOW :

8237 作为主控时,输出的 I/O 读 / 写信号。

8237 作为从控时, CPU 发出的 I/O 读 / 写信号,用于读 / 写 8237

Page 16: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

8237 的引脚功能

ADSTB :地址选通信号

用于启动地址锁存器

READY :存储器或 I/O 的就绪信号

Page 17: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

三、 8237 的编程结构

Page 18: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

8237 的编程结构

控制寄存器

8 位, 4 个通道共用,用于设定 8237 的信号形式、工作时序、传输方向。 端口地址 08H

信号形式: DREQ/DACK 信号的有效形式。工作时序:普通时序( 3 个时钟周期完成一次传输)

压缩时序( 2 个时钟周期完成一次传输)传输方向:内存 I/O (常用)

I/O 内存(常用) 内存内存( PC 系列机未用)

Page 19: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

8237 的编程结构

D7 : 0= DACK 低电平有效; 1=DACK 高电平有效 D6 : 0= DREQ 高电平有效; 1=DREQ 低电平有效D5 : 1= 扩展写信号, IOW/MEMW 比正常时序提前一个周期; 0= 不扩展写信号D4 : 0= 固定优先级,通道 0 优先级最高,通道 3 优先级最低; 1= 循环优先级D3 : 0= 正常时序 1= 压缩时序D2 : 0= 启动 ( 指允许 )8237 工作 ; 1= 停止 ( 指禁止 ) 8237工作D1 :内存到内存传输时, D1=1 使源地址保持不变D0 : 0= 内存 I/O 间的传输; 1= 内存内存间的传输

Page 20: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

控制寄存器

8237 的编程结构

PC 系列微型机中, BIOS 初始化时将控制寄存器设为00H——

禁止内存内存的传送,允许读 / 写操作,使用正常时序固定优先级不扩展写信号DREQ 高电平有效DACK 高电平有效

Page 21: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

8237 的编程结构

状态寄存器

8 位, 4 个通道共用,与控制寄存器共用一个端口地址端口地址 08H记录每个通道是否有请求、传输是否结束

D3~D0 :分别对应通道 3~0 ,指出 4 个通道的 DMA传 送是否结束,结束为 1D7~D4 :分别对应通道 3~0 ,表示 4 个通道是否有 DMA 请求,有 DMA 请求为 1

Page 22: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

暂存寄存器

8 位 , 端口地址 0DH

在内存内存传输时,暂存数据。

注意:内存 I/O 传输时,数据不进入 8237 内部,只存在于数据总线上

8237 的编程结构

Page 23: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

8237 的编程结构

模式寄存器

8 位,设定 DMA 的传输模式, 4 个通道的模式寄存器共用一个端口地址,端口地址 0BH

传输模式:•单字节传输模式•数据块传输模式•请求传输模式•级联传输模式

Page 24: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

单字节传输模式:每次 DMA 操作只传送一字节后,接着 8237释放总线

块传输模式: 8237 获得总线控制权后,连续传送多个字节,每传输一个字节,当前字节计数器减 1 ,当前地址寄存器加 1 或减 1 ,直到所要求的字节数传输完(当前字节计数器减至 0 ), 8237在 EOP 引脚上发出结束信号,然后释放总线。在块传输过程中,若向8237 的 EOP 引脚上输入低电平,可强行结束传输。

模式寄存器

8237 的编程结构

Page 25: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

请求传输模式:在传输过程中, 8237 要检测 DREQ 信号(询问外设),当 DREQ 为低时, 8237暂停传输(不释放总线),当 DREQ再次有效后,继续进行传输。 级联传输模式:多片 8237 级联时,可以构成主从式 DMA 系统。级联的方式是把从片的请求线 HRQ 连至主片的 DREQ 引脚,主片的 DACK 联至从片的 HLDA 引脚若主 8237 的某通道( DREQ )连接从 8237 的 HRQ ,主 8237 的该通道应设置为级联传输模式,但从 8237不设置级联传输模式,而是设置其它三种模式之一

模式寄存器

8237 的编程结构

Page 26: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

8237 的编程结构

D7 , D6 :模式选择00= 请求传输模式 01=单字节传输模式10= 块传输模式 11= 级联传输模式

D5 :存储器地址增减选择, 0= 地址增 1 , 1= 地址减1D4 :自动预置功能, 0= 禁止, 1= 允许自动预置:在当前字节计数器到达 0 时,当前字节计数器和当前地址寄存器从基本字节计数器和基地址寄存器中自动获得新的初值

Page 27: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

8237 的编程结构

D3 , D2 :传输类型选择01= 写传输( I/O 内存), 10= 读传输(内存 I/O )00=校验传输 , 11=无意义校验传输用来对读传输和写传输功能进行校验,它是一种虚拟传输, 8237也会产生存储器地址信号,但不产生存储器读 / 写、 I/O 读 / 写信号,校验传输一般用于器件测试

D1 , D0 :通道选择00= 通道 0 01= 通道 110= 通道 2 11= 通道 3

Page 28: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

8237 的编程结构

基地址寄存器和当前地址寄存器

每个通道一个基地址寄存器,一个当前地址寄存器,16 位 ,占用相同的端口地址

基地址寄存器: DMA 传输的内存地址初值,在初始化时由 CPU分两次写入。

当前地址寄存器: DMA 传输过程中,内存地址的当前值。每传输一字节,该寄存器的值增 1 或减 1 。 CPU 可分两次读出其值。

Page 29: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

8237 的编程结构

基本字节计数器和当前字节计数器

每个通道一个基本字节计数器,一个当前字节计数器,16 位 ,占用相同的端口地址

基字节计数器: DMA 传输的字节数初值,在初始化时由 CPU分两次写入。 8237规定,初值比实际传输的字节数少 1

当前字节计数器: DMA 传输过程中,当前的计数值。每传输一字节,该寄存器的值减 1 。当计数值减到 FFFFH 时, 8237 发出结束信号 EOP 。 CPU 可分两次读出其值。

Page 30: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

8237 的编程结构

先 / 后触发器

端口地址 0CH

CPU 写入基地址寄存器、基本字节计数器时,均分两次写入,先 / 后触发器用于控制写入的值是低 8 位还是高 8位

写入过程:①使先 / 后触发器 =0 。②写入低 8 位,先 / 后触发器自动置 1 。③写入高 8 位,先 / 后触发器自动置 0 。

Page 31: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

8237 的编程结构

请求寄存器

四个通道的请求触发器构成一个请求寄存器( 8 位)一般情况下, DMA 请求由硬件信号 DREQ 发出,也可由软件设置请求触发器来发出 DMA 请求。

D2=1 设置 DMA 请求D1~D0 :指定软件 DMA 请求的通道

端口地址 09H

Page 32: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

8237 的编程结构

屏蔽寄存器

四个通道的屏蔽触发器构成一个屏蔽寄存器( 8 位)

当屏蔽寄存器的屏蔽标志置 1 时,将禁止该通道的硬件 DMA 请求和软件 DMA 请求。

D2=1 ,设置屏蔽; D2 =0 ,清除屏蔽;

D1~D0 :选通道

端口地址 0AH

Page 33: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

8237 的编程结构

综合屏蔽寄存器

8237 可以一次完成四个通道的屏蔽设置

D3~D0 :分别对通道 3~0 设置屏蔽

1 ,设置屏蔽; 0 ,清除屏蔽;

端口地址 0FH

Page 34: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

清除屏蔽寄存器

对端口 0EH 写入 0 ,可以一次清除四个通道的屏蔽触发器

端口地址 0EH

MOV DX, DMA+0EHMOV AL, 0OUT DX, AL

8237 的编程结构

Page 35: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

8237 的编程结构

复位命令寄存器

对端口 0DH 写入 0 ,使 8237复位,其功能等同于硬件复位

端口地址 0DH

8237复位后的状态为:

控制寄存器 状态寄存器 请求寄存器 暂存器 先 / 后触发器

清 0 屏蔽寄存器 置 1

Page 36: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

8237 的编程结构

一片 8237占用连续 16 个端口地址,用 DMA+00H~DMA+0FH表示。其中, DMA表示该片 8237 的基地址。

在 AT 以上的微机中,使用 2 片 8237 ,其地址为:

第一片 8237 ,基地址 DMA=0000H ,使用 0000H~000F I/O 地址。第二片 8237 ,基地址 DMA=00C0H ,使用 00C0H~00CF I/O 地址。

Page 37: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

端口地址 读(RD=0) 写(WR=0)

DMA+00H 当前地址寄存器(0) 基地址寄存器(0)

+01H 当前字节计数器(0) 基字节计数器(0)

+02H 当前地址寄存器(1) 基地址寄存器(1)

+03H 当前字节计数器(1) 基字节计数器(1)

+04H 当前地址寄存器(2) 基地址寄存器(2)

+05H 当前字节计数器(2) 基字节计数器(2)

+06H 当前地址寄存器(3) 基地址寄存器(3)

+07H 当前字节计数器(3) 基字节计数器(3)

+08H 状态寄存器 控制寄存器

+09H 请求寄存器

+0AH 屏蔽寄存器

+0BH 模式寄存器

+0CH 清先/后触发器

+0DH 暂存器 复位命令寄存器

+0EH 清除屏蔽寄存器

+0FH 综合屏蔽寄存器

8237 的编程结构

Page 38: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

8237 对内存和 I/O 的寻址

存储器寻址

在主控模式下, 8237 可以产生 16 位存储器地址信号,地址引脚 A7~A0 输出地址低 8 位,高 8 位地址由数据引脚 DB7~DB0 输 出,经地址锁存器后形成存储器地址的 A15~A8 。用 ADSTB 启动地址锁存器。当系统的存储器地址多于 16 位时,多余位地址由一个称为 DMA页面寄存器的接口电路提供

Page 39: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

8237 对内存和 I/O 的寻址

存储器寻址

Page 40: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

在 PC/AT 系统中,需要 24 位地址,高 8 位地址 A23~A16 由 DMA页面寄存器电路 74LS612 提供。在 DMA 传输之前,用指令将高 8 位地址送入页面寄存器,在 DMA 传输过程中,由 AEN 信号使页面寄存器输出该 8 位地址。

存储器寻址

8237 对内存和 I/O 的寻址

在 Pentium 微机中, DMAC 和相关页面寄存器的功能由多功能芯片组实现

Page 41: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

I/O 寻址

8237 对内存和 I/O 的寻址

8237 的四个通道,每一个只接一个外设接口电路,不使用 I/O 地址来区分 I/O 设备

I/O 设备的端口地址只用于 CPU 对 I/O 设备的寻址

Page 42: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

I/O 寻址

8237 对内存和 I/O 的寻址

Page 43: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

初始化编程

写入控制寄存器写入屏蔽寄存器——屏蔽要初始化的通道写入模式寄存器先后触发器置 0写入基地址和基本字节寄存器解除屏蔽写入请求寄存器

12.2 8237A 的应用

Page 44: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

8237 的应用

例: ROM-BIOS 对通道 2 初始化编程的代码片段

DMA EQU 0 ;DMA 通道起始端口1) 系统在启动时,对控制寄存器进行初始化

MOV AL, 0OUT DMA+8, AL

2) 清除先 / 后寄存器OUT DMA+12, AL

3) 设置模式寄存器MOV AL, 46H……OUT DMA+11, AL

Page 45: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

4) 送内存地址 计算内存的物理地址,将 20 位地址的高 4 位送页面寄存器 ,低 16 位先送低 8 位,再送高 8 位

…...OUT DMA+4, AL ;低 8 位……OUT DMA+4, AL ;高 8 位……OUT 81H, AL ; 20 位地址的高 4 位

5) 送传送字节数…...

6) 送屏蔽位MOV AL, 2OUT DMA+10, AL

8237 的应用

Page 46: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

8237 的应用例:利用主板上的 8237 通道 1 ,将内存起始地址为 80000H 的 300H字节直接输出给外设

MOV AL, 0;清除先 / 后触发器OUT 0DH, AL; 写地址OUT 02, ALOUT 02, ALMOV AL, 8OUT 83H, AL; 传送的字节数MOV AX, 300HDEC AXMOV 03, ALMOV AL, AHOUT 03, AL

; 写模式寄存器MOV AL, 49HOUT 0BH, AL;清除通道 1 屏蔽MOV AL, 1OUT 0AH, AL; 读通道 1 状态WAIT: IN 08AND AL, 02JZ WAIT; 完成后屏蔽通道 1MOV AL, 5OUT 0AH, AL

Page 47: 12.1 概述 12.28237A DMA 控制器 12.3  8237A 的应用

作业

1. 试述 8237的 DMA 请求 / 响应握手过程


Top Related