第7 章 DMA控制接口

DMA控制器的一般结构和概要

1、DMA概述

为了提高数据传送的速率,人们提出了直接存储器存取(DMA)的数据传送控制方式,即在一定时间段内,由DMA控制器取代CPU,获得总线控制权,来实现内存与外设或者内存的不同区域之间大量数据的快速传送。

2、DMA数据传送的工作过程

① 外设向DMAC发出DMA传送请求。
② DMAC通过连接到CPU的HOLD信号向CPU提出DMA请求。
③ CPU在完成当前总线操作后会立即对DMA请求做出响应。CPU的响应包括两个方面:
一方面,CPU将控制总线、数据总线和地址总线浮空,即放弃对这些总线的控制权;
另一方面,CPU将有效的HLDA信号加到DMAC上,用此来通知DMAC,CPU已经放弃了总线的控制权。
⑤ 待CPU将总线浮空,即放弃了总线控制权后,由DMAC接管系统总线的控制权,并向外设送出DMA的应答信号。
⑥ 由DMAC送出地址信号和控制信号,实现外设与内存或内存不同区域之间大量数据的快速传送。
⑦ DMAC将规定的数据字节传送完之后,通过向CPU发HOLD信号,撤消对CPU的DMA请求。CPU收到此信号,一方面使HLDA无效,另一方面又重新开始控制总线,实现正常取指令、分析指令、执行指令的操作。
在这里插入图片描述
需要注意的是,在内存与外设之间进行DMA传送期间,DMAC控制器只是输出地址及控制信号,而数据传送是直接在内存和外设端口之间进行的,并不经过DMAC;对于内存不同区域之间的DMA传送,则应先用一个DMA存储器读周期将数据从内存的源区域读出,存入到DMAC的内部数据暂存器中,再利用一个DMA存储器写周期将该数据写到内存的目的区域中去。

DMA控制器8237A的原理

在这里插入图片描述

1、DMA控制器8237A的编程结构
  • 含有4个相互独立的通道,每个通道有独立的地址寄存器和字节数寄存器,而控制寄存器、状态寄存器为四个通道所共用。
  • 每个DMA通道具有不同的优先权
  • 每个DMA通道可以分别允许和禁止
    每个DMA通道有4种工作方式,分别为:单字节传送、数据块传送、请求传送、级连方式。
  • 通道中地址寄存器的长度为16位,一次传送的最大长度可达64KB
  • 多个8237A芯片可以级连,扩展通道数
2、8237A的内部组成和结构

在这里插入图片描述
(1)四个独立的DMA通道
每个通道都有一个16位的基地址寄存器,一个16位的基字节数计数器,一个16位的当前地址寄存器和一个16位的当前字节数计数器及一个8位的方式寄存器,方式寄存器接收并保存来自于CPU的方式控制字,使本通道能够工作于不同的方式下;
(2)定时及控制逻辑电路
对在DMA请求服务之前,CPU编程对给定的命令字和方式控制字进行译码,以确定DMA的工作方式,并控制产生所需要的定时信号;
(3)优先级编码逻辑
对通道进行优先级编码,确定在同时接收到不同通道的DMA请求时,能够确定相应的先后次序。通道的优先级可以通过编程确定为是固定的或者是旋转的;
(4)共用寄存器
除了每个通道中的寄存器之外,整个芯片还有一些共用的的寄存器:

  • 1个16位的地址暂存寄存器
  • 1个16位的字节数暂存寄存器
  • 1个8位的状态寄存器
  • 1个8位的命令寄存器
  • 1个8位的暂存寄存器,
  • 1个4位的屏蔽寄存器
  • 1个4位的请求寄存器
    8237的内部寄存器
    在这里插入图片描述
    (5)8237的三态缓冲器
    8237的数据引线,地址引线都有三态缓冲器,因而可以接也可以释放总线。
3、8237的外部结构

(1)请求与响应信号

  • DREQ0~DREQ3:DMA通道请求。当外设需要请求DMA服务时,将DREQ信号置成有效电平,并要保持到产生响应信号。对应于四个独立的通道,DREQ的有效电平可以通过编程来加以确定,优先级可以固定,也可以旋转。
  • HRQ:总线请求。8237A输出有效的HRQ高电平,向CPU申请使用系统总线。
  • HLDA:总线响应。8237A接受来自CPU的响应信号HLDA,取得了总线的控制权。
  • DACK0~DACK3:DMA通道响应。8237A使请求服务的通道产生相应的DMA响应信号。

(2)DMA传送控制信号

  • A0~A7:地址线。输出低8位存储器地址。
  • DB0~DB7:数据线。输出高8位存储器地址;存贮器与存贮器的传送期间,用于数据传送。
  • ADSTB:地址选通。DMA传送开始时,输出高有效,把在DB0~DB7上输出的高8位地址锁存在外部锁存器中。
  • AEN:地址允许。输出高有效,将锁存的高8位地址送入系统总线,与芯片此时输出的低8位地址组成16位存储器地址。
  • MEMR:存储器读。有效将数据从存储器读出
  • MEMW:存储器写。有效将数据写入存储器
  • IOR:I/O读。有效将数据从外设读出
  • IOW:I/O写。有效将数据写入外设
  • READY:准备好。DMA传送的S3下降沿检测到为低时,插入等待状态Sw,直到READY为高才进入第4个时钟周期S4。
  • EOP:过程结束。DMA传送过程结束,输出一个低有效脉冲。外部输入低脉冲信号,则终结DMA传送。

(3)处理器接口信号

  • CS:片选。低有效时,微处理器与8237A通过数据线通信,主要完成对8237A的编程。
  • IOR:I/O读。读取8237A内部寄存器低电平有效的双向三态信号引脚。在空闲周期,它是一条输入控制信号,CPU利用 这个信号读取8237内部状态寄存器的内容;而在DMA传送时,它是读端口控制信号输出引脚,与相配合,使数据由外设传送到内存。
  • IOW:I/O写。写入8237A内部寄存器。低电平有效的双向三态信号引脚,其功能与相对应。
  • DB0~DB7: 8条双向数据线。用于8237A与微处理器进行数据交换。在CPU控制系统总线时,可以通过DB0~ DB7对8237编程或读出8237的内部状态寄存器的内容;在DMA操作期间,由DB0~ DB7输出高8位地址信号A8~A15,并利用ADSTB信号锁存该地址信号。
    在进行内存不同区域之间的DMA传送时,除了送出A8~A15地址信号外,还分时输入从存储器源区域读出的数据,送入8237的暂存寄存器中,等到存储器写周期时,再将这些数据通过这8个引脚,由8237的暂存寄存器送到系统数据总线上,然后写入到规定的存储单元中去。
  • A3~A0:4条双向三态的低位地址信号引脚。在空闲周期,接收来自于CPU的四位地址信号,用以寻址8237内部的不同的寄存器(组);在DMA传送时,输出要访问的存储单元或者I/O端口地址的低4位。
  • A7~A4 :4条三态地址信号输出引脚。在DMA传送时,输出要访问的存储单元或者I/O端口地址的中4位。
  • CLK:时钟信号输入引脚,对于标准的8237,其输入时钟频率为3MHz,对于8237-2,其输入时钟频率可达5MHz。
  • RESET:复位信号,输入引脚,用来清除8237中的命令、状态请求和临时寄存器,且使字节指针触发器复位并置位屏蔽触发器的所有位(即使所有通道工作在屏蔽状态),在复位之后,8237工作于空闲周期SI。
4、8237A的两种工作状态
  • 作为从模块工作时(空闲周期):
    当CPU把数据送到8237A的寄存器或者从8237A的寄存器取出时,8237如同接口一样作为总线的从模块工作,受CPU控制的工作状态。
    这时,8237A接收16位地址,用较高的12位地址产生片选信号,用底4位地址来选择内部寄存器。
  • 作为主模块工作时(有效周期):
    当8237A作为主模块工作时,它会往总线上提供要访问的内存地址,地址的低8位放在A7~ A0,而地址的高8位放在D7~D0。
    作为主模块工作时,8237A还必须输出必要的读写信号,IOR、IOW、MEMR、MEMW。

8237A引脚的两种作用
在这里插入图片描述

5、8237的工作周期

空闲周期
当8237的任一通道都无DMA请求时,则其处于空闲周期或称为SI状态,空闲周期由一系列的时钟周期组成,在空闲周期中的每一个时钟周期,8237只做两项工作:

  • 8237A采样CS片选信号,该信号有效,CPU就要对8237A进行读/写操作
  • 8237A还采样通道的请求输入信号DREQ,该信号有效,就进入有效周期

有效周期

  • 8237A采样到外设有DMA请求,就脱离空闲周期进入有效周期
  • 8237A作为系统的主控芯片,控制DMA传送操作
  • DMA传送借用系统总线完成,其控制信号以及工作时序类似CPU总线周期
    在这里插入图片描述
    在这里插入图片描述
6、8237A的工作方式

DMA传送方式:单字节传送方式、数据块传送方式、请求传送方式、级连方式
DMA传送类型:DMA读、DMA写、DMA检验
存储器到存储器的传送
(1)DMA传送
单字节方式

  • 每次DMA传送时仅传送一个字节
  • 传送一个字节之后,当前字节数寄存器减1,当前地址寄存器加1或减1,HRQ变为无效
  • 每传送完这一个字节, 8237A释放系统总线, DMAC就将总线控制权交回CPU。
  • 若传送后使字节数从0减到FFFFH,则终结DMA传送或重新初始化
  • 特点:
    一次传送一个字节,效率略低
    DMA传送之间CPU有机会重新获取总线控制权

数据块方式

  • 在这种传送方式下,DMAC一旦获得总线控制权,便开始连续传送数据。每传送一个字节,自动修改当前地址及当前字节数寄存器的内容,直到字节数寄存器从0减到FFFFH终止计数,或由外部输入EOP有效信号终结DMA传送,将总线控制权交给CPU。
  • 一次所传送数据块的最大长度可达64KB,数据块传送结束后可自动初始化。
    DREQ只需维持有效到DACK有效
  • 特点:
    一次请求传送一个数据块,效率高
    整个DMA传送期间CPU长时间无法控制总线(无法响应其他DMA请求、无法处理中断等)

请求方式

  • DREQ信号有效就连续传送数据
  • DREQ信号无效,DMA传送被暂时中止,8237A释放总线,CPU可继续操作
  • DMA通道的地址和字节数的中间值仍被保持
  • DREQ信号再次有效,DMA传送就继续进行
  • 如果字节数寄存器从0减到FFFFH,或者由外部送来一个EOP有效的信号,将终止计数
  • 特点:
    DMA操作可由外设利用DREQ信号控制传送的过程

级连方式

  • 用于通过多个8237A级连以扩展通道
  • 第二级的HRQ和HLDA信号连到第一级某个通道的DREQ和DACK上
  • 第二级芯片的优先权等级与所连通道的优先权相对应
  • 第一级只起优先权网络的作用,实际的操作由第二级芯片完成
  • 还可由第二级扩展到第三级等
    在这里插入图片描述
    (2)DMA传输类型
  • DMA读——把数据由存储器传送到外设
    由MEMR有效从存储器读出数据,由IOW有效把这一数据写入外设
  • DMA写——把外设输入的数据写入存储器
    由IOR有效从外设输入数据,由MEMW有效把这一数据写入存储器。
  • DMA检验——空操作
    8237A不进行任何检验
    外设可以进行DMA校验
    存储器和I/O控制线保持无效,不进行传送

(3)存储器到存储器的传送

  • 固定使用通道0和通道1
  • 通道0的地址寄存器存源区地址
  • 通道1的地址寄存器存目的区地址,通道1的字节数寄存器存传送的字节数
  • 传送由设置通道0的软件请求启动
  • 每传送一字节需用8个时钟周期
    前4个时钟周期用通道0地址寄存器的地址从源区读数据送入8237A的临时寄存器
    后4个时钟周期用通道1地址寄存器的地址把临时寄存器中的数据写入目的区

(4)DMA通道的优先权方式

  • 固定优先权方式——优先权固定
    通道0优先权最高,通道1其次,通道2再次,通道3最低
  • 循环优先权方式——优先权循环变化
    最近一次服务的通道在下次循环中变成最低优先权,其他通道依次轮流相应的优先权
  • DMA传送不存在嵌套

(5)自动初始化方式

  • 每当DMA过程结束信号EOP产生时(不论是内部终止计数还是外部输入该信号)
  • 用基地址寄存器和基字节数寄存器的内容,使相应的现行寄存器恢复为初始值,包括恢复屏蔽位、允许DMA请求
  • 这样就作好了下一次DMA传送的准备

8237A的寄存器

  • 8237A共有10种内部寄存器,对它们的操作有时需要配合3个软件命令
  • 8237A的“软件命令”
    不需要通过数据总线写入控制字
    直接由地址和控制信号译码实现
1、基地址寄存器

用以存放16位地址,只可写入而不能读出。
在编程时,它与当前地址寄存器被同时写入某一起始地址,可用作内存区域的首地址或末地址。
在8237进行DMA数据传送的工作过程中,其内容不发生变化,只是在自动预置时,其内容可被重新写到当前地址寄存器中去。

2、基字节数寄存器
  • 用以存放相应通道需要传送数据的字节数,只可写入而不能读出。
  • 在编程时它与当前字节数寄存器被同时写入要传送数据的字节数。
  • 在8237进行DMA数据传送的工作过程中,其内容保持不变,只是在自动预置时,其内容可以被重新写到当前字节数寄存器中去。
3、当前地址寄存器
  • 保持DMA传送的当前地址值
  • 每次传送后该寄存器的值自动加1或减1
  • CPU可以对其进行读写操作。
  • 在选择自动预置时,每当字节计数值减为0或外部有效后,就会自动将基地址寄存器的内容写入当前地址寄存器中,恢复其初始值。
4、当前字节数寄存器
  • 保持DMA传送的剩余字节数
  • 每次传送后,该寄存器的值减1
  • 这个寄存器的值可由CPU写入和读出
  • 该寄存器的值减至0,再减1(从0减到FFFFH)时,终止计数
5、地址暂存寄存器和字节数暂存寄存器

这两个16位的寄存器和CPU不直接发生关系,我们也不必要对其进行读/写操作,因而对如何使用8237没有影响。

6、模式寄存器

每个通道有一个8位的模式寄存器,但是它们占用同一个端口地址,用来存放方式字,依靠方式控制字本身的特征位来区分写入不同的通道,用来规定通道的工作方式,各位的作用如下:
方式字格式:
在这里插入图片描述
自动预置就是当某一通道按要求将数据传送完后,又能自动预置初始地址和传送的字节数,而后重复进行前面已进行过的过程。
校验传送就是实际并不进行传送,只产生地址并响应EOP信号,不产生读写控制信号,用以校验8237的功能是否正常。

7、控制寄存器
  • 存放8237A的命令字
  • 设置8237A芯片的操作方式
  • 影响每个DMA通道
  • 复位时使命令寄存器清零
  • 设置D2=1才使8237A可以作为DMA控制器

命令字格式
在这里插入图片描述
命令字说明

  • D0位用以规定是否允许采用存储器到存储器的传送方式。若允许这样做,则利用通道0和通道1来实现。
  • D1位用以规定通道0的地址是否保持不变。如前所述,在存储器到存储器传送中,源地址由通道0提供,读出数据到暂存寄存器,而后,由通道l送出目的地址,将数据写入目的区域;若命令字中D1=0,则在整个数据块传送中(块长由通道1决定)保持内存源区域地址不变,因此,就会把同一个数据写入到整个目的存储器区域中。
  • D2位是允许或禁止8237芯片工作的控制位。
  • D3位用于选择总线周期中写信号的定时。例如,PC机中动态存储器写是由写信号的上升沿启动的。若在DMA周期中写信号来得太早,可能造成错误,所以PC机选择D3=0。
  • D5位用于选择是否扩展写信号。在D3=0(正常时序)时,如果外设速度较慢,有些外设是用8237A送出的和信号的下降沿来产生的READY信号的。为提高传送速度,能够使READY信号早些到来,须将和信号加宽,以使它们提前到来。因此,可以通过令D5=1使和信号扩展2个时钟周期提前到来。
8、请求寄存器
  • 用于在软件控制下产生一个DMA请求
  • 除硬件DMA请求外,当工作在数据块传送方式时也可以通过软件发出DMA请求
  • 若是存贮器到存贮器传送,则必须由软件请求启动通道0
    在这里插入图片描述
9、屏蔽寄存器

控制外设硬件DMA请求是否被响应(为0允许),各个通道互相独立。3种方法:

  • 单通道屏蔽字只对一个DMA通道屏蔽位进行设置
  • 主屏蔽字对4个DMA通道屏蔽位同时进行设置
  • 清屏蔽寄存器命令使4个屏蔽位都清零(允许)
    复位使4个通道全置于屏蔽状态;
    当一个通道的DMA过程结束,如果不是工作在自动初始化方式,则这一通道的屏蔽位置位,必须再次编程为允许,才能进行下次DMA传送。
    单通道屏蔽字格式:
    在这里插入图片描述
    主屏蔽字格式
    在这里插入图片描述
10、状态寄存器

可由CPU读取;
低4位反映读命令这个瞬间每个通道是否产生TC(为1,表示该通道传送结束);
高4位反映每个通道的DMA请求情况(为1,表示该通道有请求);
状态位在复位或被读出后,均被清零。
8237的状态寄存器:
在这里插入图片描述

11、临时寄存器

在存储器到存储器的传送方式下,临时寄存器保存从源存储单元读出的数据,该数据又被写入到目的存储单元;
传送完成,临时寄存器只会保留最后一个字节,可由CPU读出;
复位使临时寄存器内容为零。

以上内容参考自唐老师的PPT 。

版权声明:本文为CSDN博主「Vanranrr」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_46716100/article/details/122245695

生成海报
点赞 0

Vanranrr

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

4路红外循迹模块使用教程

4路红外循迹模块使用教程 个人原创博客:点击浏览模块详细信息: 工作电压:DC 3.3V~5V 工作电流:尽量选择1A以上电源供电 工作温度:-10℃~50℃ 安装孔

拉绳位移传感器在接线时需要注意哪几点?

拉绳位移传感器在接线时需要注意哪几点? 1、拉绳位移传感器在接线时务必确认在电源关闭的情况下进行接线,接线应采用锡焊工艺,各引脚应焊接牢固,避免虚焊情况发生。焊接各引脚时应严格按照传感器厂

实验一 stm32F407VETx点亮流水灯

二、设计指标 使电路板上的8个LED轮流点亮,并按键控制点亮速度。 三、操作 1、CubeMX操作 1.1依据开发板LED引脚设置CubeMX中8个LED的引脚为GPIO_Output模式, 2、按键设置

初试——串口传输文件

一、实验概述 串口传输文件的练习。将两台笔记本电脑,借助 usb转rs232 模块和杜邦线,建立起串口连接。然后用串口助手等工具软件(带文件传输功能)将一台笔记本上的一个大文件&#xff