第8章 可编程DMA控制器8237A

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

8.3.4 级联传送方式
在这种方式下,可以把 一片8237A(称为主片)和 几片8237A(称为从片)进 行级联,以便扩充DMA通道。 图8-3所示为二级8237A 级联时的情况
微 处 理 器
主片
8237A
HOLD HLDA HRQ DREQ
0
HLDA DACK 0 8237A DREQ DACK
8.2 8237A的内部结构及引脚
IORLeabharlann Baidu
8-2-2 8237A的引脚
8237A采用双列直 插式,有40个引脚,其 引脚排列如图8-2所示。
IOW MEMR MEMW NC READY HLDA ADSTB AEN HQR CS CLK RESET DACK 2 DACK 3 DREQ 3 DREQ 2 DREQ1 DREQ 0 GND
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
A 8237A
40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21
A7 A6 A5 A4 EOP A3 A2 A1 A0 VCC DB 0 DB1 DB 2 DB 3 DB 4 DACK 0 DACK1 DB5 DB 6 DB 7
8.2 8237A的内部结构及引脚
8-2-1 8237A的内部结构
8237A的内部结构如图8-1所示,主要由时序与控制 逻辑、优先级编码电路、数据和地址缓冲器组、命令控 制逻辑和内部寄存器等组成。
8.2 8237A的内部结构及引脚
字数暂存器 16 16 EOP RESET CS READY CLK AEN ADSTB
第八章 可编程DMA控制器8237A
8.1 8.2 8.3 8.4 8.5 概述 8237A的内部结构与引脚 8237A的工作方式 8237A内部寄存器功能及格式 8237A的编程及应用
8.1 概述
Inte18237A是一种有40个引脚的高性能可编程DMA控制 器,采用主频5MHz的8237A传送速度可达到1.6MB/秒。 8237A的主要功能为: (1)在一个8237A芯片中有4个独立的DMA通道,每个通道 均可独立地传送数据,可控制4个I/O外设进行DMA传送。 (2)每个通道的DMA请求都可以分别允许和禁止。每个通道 的DMA请求有不同的优先权,优先权可以是固定的,也可 以是循环的。 (3)每个通道均有64KB的寻址和计数能力,即一次DMA传 送的数据最大长度可达64KB。
8.3.3 请求传送方式
这种工作方式每传送一个字节后,8237A都对DREQ 端进行测试,询问其是否有效。如果检测到DREQ端变为 无效电平,则立刻“挂起”,停止DMA传送,但并不释放 系统总线,测试过程仍然进行。当检测到DREQ端变为有 效电平时,就在原来的基础上继续进行传送。由于请求传 送方式在传送完一个字节的数据之后就询问DREQ信号是 否有效,故又称询问传送方式。 特点:DREQ信号一直有效时,则连续传送数据,只有当字 节计数器由1减为FFFFH,或外部送来有效的信号,或 DREQ变为无效时才结束DMA传送过程。
EOP
8.3.2 块传送方式
在这种工作方式下,一旦开始传送,就会一个字节一 个字节的进行下去,直到把整个数据块全部传送完毕,才 交出系统总线控制权。 特点:数据传输效率高,DREQ有效电平只要保持到 DACK有效,就能传送完整批数据,但整个数据块传送期 间,CPU失去总线控制权,因而别的DMA请求也被禁止。
【例8.1】在某一个系统中,用一片8237A设计了 DMA传输电路,8237A的基地址为00H。要求 利用它的通道0,从外设(如磁盘)输入一个 1KB的数据块,传送到内存中6000H开始的区 域中,每传送一个字节,地址增1,采用数据 块连续传送方式,禁止自动预置,外设的DMA 请求信号DREQ和响应信号DACK均为高电平有 效。初始化8237A的程序如下:
ADD AX,BX ;加上偏移量,形成16位地址(A15~A0 JNC RLL ;无进位,转移 INC CH ;有进位,最高4位加1。至此形成了20位物理地址,低16 ;AX中,最高4位在CH的低4位中 RLL:PUSH AX ;保存16位起始地址 ;将16位地址送到通道2基址和当前地址寄存器中 OUT DMA+4,AL ;先写低字节 MOV AL,AH OUT DMA+4,AL ;后写高字节 ;将最高4位地址预置到页面寄存器中 4 MOV AL,CH ;最高4位地址 AND AL,0FH ;截低4位 OUT 81H,AL ;置入页面寄存器(通道2,软盘DMA传送) MOV AH,DH ;取传输的扇区数送AH SUB AL,AL ;AL清零后,使AX= 256×扇区数 SHR AX,1 ;将AX内容除以2后,AX= 128×扇区数 ;调用取软盘参数子程序,要求入口参数:BX= 字节索引值(03号单元 PUSH AX ;保存AX的值 MOV BX,6 ;BX= 字节索引值×2 CALL GET_PARM ;调用取参数子程序
3. 8237A的应用 在PC/XT机中,用一片8237A-5构成DMA控制电路形成4 个DMA通道,提供数据宽度为8位的DMA传输。使用固 定优先级,所以通道0的优先级最高,通道3最低。这4 个DMA通道的功能分配如下: DMA 通道0 用于动态RAM的刷新 通道1 为用户保留 通道2 用于软盘DMA传送 通道3 用于硬盘DMA传送
8.5 8237A的编程及应用
8237A进行初始化编程的步骤如下: (1)输出主清除命令,使8237A处于复位状态,以接收新 的命令; (2)写入工作方式寄存器,以确定8237A工作方式和传送 类型; (3)写入命令寄存器,以控制8237A的工作; (4)根据所选通道,输入相应通道当前地址寄存器和基 地址寄存器的初始值; (5)输入当前字节计数器和基字节寄存器的初始值; (6)写入屏蔽寄存器; (7)写入请求寄存器,便可由软件DMA传送。否则,经 过(1)~(6)步编程后,由通道DREQ启动DMA传送 过程。
MEMR
地址暂存器 A ~ A8 15
I/O缓冲 A3 -A0 输出缓冲
读缓冲器 时 序 与 控 制 逻 辑 基地址 基字 寄存器 寄存器 (16×4) (16×4)
读/写缓冲器 当前地址 当前字 寄存器 计数器 (16×4) (16×4) 命令 控制逻辑
A7 -A4
MEMW IOR IOW
写缓冲器
;写入方式字:数据块传送,地址增量,禁止自动预置,写传送, 选择通道 MOV AL,10000100B ;方式字 OUT DMA+0BH,AL ;写入方式字 ;写入屏蔽字:通道0屏蔽位清0 MOV AL,00H ;屏蔽字 OUT DMA+0AH,AL ;写入8237A ;写入命令字:DACK和DREQ为高电平,固定优先级,非存储器 间传送 MOV AL,10000000B ;命令字 OUT DMA+08H,AL ;写入8237A ;写入请求字:通道0产生请求 MOV AL,04H ;请求字 OUT DMA+09H,AL ;将请求字写入8237A,用软件启 动8237A
DMA EQU 00H ;8237A的基地址为00H ;输出主清除命令 OUT DMA+0DH,AL ;发总清除命令 ;将基地址6000H写入通道0基地址和当前地址寄存器,分两次进行 MOV AX,6000H ;基地址和当前地址寄存器 OUT DMA+00H,AL ;先写入低8位地址 MOV AL,AH OUT DMA+00H,AL ;后写入高8位地址 ;把要传送的总字节数1K=400H减1后,送到基字计数器和当前字计数器 MOV AX,0400H ;总字节数 DEC AX ;总字节数减1 OUT DMA+01H,AL ;先写入字节数的低8位 MOV AL,AH OUT DMA+01H,AL ;后写入字节数的高8位
3 3
HRQ HLDA 从片 HRQ HLDA
8237A
图8-3 二级8237A级联
8.4 8237A内部寄存器功能及格式
8237A的内部可编程寄存器主要有10个,如下表所示。
名 称 位数 16 16 16 16 8 8 8 4 4 8 数 量 功能 保存在DMA传送期间的地址值,可读写 寄存当前字节数,初始值比实际值少1,可读写 寄存当前地址寄存器的初始值,只能写 保存相应通道当前字(节)数的计数器的初值 寄存相应通道的方式控制字,由编程写入 寄存CPU发送的控制命令 存放8237A各通道的现行状态 寄存各通道的DMA请求信号 用于选择允许或禁止各通道的DMA请求信号 暂存传输数据,仅用于存储器到存储器的传输 当前地址寄存器 当前字节计数寄存器 基地址寄存器 基字节数寄存器 工作方式寄存器 命令寄存器 状态寄存器 请求寄存器 屏蔽寄存器 暂存寄存器 4 (每通道一个) 4 (每通道一个) 4 (每通道一个) 4 (每通道一个) 4 (每通道一个) 1 (4个通道共用一个) 1 (4个通道共用一个) 1 (每通道1位) 1 (每通道1位) 1 (每通道1位)
8.1 概述
(4)可以在存储器与外设间进行数据传送,也可以在存 储器的两个区域之间进行传送。 (5)8237A有四种DMA传送方式,分别为单字节传送、 数据块传送、请求传送方式和级连方式。 (6)8237A芯片有一条结束处理的输入信号,允许外界 用此输入端结束DMA传送或重新初始化。 (7)8237A可以级连,扩展更多的通道。 (8)40脚双列直插式,+5V工作电源。
读缓冲器 D1 -D0
HRQ HLDA DREQ3 - 0 DACK3 - 0
4 4
优 先 级 编 码
命令寄存器 (8) 屏蔽寄存器 (4) 请求寄存器 (4)
内部数据总线 I/O缓冲 DB -DB0 7 方式寄存器 (4×6) 状态寄存器 (8) 暂存寄存器 (8)
图8-1 8237A的内部结构图
图 8-2
8237A 的引脚
8.3 8237A工作方式
8.3.1 单字节传送方式
在这种工作方式下,每进行一次DMA操作,只传送一 个字节的数据。8237A每完成一个字节的传送,计数器 便自动减1,地址寄存器的值加1或减1。接着,8237A释 放系统总线,把控制权交还给CPU。但是8237A在释放总 线后,会立即对DREQ端进行测试,一旦DREQ有效,则 8237A会立即发送总线请求,在获得总线控制权后,又 成为总线主模块而进行DMA传送。 特点:一次DMA传送至传送1个字节的数据,占用1个总 线周期,然后释放系统总线。因此,这种方式又被称为 总线周期窃取方式。
在PC/XT机进行软盘或硬盘DMA传输时,先要对8237A-5进 行编程。下面是ROM BIOS中的一段程序,名为 DMA_SETUP,位于首地址为FEEC8H的内存中。它被读软 盘、写软盘和软盘校验程序等调用,用来向8237A-5输入所 要读写数据的20位首地址和字计数器初始值。调用前要求 的入口参数是: AL=DMA AL=DMA方式字(读= 46H,写= 4AH,校验= 42H)。 = 46H = 4AH = 42H DH=要传送的扇区个数。每个扇区的字节数基数为128,实 际由磁盘驱动器的规格而定,可能是128,256,512或 1024个,也就是说可能是128的1,2,4,8倍,表示成2的 N次方,N分别为0、1、2、3。N存放在磁盘基值区 DISK_BASE的第03号单元中,可由它和DH中的扇区数计算 出实际要传送的总字节数。
8.1 概述
8237A有两种不同的工作状态,分别为从态方式和主态方式。 (1)在DMA控制器未取得总线控制权时必须由CPU对DMA 控制器进行编程,以确定通道的选择、数据传送的方式和类 型、内存单元起始地址、地址是递增还是递减及要传送的总 字节数等,CPU也可以读取DMA控制总线的状态。这时,CPU 处于主控状态,而DMA控制器就和一般的I/O芯片一样,是系 统总线的从设备,这种工作方式称为从态方式。 (2)当DMA控制器取得总线控制权后,系统就完全在它的 控制下,使I/O设备和存储之间或存储器与存储器之间进行直 接的数据传送,这种工作方式称为主态方式。
ES:BX=所读写数据的内存首地址(段地址:偏移量) DMA_SETUP PROC NEAR PUSH CX ;保护CX的值 CLI ;关中断 OUT DMA+0CH,AL ;清除先/后触发器 PUSH AX ;延时,满足8237A I/O定时要求 POP AX OUT DMA+0BH,AL ;将AL中的方式字写入方式寄存器 ;计算20位物理地址,结果的最高4位放在CH中,低16位放入AX MOV AX,ES ;AX←段基地址 MOV CL,4 ;循环次数 ROL AX,CL ;AX循环左移4位 MOV CH,AL ;AX的低8位暂存入CH AND AL,0F0H ;AX的最低4位清零
相关文档
最新文档