第8章 DMA接口技术8237_第1页
第8章 DMA接口技术8237_第2页
第8章 DMA接口技术8237_第3页
第8章 DMA接口技术8237_第4页
第8章 DMA接口技术8237_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

8.1DMA技术概述8.2DMA控制器82378.38237编程及应用第8章DMA接口技术本章要点:8237的编程结构和工作原理8237的工作方式8237的初始化命令字、操作命令字及其使用8237的初始化流程和初始化编程8.1DMA技术概述

DMA(DirectMemoryAccess)方式即为直接存储器存取方式,DMA方式是用硬件实现存储器与存储器之间或存储器与I/O设备之间直接进行高速数据传送,不需要CPU的干预。这种方式通常用来传送数据块。DMA传送包括:数据存储器RAM→I/O端口的DMA读传送;I/O端口→数据存储器RAM的DMA写传送;数据存储器RAM→数据存储器RAM的存储单元传送。

DMA概述地址总线HRQDREQDMACHLDADACK总线请求总线响应

HOLDHLDACPUDMA请求DMA响应I/O设备控制总线数据总线DMA系统组成及工作过程․DMA系统组成

I/O向DMACDMAC向CPU响应DMAC向发请求CPU发请求DMAC请求I/O发响应DMA传送结束DMA传送进行DMAC发出控制信号DMAC发出内存地址․DMA工作过程DMA控制器的一般结构和概要1、8237的基本功能(1)一片8237有4个独立的DMA通道。(2)每一个通道的DMA请求都可以被允许或禁止。(3)每一个通道的DMA请求有不同的优先级,既可以是固定优先级,也可以是循环优先级。(4)每一个通道一次传送的最大字节数为64KB。(5)8237提供4种传送方式:单字节传送方式、数据块传送方式、请求传送方式和级连传送方式。8.2DMA控制器82378237A可编程DMA控制器框图状态寄存器(8)控制寄存器(8)暂存寄存器(8)先/后触发器主屏蔽方式寄存器(6)基地址寄存器(16)基字节计数器(16)暂存地址寄存器(16)暂存字节寄存器(16)命令控制逻辑当前地址寄存器(16)当前字节计数器(16)请求位屏蔽位通道0时序与控制逻辑

EOPCSRESETREADYCLKAENADSTBMEMRMEMWIORIOW地址数据缓冲地址缓冲地址缓冲通道1通道2通道3优先级编码逻辑

D7-D0(A15-A8)A7-A4A3-A0DREQ0-DREQ3DACK0~DACK3HRQHLDA(1)控制寄存器:用来设置8237A的工作方式。(2)8位状态寄存器:读命令时低4位表示每个通道的字节数是否为0,高4位表示每个通道是否还有未处理的DMA请求。(3)4位请求寄存器:每一位对应一个通道的请求位,8237A可通过硬件引脚DREQ来进行DMA请求外,也可通过软件对请求寄存器的编程设计产生DMA请求。(4)4位屏蔽寄存器:对应通道DMA屏蔽请求标志位,编程决定。(5)4位综合屏蔽寄存器:对应4个通道,一起设置屏蔽或一起复位。8237A的内部寄存器(6)暂时字节计数器:暂时存放当前字节计数器的内容,仅供芯片内部使用。(7)暂时地址寄存器:暂时存放当前地址计数器的内容,仅供芯片内部使用。(8)8位暂存寄存器:暂时存放从源单元读出的数据。(9)工作方式寄存器:保存通道方式控制字,规定通道操作方式。(10)基地址寄存器:保存通道当前地址寄存器的初值,其值与当前地址寄存器同时写入,不被CPU读出,设置为自动初始化,当有效时,用来使当前地址寄存器恢复初值。8237A的内部寄存器(11)当前地址寄存器:保存DMA传送过程中的地址,每次传送其地址要自动+1或-1,设置为自动初始化,当有效时可恢复初值(12)基字节计数器:保存通道当前字节数寄存器的初值,其值与当前地址寄存器同时写入,不被CPU读出,自动初始化时,用来使当前字节计数器恢复初值。(13)当前字节计数器:保存当前字节数,每次传送后,其值自动-1,设置为自动初始化,当有效时,可恢复初值。表8237内部寄存器8237外部引脚8237引脚信号的定义CLK,时钟输入信号,片选信号(ChipSelect),低电平有效有效时允许CPU对

8237进行编程

8237引脚信号的定义

RESET,复位(Reset)信号

READY,准备就绪输入端,高电平表示已准备好。若把逻辑0加到准备就绪输入上,则使8237进入等待状态,以等待较慢的存储器或I/O设备准备就绪后,8237才继续操作DREQ3~DREQ0,DMA请求(DMARequest)输入信号。用于为4个DMA通道中的每一个请求DMA传输。由于这些输入的极性是可编程的,所以它们可以是高有效输入也可以是低有效输入。当DMAC向I/O设备送来DMA响应信号DACK以后,I/O接口才撤除DREQ有效电平DACK,DMA控制器送出I/O接口的回答信号。DMA控制器获得CPU送来的总线允许信号HLDA以后,便产生DACK信号送到相应的外设的接口

8237引脚信号的定义

8237引脚信号的定义HRQ,总线请求信号。当外设的I/O接口要求DMA传输时,往DMA控制器发送DREQ信号,如果相应通道的屏蔽位为0,则DMA控制器的HRQ端输出为有效电平,从而向CPU发总线请求HLDA,总线保持回答(HoldAcknowledge)信号。DMAC向CPU发总线请求信号HRQ以后,至少再过一个时钟周期,CPU才能发出总线保持回答信号HLDA,通知8237可以获得对地址、数据及控制总线的控制权DB7~DB0,8位数据线。当DMAC为主模块时,DB7~DB0输出当前地址寄存器中的高8位地址,并通过ADSTB打入锁存器,和地址线A7~A0输出的低8位地址一起构成16位的存储器地址;当DMAC为从模块时,CPU通过DB7~DB0对DMAC进行读写操作。存储器读信号。此信号有效时,所选中的存储器单元的内容被读到数据总线上

8237引脚信号的定义存储器写信号。此信号有效时,数据总线上的内容被写入选中的存储单元输入输出设备写信号。在DMA控制器作为主模块时,的方向是由DMA控制器送出的,此信号有效时,存储器中读出的数据被写入I/O接口中;在DMA控制器作为从模块时,方向是送入DMA控制器,此信号有效时,CPU往DMA控制器的内部寄存器中写入信息,即进行初始化编程。

8237引脚信号的定义

8237引脚信号的定义

,输入输出设备读信号,低电平有效。在DMA控制器作为主模块时,作为输出控制信号由DMA控制器送出,此信号有效时,I/O接口部件中的数据被读出送往数据总线;在DMA控制器作为从模块时,作为输入控制信号送入DMA控制器,此信号有效时,CPU读取DMA控制器中内部寄存器的值

,DMA传输过程结束信号。是双向的:当由外部往DMA控制器送一个信号时,DMA传输过程被外部强迫性地结束;另一方面,当DMA控制器的任一通道中计数结束时,会从 引脚输出一个有效电平,作为DMA传输结束信号。不论是从外部终止DMA过程,还是由内部计数结束引起终止DMA过程,都会使DAM控制器的内部寄存器复位

8237引脚信号的定义A3~A0,最低的4位地址线,它们是双向信号端。在DMA控制器作为从模块时,A3~A0作为输入端,对DMA控制器的内部寄存器进行寻址,这样,CPU

可以对DMA控制器进行编程;在DMA控制器作为主模块时,这4个信号端工作于输出状态,以提供低4位地址。A7~A4,这4位地址线始终工作于输出状态或浮空状态。它们在DMA传输时提供高4位地址。

8237引脚信号的定义表

软件操作及对应的寄存器地址

8237引脚信号的定义ADSTB,地址选通输出信号。此信号有效时,DMA控制器的当前地址寄存器中的高8位地址通过8位数据线DB7~DB0送到外部锁存器AEN,地址输出允许信号。AEN使地址锁存器中的高8位地址送到地址总线上,与芯片直接输出的低8位地址共同构成内存单元地址的偏移量。AEN信号也使与CPU相连的地址锁存器无效,这样,就保证了地址总线上的信号是来自DMA控制器,而不是来自CPU的

8237的工作方式8237的各个通道在进行DMA传送时,有单字节传送方式、数据块传送、请求传送、级联方式四种工作方式:(1)单字节传送方式每次DMA请求只传送一个字节的数据,传送后当前字节计数器自动减1,当前地址寄存器加1或减1修改,撤消HRQ信号,释放系统总线控制权。(2)数据块传送每次DMA请求获准后连续地传送一个数据块,直到当前字节计数器减为0或外部产生EOP信号,使DMA传送终止。(3)请求传送以下三种情况均终止DMA传送:(1)当前字节计数器减至0。(2)外部有效的EOP信号。(3)外设的DREQ请求信号无效。(4)级联方式利用这种方式可以把多个8237连接在一起,以便扩充系统的DMA通道数。下一级的HRQ接到上一级的某一通道的DREQ上,而上一级的响应信号DACK可接下一级的HLDA上,其连接如图所示。在级联方式下,当第二级8237的请求得到响应时,第一级8237仅应输出HRQ信号而不能输出地址及控制信号,因为,第二级的8237才是真正的主控制器,而第一级的8237仅应起到传递DREQ请求信号及DACK应答信号的作用。8237的DMA传输类型(1)I/O接口到存储器的传送(2)存储器到I/O接口(3)存储器到存储器8237各个通道的优先级及传输速率优先级(1)固定优先级规定各通道的优先级是固定的,即通道0的优先级最高,依次降低,通道3的优先级最低。(2)循环优先级规定刚被服务通道的优先级最低,依次循环。传送速率在一般情况下,8237进行一次DMA传送需要4个时钟周期(不包括插入的等待周期SW)。例如,PC机的时钟周期约210ns,则一次DMA传送需要210ns*4+2l0ns=1050ns。多加一个210ns是考虑到人为插入一个SW的缘故。另外,8237为了提高传送速率,可以在压缩定时状态下工作。在压缩定时状态下,每个DMA总线周期仅用2个时钟周期就可以实现。模式寄存器的格式8.38237编程及应用D4:若允许自动初始化,则在DMA操作结束时,分别将基地址和基本字计数寄存器的内容重新装入当前地址和当前计数寄存器内。◆I/O地址A3-A0=1011,初始化由CPU写入,分别设置通道0—通道3的工作方式控制寄存器的格式和有关问题◆I/O地址A3-A0=1000,初始化由CPU写入,

RESET或清除命令清除

在存储器之间传送数据时,由通道0和通道1进行操作。由通道0从源地址单元中读出数据存放到暂存寄存器中,再由通道1从暂存寄存器中读出数据写入目的单元中,当通道1的当前字节计数器减为0时,产生EOP信号,结束DMA传送。D1:当D0=1时是可以使源地址内的同一个数据传送到一组目的存储单元中去。当D0=0时,才有意义。内存到内存的传输

8237A的典型时序8237A的工作时序

DMA的每一个时钟周期称为一个S状态。

1、SI状态:空闲状态。

2、S0状态:等待HLDA。

3、S1状态:先产生AEN信号,使CPU连接的地址总线无效,产生ADSTB信号,从当前地址锁存器中读出的A15~A8经DB7~DB0锁存在外部锁存器中。

4、S2状态产生DACK给I/O接口,代替CPU的片选信号,使该I/O接口被选中,A15~A0确定要访问的存储器单元。

5、S3状态产生MEMR或IOR读信号,使DB7~DB0上的数据至S4状态,稳定写入目的地。6、S4状态产生MEMW或IOW写信号,将数据写入目的单元。块传送,则回到S2(或S1),继续。若单字节或传送完毕,则发EOP,撤消HRQ,结束DMA过程。◆压缩读方式:块传送时,只有S2和S4两个时钟,读信号和写信号均在S4状态时产生,适用于高速电路。◆扩展写(超前写):S2、S3、S4三个状态,但写信号在S3时即产生,目的是用其下降沿触发READY信号,使低速I/O在普通时序仍不能完成读写时,插入等待状态SW。以上两种方式均可在方式控制字中进行设定。8237A的工作时序状态寄存器的格式

D3D2D1D0:对应表示通道3、2、1、0的终止计数状态。当某通道终止计数(计数达“0”)或外部EOP有效,则相应位置1;复位或CPU读后被清除。D7D6D5D4:对应表示通道3、2、1、0的请求信号DREQ输入是否有效。1:对应通道有请求◆I/O地址A3-A0=1000,CPU读出即为各端口的状态DMA请求寄存器◆I/O地址A3-A0=1001,初始化由CPU写入,分别设置通道0—通道3的DMA请求触发器,可以通过DREQ有效或软件(设置请求触发器)使该触发器置1,表示有DMA请求发生。在执行存储器到存储器DMA传送时,由通道0读出数据,由通道1将数据写入目的单元,此时启动DMA过程不是由外部的DREQ请求实现的,而是由内部软件DMA请求实现的。即对通道0的请求寄存器写入DMA请求04H,通过产生软件DREQ请求使8237A产生总线请求信号HRQ,启动DMA传送。屏蔽寄存器每一个通道有一个屏蔽触发器,当该触发器为1时,屏蔽该通道的DMA请求,屏蔽位可用下列三种命令字来置位或清除.◆单通道屏蔽字:I/O地址A3-A0=10108237A综合屏蔽命令的格式I/O地址A3-A0=1111D3D2D1D0分别对应通道3、2、1、0的屏蔽位标志,若为1,禁止DMA请求;若为0,允许DMA请求。

◆清除屏蔽寄存器:屏蔽寄存器的I/O地址中A3-A0=1110,对其进行一次写0操作即可开放所有通道的屏蔽位清除命令主清除命令:向A3-A0=1101的I/O地址执行一次写操作即可实现复位功能,除屏蔽寄存器各位置1外,其余寄存器的内容均为0清除先/后触发器:向A3-A0=1100的I/O地址执行一次写操作,使先/后触发器为0

先/后触发器:用来控制读写16位寄存器的高字节还是低字节清除屏蔽触发器:如前所述,向A3-A0=1110的I/O地址执行一次写0操作即可*在8237A复位之后,所有的屏蔽位都被置“1”,即禁止所有的DMA请求。在非自动预置方式下,一旦某通道的DMA传送结束,该通道的屏蔽位也被置“1”。

在DMA通道初始化时,为了开放通道的DMA请求,必须清除屏蔽位。即对端口地址A3~A0=1110,(指屏蔽寄存器)进行一次写“0”操作,即可清除4个通道的屏蔽位,开放全部通道的DMA请求。例如,设8237A的端口地址为00H~0FH,可用下列指令清除屏蔽寄存器。MOVAL,0;清除四通道的屏蔽位

OUT0EH,AL;送入端口地址A3~A0=1110,CS=0暂存寄存器:

8237进行从存储器到存储器传送操作时,源存储单元中的数据读出送到暂存寄存器中暂存。对A3-A0=1101进行读操作,可读暂存寄存器先/后触发器在8237芯片内还有一个名为先/后触发器的内部触发器。该触发器标识将哪一个字节写入基址寄存器。如果这个内部触发器的开始状态是逻辑0,那么软件必须向该寄存器写入地址字的低字节;相反,如果它为逻辑1,必须将高字节写入该寄存器例如,为了把地址1234H写入DMA控制器通道0的基址和当前地址寄存器中,且该DMA控制器的基本I/O地址为ADDER,这里ADDER≤F0H,并且由8237的信号如何产生来决定,那么可以通过执行下列指令来初始化基址寄存器和当前地址寄存器MOVAL,34H;写低字节

OUTADDER+0,ALMOVAL,12H;写高字节

OUTADDER+0,AL

假定该内部触发器已初始化为0

8237的每个DMA通道还配备有两个字计数寄存器,被分别称之为基本字计数寄存器和当前字计数寄存器。两个寄存器的长度也均为16位。基本字计数寄存器的值规定DMA操作期间所传送的数据字节数。实际传送的字节数总是比编程写入该寄存器的值多1。这是因为DMA传送的结束是通过检测当前字计数值从0000H到FFFFH的变化来实现的。在DMA操作周期的任何时刻,当前字计数寄存器中的值总是表示还剩多少个字节尚未传送对计数寄存器的编程方法与上面介绍的对地址寄存器的编程方法相同。例如,要把计数值0FFFH写入到DMA控制器通道1的基本字计数寄存器和当前字计数寄存器中,设DMAC的基I/O地址为ADDER,且ADDER≤F0H,则可通过执行下列指令来实现MOVAL,0FFH ;写低字节

OUTADDER+3,AL MOVAL,0FH ;写高字节

OUTADDER+3,AL8237A的内部寄存器通道寄存器:基地址寄存器、当前地址寄存器通道0:A3A2A1A0=0000;通道1:A3A2A1A0=0010

通道2:A3A2A1A0=0100;通道3:A3A2A1A0=0110

基字节寄存器、当前字节寄存器通道0:A3A2A1A0=0001;通道1:A3A2A1A0=0011

通道2:A3A2A1A0=0101;通道3:A3A2A1A0=0111公用寄存器:控制寄存器:设定工作方式及请求控制状态寄存器:存放状态信息,供CPU查询8237A的编程输出主清命令(软件复位)写基地址寄存器写方式寄存器写命令寄存器写基字节寄存器

8237初始化流程图写屏蔽寄存器例编写外设到内存DMA传送的初始化程序。要求:利用8237通道1,将外设长度为1000个字节的数据块传送到内存2000H开始的连续的存储单元中。采用块传送,外设的DREQ1为高电平有效,DACK1为低电平有效,允许请求,设8237的I/O地址为70H~7FH。初始化程序如下:START:MOVAL,00H

OUT7DH,AL;软件复位,先/后触发器为0MOVAL,00HOUT72H,AL;2000H写入基(当前)地址寄存器

MOVAL,20HOUT72H,ALMOVAX,1000;传输的字节数1000DECAX;计数值调整为1000-1

OUT73H,AL;计数值写入基(当前)字节计数器

MOVAL,AHOUT73H,ALMOVAL,85H;块传送,地址增1,写传送

OUT7BH,AL;写方式字

MOVAL,01HOUT7AH,AL;写屏蔽字,允许通道1请求

MOVAL,00H;DACK1=0,DREQ1=1,允许8237工作

OUT78H,AL;写命令字注意:当传送的数据块的字节数为n时,写入计数器的值应调整为n-1。这是因为当计数器的值从初值减到“0”后,还要继续传送一个字节才发送传送结束信号EOP。

编写存储器到存储器DMA传送的初始化程序。要求:将内存2000H开始的1000H个字节的数据块传送到4000H开始的目的单元中,由通道0和通道1完成传送(设8237的I/O地址为70H~7FH)。初始化程序如下:

START:MOVAL,00H

OUT7DH,AL;软件复位,先/后触发器为0MOVAL,00H;源地址写入通道0OUT70H,AL;基(当前)地址寄存器

MOVAL,20HOUT70H,ALMOVAX,1000H;字节数1000H写入通道0

;基(当前)字节计数器

DECAX;调整计数值

OUT71H,AL

MOVAL,AHOUT71H,ALMOVAL,00H;目的地址写入通道1

;基(当前)地址寄存器

OUT72H,AL;写低位地址

MOVAL,40HOUT72H,AL;写高位地址

MOVAX,1000H;字节数1000H写入通道1

;基(当前)字节计数器

DECAX;调整计数值

OUT73H,AL;写低位计数值

MOVAL,AH

OUT73H,AL;写高位计数值

MOVAL,88H;块传送,地址增1,读传送

OUT7BH,AL;写通道0工作方式字

MOVAL,85H;块传送,地址增1,写传送

OUT7BH,AL;写通道1工作方式字

MOVAL,81H;允许存储器到存储器传送

OUT78H,AL;写命令寄存器

MOVAL,04H;通道0请求DMA传送

OUT79H,AL;写请求寄存器

MOVAL,00H;开放全部DMA请求

OUT0FH,AL;写屏蔽寄存器

END8237A工

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论