【微机原理与接口技术】学习笔记9 DMA控制器8237A

您所在的位置:网站首页 dma控制器工作过程 【微机原理与接口技术】学习笔记9 DMA控制器8237A

【微机原理与接口技术】学习笔记9 DMA控制器8237A

2024-07-12 10:04| 来源: 网络整理| 查看: 265

文章目录 9.1 8237A 的组成与工作原理9.1.1 DMA传送9.1.2 8237A的内部结构9.1.3 8237A的引脚功能9.1.4 8237A的内部寄存器 9.2 8237A的时序9.3 8237A的编程和应用举例9.3.1 DMA系统组成9.3.2 DMA系统有效地址的生成1. 74LS670工作原理2. DMA系统有效地址的生成3. IBM-PC微机的DMA系统4. DMA系统的初始化5. DMA传送的应用

9.1 8237A 的组成与工作原理 9.1.1 DMA传送

用 DMA 方式传送数据时,传送过程完全由 DMA 控制器(DMAC)控制。其基本功能:

DMAC 能向CPU的 HOLD 脚发出 DMA 请求信号。CPU响应 DMA 请求后,DMAC 获得总线控制权,由它控制数据的传送,CPU则暂停工作。能提供读/写存储器或I/O设备的各种控制命令。确定数据传输的始址和数据长度(CPU配置的),每传送1个数据便自动修改地址(+1或-1),数据长度 -1 。传送完毕,能发出结束 DMA 传送的信号。CPU在每个非锁定时钟周期结束后,都会检测 HOLD 脚上有无 DMA 请求?若有,便转入 DMA 传送周期。

8237A 是高性能可编程 DMA 控制器,主要特点:

含 4 个通道,每通道有 64K 地址(16位)和字节计数能力(16位)。有 4 种传送方式:单字节传送、数据块传送、请求传送、级联传送。每个通道的 DMA 请求可被允许或禁止。4 个通道的 DMA 请求有不同优先级,优先级可以是固定的,也可以是循环的。任一通道完成数据传送后,会自动产生过程结束信号 EOP(End of Process,不常用),结束 DMA 传送;还可从外界输入 EOP 信号,中止正执行的DMA 传送。

8237A 的两种工作状态 1)从态方式 开始 DMA 传送前,8237A 是系统总线的从属设备,由CPU对它进行编程,如指定通道、传送方式和类型、内存单元起始地址、地址是递增还是递减以及要传送的总字节数等等;CPU也可读取 DMAC 的状态。 2)主态方式 当 8237A 取得总线控制权后,它就完全控制了系统,使I/O设备和存储器之间或者存储器与存储器之间进行直接的数据传送。

8237A 芯片的内部结构和外部连接与这两种工作状态密切相关。

9.1.2 8237A的内部结构

时序与控制逻辑 从态时,接收系统时钟、复位、片选和读/写等信号,完成相应控制操作;主态时, 向系统发控制信号。 其中与设备相连的是 IOR ‾ , IOW ‾ \overline {\text{IOR}},\overline {\text{IOW}} IOR,IOW ,其他的要么和CPU相连,要么和系统总线相连。 MEMR ‾ , MEMW ‾ \overline {\text {MEMR}},\overline {\text{MEMW}} MEMR,MEMW 是主态时进行内存读写的命令。

优先级编码电路 对同时提出 DMA 请求 HRQ(Hold Request) 的多个通道进行排队判优,决定哪个通道优先级最高,然后进行响应 HLDA(Hold Acknowledge)。 可选固定或循环优先级。某个优先级高的设备服务时,禁止其它通道请求。

数据和地址缓冲器组 8237A的 A7~A4(单向输出)、A3~A0(双向:从态时 A3-A0 输入有4根线,说明占了 16 个端口地址;主态时:A3-A0、A7-A4、DB7-DB0 共16根地址线往内存输出,读或写数据) 为地址线; DB7~DB0 在从态时传输(CPU配置或读取DMA的)数据,主态时传送地址。它们都与三态缓冲器相连,便于接管或释放。

命令控制逻辑 从态时接收CPU送来的寄存器选择信号(A3~A0),选择寄存器;主态时译码方式字的 D1D0 ,以确定操作类型。A3~A0 与 IOR \text{IOR} IOR 、 IOW \text{IOW} IOW 配合组成各种操作命令。

内部寄存器组 每通道有 16 位基址寄存器、基字计数器、当前地址寄存器、当前字计数器以及 6 位工作方式寄存器。 片内还有命令寄存器、屏蔽寄存器、请求寄存器、状态寄存器和暂存寄存器。 不可编程的字数暂存器和地址暂存器。

9.1.3 8237A的引脚功能

8237A 为 40 引脚 DIP 封装, 引脚排列:

CLK 时钟信号,输入 8237A 时钟频率 3MHz ,8237A-5 为 5MHz 。 CS ‾ \overline \text{CS} CS 片选信号,输入,低电平有效。 从态方式下选中 8237A ,接受CPU对它的编程等。READY 准备好,输入,高电平有效 慢速 I/O 设备或存储器参与 DMA 传送时,可使 READY 变低,让 8237A 在 DMA 周期中插入等待周期 TW ;当它们准备就绪时 READY 变高。A3~A0 低 4 位地址线 从态为输入,寻址 8237A 内部寄存器,实现编程;主态时输出要访问内存的低 4 位地址。A7-A4 高 4 位地址线 始终是输出或浮空,主态时输出 4 位地址信息 A7-A4 。DB7-DB0 8 位数据线,与系统数据总线相连。 从态时,CPU经过数据线读取各有关寄存器内容,并对各寄存器编程。主态时,由它们输出高 8 位地址 A15-A8 ,并由 ADSTB 信号将它们锁存到外部的高 8 位地址寄存器中,与 A7-A0 输出的低 8 位地址构成 16 位地址。存储器-存储器传送方式下,源存储器读出的数据,经它们送暂存寄存器,暂存器中数据再经它们写到目的存储单元中。 AEN 地址允许信号,输出,高电平有效 送出锁存的高 8 位地址,与芯片输出的低 8 位地址一起构成 16 位内存偏址。同时使连到CPU的地址锁存器无效,保证地址线上的信号来自 DMAC 。ADSTB 地址选通信号,输出,高电平有效 选通外部地址锁存器,将 DB7~DB0 上的高 8 位地址送到外部的地址锁存器。 IOR ‾ \overline {\text{IOR}} IOR I/O 读信号,双向。 从态时,控制CPU读取 8237A 内部寄存器。 主态时,与 MEMW ‾ \overline {\text{MEMW}} MEMW 配合,控制数据由外设传到存储器中。DREQ3~DREQ0 通道 3~0 的 DMA 请求信号,输入 外设请求 DMA 服务时,向这些引脚发请求信号,有效极性由编程确定。固定优先级时,DREQ0 的优先级最高,编程可改变优先级。HRQ 保持请求信号,输出,高电平有效 向CPU的 HOLD 端发出的 DMA 请求信号,可从 8237A 任一个未被屏蔽的通道发出。HLDA 保持响应信号,输入,高电平有效 与CPU的 HLDA 相连,CPU收到 HRQ 信号后,至少经过1个时钟周期后,使 HLDA 变高,表示已让出总线控制权,8237A 收到 HLDA 信号后,便开始 DMA 传送。DACK3~DACK0 通道 3~0 的 DMA 响应信号,输出 其有效电平极性由编程确定。相应通道开始 DMA 传送后,DACKi 有效,通知外部电路现已进入 DMA 周期。 EOP ‾ \overline {\text{EOP}} EOP 传输过程结束信号,双向,低电平有效 DMA 传送中,任一通道的字计数器减为 0 ,再由 0 减为FFFFH 而终止计数时,会在 EOP ‾ \overline {\text{EOP}} EOP 引脚上输出低电平信号,表示 DMA 传输结束。 也可在 EOP ‾ \overline {\text{EOP}} EOP 脚上输入低电平信号来终止 DMA 传送。 若通道设置成自动预置状态,该通道完成一次 DMA 传送,出现 EOP ‾ \overline {\text{EOP}} EOP 信号后,又能自动恢复有关寄存器的初值,继续执行另一次 DMA 传送。 9.1.4 8237A的内部寄存器

8237A的内部可编程寄存器主要有 10 种:

当前地址寄存器 16 位,每通道 1 个,存放 DMA 传送的存储器地址值。每传送 1 个数据,地址值自动 +1 或 -1 ,指向下个单元。 编程时可写入初值,也可被读出,但每次只能读/写 8 位,所以读/写要两次完成。 自动预置操作方式,在 EOP \text{EOP} EOP 有效时,会重装入基地址值。

当前字计数寄存器 16 位,每通道 1 个,编程时置其初值为实际传送字节数少1。每传送 1 字节,自动 -1 。由 0~FFFFH 时,将产生终止计数信号TC 。 自动预置操作方式,在 EOP \text{EOP} EOP 有效时,会重装入基字计数寄存器的内容。

基地址寄存器 16 位,每通道 1 个,存放通道当前地址寄存器初值,与当前地址寄存器地址一样,编程时写入相同值。 其内容不能读出和修改。用在自动预置操作时,使当前地址寄存器恢复到初值。

基字计数寄存器 16 位,每通道 1 个,存放通道当前字计数器初值,该值也是编程时与当前字计数器一起写入的。 其内容不能读出和修改,用于自动预置操作时,使当前字计数器恢复到初值。

命令寄存器 全局,8 位,控制 8237A 的操作。由CPU编程来设置 8327A 操作方式, 复位时清除。

D0 位:能否进行存储器到存储器传送,D0=1 允许。并规定先用通道 0 从源单元读入 1 字节放入暂存器,然后由通道 1 把该字节写到目的单元,接着两通道的地址分别 +1 或 -1 ,通道 1 的字计数器 -1,它减为 0 时产生终止计数信号 TC,并输出 EOP \text{EOP} EOP 信号,终止DMA 服务。D1 位:存储器到存储器传送时,通道 0 地址能否保持不变。D1=1 ,通道 0 在传送中保持同一地址,从而可把该单元中的数写入一组存储单元。D1=0 禁止。当 D0=0 时这种方法无效。D2 位:允许或禁止 8237A 工作,D2=0 允许,D2=1 则禁止。D4位 优先权控制。D4=0 为固定优先权,通道 0 优先级最高;D4=1 为循环优先权,刚服务过的通道 i 优先权最低,而通道 i+1 优先权最高。随着 DMA 操作不断进行优先权不断循环,防止某通道长时间占用总线。D6 位:决定 DREQ 的有效电平,0 高电平有效,1 则低电平有效。D7 位:决定 DAC K的有效电平,1 高电平有效,0 则低电平有效。D3 位和 D5 位:有关时序的操作,见后面时序讨论。

工作方式寄存器 6 位,每通道 1 个,选择 DMA 的传送方式和类型等,格式:

D1D0 位:选择通道,并进一步由 D2-D7 指定选定通道的工作方式。这样 4 个通道可合用 1 个方式寄存器。

D3D2 位:决定所选通道的 DMA 操作类型。从 3 种 DMA 传送类型中选定一种: 10:读传送,存储器->I/O设备, 发 MEMR ‾ , IOW ‾ \overline {\text{MEMR}},\overline {\text{IOW}} MEMR,IOW , 01:写传送,存储器存储器传送时,保存所传送的数据。其中始终保存着最后 1 个传送的字节,RESET 信号会将其清除。编程状态下,可由CPU读出这个字节。

软件命令 编程状态下,8237A 可执行 3 个附加的特殊软件命令,只要对特定端口进行一次写操作,命令就会生效。 1)清除先/后触发器 8237A 仅 8 根数据线,而地址寄存器和字计数器均为 16 位,CPU要分两次读写。先/后触发器控制高低字节读写次序。清 0 读写低 8 位,随后自动置 1 ,读写高 8 位。接着又清 0 ,… 。对该触发器所在的寄存器执行一次写操作便清 0 ,复位和 EOP \text{EOP} EOP 信号有效也将它清为 0 。 2)主清命令 主清命令也称为复位命令,功能与 RESET 信号同,它可使命令寄存器、状态寄存器、请求寄存器、暂存寄存器和内部先/后触发器均清 0 ,而把屏蔽寄存器置 1 。复位后,8237A 进入空闲状态。 3)清除屏蔽寄存器 该命令能清除 4 个通道的全部屏蔽位,允许各通道接受 DMA 请求。

各寄存器的端口地址 对 8237A 内部寄存器读写时, CS ‾ \overline {\text{CS}} CS 端必须为低电平,该信号由高位地址经I/O译码后产生。 A3~A0 线选择不同寄存器,共占 16 个I/O端口地址。常将它们与地址总线低 4 位 A3~A0 相连,选择各寄存器。 例如,PC/XT 机中,地址 A9~A4=000000 时,经I/O译码电路选中 8237A,使其有效。 地址 A3~A0 与 8237A 的 A3~A 0脚连接实现片内寻址。因此基地址 =00H,记为 DMA=00H 。由此可得其他寄存器的地址,如DMA+00H 为通道 0 基地址与当前地址寄存器地址,DMA+08H 为状态寄存器地址等:

9.2 8237A的时序

空闲周期 SI :未发生 DMA 请求时

检测 CS :CPU是否对其操作检测 DREQ :外设是否有请求

过渡状态 S0 :DMAC 发出 HRQ 之后,收到 HLDA 之前。

有效周期:DMAC 收到 HLDA 之后,接管总线: 包括 4 个状态周期(S1、S2、S3、S4),慢速I/O或M还可通过令 READY=0 申请插入 SW ,8237A-5 在 S3 中检测 READY ,SW 中的操作同 S3 :

S1 :更新高8位地址,AEN 、ADSTB 有效,DMAC 将 M 的 A8~15 放到 DB0~7 上;只有当 A8~15 有变化时才出现S2 :选中两个介质,输出 16 位地址选中 M :低 8 位由 A0~7 直接输出;高 8 位由 DB0~7 经外部锁存器(由 ADSTB 下降沿锁存)输出;发出有效的 DACK 选中I/OS3 :读周期。发出 IOR(DMA写)或 MEMR(DMA读),从源读数据到 DB0~7,等待写周期。S4 :写周期。发出 MEMW(DMA写)或 IOW(DMA读),将 DB0~7 上的数据写到目标中。

扩展写:写提前到与读同时开始(S3),与读一样扩展到 2 个时钟周期。 压缩时序:去掉 S3 ,读与写同为 1 个时钟周期。 SW :慢速I/O或M传送时,在 S3 和 S4 间插入 SW 。

9.3 8237A的编程和应用举例 9.3.1 DMA系统组成

PC机的DMA系统:

8237A-5页面地址寄存器总线裁决逻辑 9.3.2 DMA系统有效地址的生成

第一代PC机中的地址是 20 位的,而 8237A 是 16 位的。为此需要一个 74LS670 扩展地址。

1. 74LS670工作原理

74LS670 的 RA,RB 和 DACK2,DACK3 连接,内有 4 个 4 位寄存器。读写分开控制:

写: GW ‾ = 0 \overline {\text{GW}}=0 GW=0;WA、WB:写入寄存器选择;D1~4:数据输入读: GR ‾ = 0 \overline {\text{GR}}=0 GR=0;RA、RB:读出寄存器选择;Q1~4:数据输出 2. DMA系统有效地址的生成

如何提供存储器的地址:

A16~19 :由 74LS670 提供;A8~15 :由 8237A-5 的 DB0~7 经 74LS373 提供;A0~7 :由 8237A-5 的 A0~7 直接提供;

如何对I/O设备寻址,用 DACK 信号取代芯片选择和片内端口选择:

3. IBM-PC微机的DMA系统

单片 DMAC 的 DMA 系统:4 个通道;8 位传送;1MB 寻址;64KB 计数 双片DMAC的DMA系统:

7 个通道;16MB 寻址;64KB 计数片(0):8 位传送片(1):使用偶地址;16 位传送

如果我们打开设备管理器,可以在直接内存访问控制器中看到上图双片DMAC结构中,出现的端口地址。

4. DMA系统的初始化

注意事项:

初始化前要对芯片检测初始化前禁止工作或屏蔽通道所有通道的方式寄存器均加载要初始化页面地址寄存器

初始化编程: ① PC机检测芯片(8 个 16 位寄存器全 1 、全 0 的读写)及加载校验方式:

MOV AL, 04H ;0000_0100:前4位默认配置,正常时序,禁止工作,CR0地址不保持,禁止内存到内存 OUT DMA+08H, AL ;写入命令寄存器 OUT DMA+OCH, AL ;清先后触发器 MOV AL, 0FFH ;1111_1111:全1的读写测试 C16: MOV BL, AL ;全1或全0 MOV BH, AL ;全1或全0 ... ... MOV CX, 8 ;对8个寄存器做读写测试 MOV DX, DMA ;从DMA开始测试 C17: OUT DX, AL ;全1或全0写入DX OUT DX, AL ;再写一次,16位写两次,先写低八位,再写高八位 IN AL, DX ;读出低八位 MOV AH, AL ; IN AL, DX ;读出高八位,放入AX中 CMP BX, AX ;和之前保存的AL对比 JE C18 ;如果相同,证明该寄存器没有出错 HLT ;不相同则停机 C18: INC DX ;DX端口号+1 LOOP C17 ;再重复循环 ... INC AL ;AL+1=全0 JE C16 ;为0,跳转回C16,做全0测试 ... ... ... ... ... ... SUB AL, AL ;AL清0 OUT DMA+08H, AL ;写入命令寄存器,高4位按照默认配置,低4位正常时序,允许工作,其他位默认;启用芯片 ;下面将40H,41H,42H,43H先后写入工作方式寄存器,,即对全部的通道写入同样的工作方式 MOV AL, 40H ;0100_0000针对0号通道 OUT DMA+0BH, AL ;单字节方式,地址递增,禁止地址预置,校验方式 MOV AL, 41H ;0100_0001针对1号通道 OUT DMA+0BH, AL ;单字节方式,地址递增,禁止地址预置,校验方式 MOV AL, 42H ;0100_0010针对2号通道 OUT DMA+0BH, AL ;单字节方式,地址递增,禁止地址预置,校验方式 MOV AL, 43H ;0100_0011针对3号通道 OUT DMA+0BH, AL ;单字节方式,地址递增,禁止地址预置,校验方式 5. DMA传送的应用

例:利用级联的 IBM PC/AT 的 8237 主片通道 5 ,将内存其始地址为 80000H 的280H 字节的内容直接输出到外部设备。

MOV AL, 04H ;命令字, 禁止82C37工作 OUT 0D0H, AL ;写命令寄存器 MOV AL, 0 OUT 0D8H, AL ;清除先/后触发器 OUT 0C4H, AL ;写低位地址 OUT 0C4H, AL ;写高位地址 MOV AL,04H ;页面地址为8 OUT 08BH, AL ;写页面寄存器 MOV AX, 280H ;传输字节数 DEC AX OUT 0C6H, AL ;写字节数低位 MOV AL, AH OUT 0C6H, AL ;写字节数高位 MOV AL, 89H ;方式字: 单字节读, 地址加1 OUT 0D6H, AL MOV AL, 05H ;写请求寄存器 OUT 0D2H, AL

DMA控制器与I/O设备的连接:DMAEN 是 DMA 申请允许信号;软盘接口中的数据输出寄存器(3F2H)的 D3 位控制,高有效

ROM-BIOS 中软盘 DMA_SETUP:

AL——方式字(CH2,单一传送,非自动预置,地址增量)42H:DMA校验(软盘校验)46H:DMA写(读软盘)4AH:DMA读(写软盘)ES:BX——内存首址DH——要传送的扇段数

字节数/扇段在磁盘基址区 DISK_BASE 的 3 号单元

0:128 字节/扇段1:256 字节/扇段2:512 字节/扇段3:1024 字节/扇段 DMA_SETUP PROC PUSH CX ;保护现场 CLI OUT DMA+12, AL ;清先/后触发器 OUT DMA+11, AL ;设置方式 ;形成物理地址 MOV AX, ES MOV CL, 4 ROL AX, CL MOV CH, AL AND AL, 0F0H ADD AX, BX JNC J33 INC CH J33: PUSH AX ;低16位地址入栈 ... ;设置地址寄存器及页面地址 OUT DMA+4, AL ;写低16位地址 MOV AL, AH OUT DMA+4, AL MOV AL, CH AND AL, 0FH ;写高4位地址 OUT 81H, AL ;设置字节计数器 MOV BX, 6 CALL GET_PAM ;取DISK_BASE的3号单元作为移位次数 MOV CL, AH MOV AH, DH SUB AL, AL SHR AX, 1 SHL AX, CL DEC AX PUSH AX ;N-1入栈保护 ... OUT DMA+5, AL MOV AL, AH OUT DMA+5, AL STI ;判DMA是否超界 POP CX ;用低16位地址与N-1相加设置CF POP AX ADD AX, CX POP CX ;恢复现场 MOV AL, 02H OUT DMA+10, AL RET DMA_SETUP ENDP


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3