DMA传输原理

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1第6章DMA传输6.1DMA传输原理6.2DMA控制器8237A6.38237A的编程使用2直接存储器传送(DirectMemoryAccess—DMA)将外设的数据不经过CPU直接送入内存储器,或者,从内存储器不经过CPU直接送往外部设备一次DMA传送只需要执行一个DMA周期(相当于一个总线读/写周期),因而能够满足高速外设数据传输的需要。MCPUI/O36.1DMA传输原理1.DMA控制器使用DMA方式传输时,需要一个专门的器件来协调外设接口和内存储器的数据传输,这个专门的器件称为DMA控制器,简称DMAC。4DMAC内部的寄存器:•地址寄存器:存放DMA传输时存储单元地址;•字节计数器:存放DMA传输的字节数;•控制寄存器:存放由CPU设定的DMA传输方式,控制命令等;•状态寄存器:存放DMAC当前的状态,包括有无DMA请求,是否结束等。5图6-16DMAC在系统中有二种不同的作用:•总线从模块:CPU对DMAC进行预置操作,也就是向DMAC写入内存传送区的首地址、传送字节数和控制字时,DMAC相当于一个外设接口,称为总线从模块。•总线主模块:进行DMA传输时,CPU暂停对系统总线的控制,DMAC取得了对总线的控制权,这时的DMAC称为总线主模块。72.DMA传输过程•总线请求:DMAC向CPU申请使用总线•总线控制转移:CPU同意DMAC管理总线•数据传输:外设接口和存储器之间传输数据•修改地址和计数器:为下一次传输做准备•结束处理:DMAC放弃对总线的控制权•以上的过程完全由硬件电路实现,速度很快。•用DMA方式进行一次数据传输所经历的时间称为“DMA周期”,大体上相当于一次总线读写周期的时间。8[例]:用DMA方式将串行通信口接收到的200字节的数据存入以BUFFER为首地址内存区域对DMAC进行预置:向DMAC写入内存首地址,传输字节数(200),传输方向(外设接口→内存),控制命令(允许DMA传输)等;对串行通信接口进行初始化,设置串行通信的参数,允许串行输入等;串口每输入一个数据,自动进行DMA传输;最后一个数据传输结束后,DMAC发出传输结束信号EOP。CPU可以通过查询知道传输已经结束,也可以利用EOP信号申请中断,在中断服务程序里进行结束处理。DMA方式传输200字节过程为:1次对DMAC初始化,1次对串口初始化,200次DMA周期,1次结束处理。93.8086系统中的DMA信号•最小模式CPU通过HOLD接收DMA控制器的总线请求;在HLDA引脚上发出对总线请求的允许信号。•最大模式通过RQ/GT0和RQ/GT1引脚接收DMA控制器的总线请求,发送对总线请求的允许信号。RQ/GT0引脚有较高的优先权。106.2DMA控制器8237A1.8237A芯片的主要特点有4个完全独立的DMA通道,可分别进行编程控制。每个通道的DMA请求均可分别允许和禁止,并对各通道进行优先级排队。数据块最大为64KB,每传送一个字节后地址自动加1或减1。DMA请求可以由外部输入,也可以由软件设置。可以用级联的方法扩展DMA通道数。可以进行从存储器到存储器的数据传输,用于对存储区域进行初始化。112.8237A的工作方式(1)单字节传输方式8237A每申请一次总线,进行1个字节传输,然后释放系统总线,一次DMA传输结束。CPU可以在每个DMA周期结束后控制总线,进行数据传输,所以不会对系统的运行产生大的影响。(2)块传输方式DMA控制器获得总线控制权后,可以连续进入多个DMA周期,进行多个字节的传输(最多64K字节)。这种方式可以获得最高的数据传输速度。如果一次传输的数据较多,对系统工作可能产生一定的影响。12(3)请求传输方式•申请一次总线可以连续进行多个数据的传输。•每传输1个字节后,8237A都对外设接口的请求信号进行测试:DREQ端无效,暂停传输;DREQ有效,接着进行下一个数据的传输。•允许数据不连续,按照外设的最高速度进行数据传输,使用比较灵活。13(4)级联传输方式•几个8237A进行级联,一片8237A用作主片,其余用作从片,构成主从式DMA系统。•从片收到外设接口的DMA请求信号后,向DMA控制器主片申请,再由主片向CPU申请。•一片主片最多可以连接四片从片。这样,五片8237A构成的二级DMA系统,可以得到16个DMA通道。•级联时,主片通过软件在方式寄存器中设置为级联传输方式。从片设置成上面的三种方式之一。143.8237A的传输类型(1)DMA写传输(I/O→存储器)(2)DMA读传输(存储器→I/O)(3)DMA检验(完成校验过程,测试DMA控制器的状态)。(4)存储器到存储器传输156.2.28237A的内部结构和外部连接8237A的内部结构分成二部分:四个DMA通道和一个公共控制部分16HOLDHLDACLKHRQHLDACLKAENIORIOWMEMRMEMWREADY控制寄存器暂存寄存器状态寄存器公共部份地电源当前地址寄存器基本地址寄存器基本字节计数器当前字节计数器方式寄存器12通道0通道1通道2通道3DREQ0DACK0DREQ1DACK1DREQ2DACK2DREQ3DACK3使微处理器地址锁存信号无效锁存缓冲器ADSTBENSTB地址译码CSA4~A7A0~A3DB0~7A4~A7A8~A15M/IO连接数据总线A0~A31:请求触发器2:屏蔽触发器+5VEOP1171.DMA通道8237A有四个独立的通道(CH0一CH3)每个通道:•16位地址寄存器;•16位字节计数器;•8位方式寄存器;•1位的DMA请求触发器;•1位的屏蔽触发器。•四个通道公用一个控制寄存器和一个状态寄存器。18DMA通道--地址寄存器•由基地址寄存器和当前地址寄存器组成。•对8237编程时,把本通道DMA传输的地址初值写入基地址寄存器,再由8237A传送到当前地址寄存器。•当前地址寄存器在每次DMA传输后自动加1或减1。•CPU可以通过输入指令读出当前地址寄存器值(每次读8位)。基地址寄存器不能被读出,且一直保持初值。•数据块传送完成后,可以把当前地址寄存器的内容恢复为基地址寄存器保存的初值。(需要在编程时设置“自动预置”方式)19DMA通道--字节计数器•字节计数器由基本字节计数器和当前字节计数器组成。•编程时,由指令把DMA传输的字节数写入基本字节计数器,继而传送到当前字节计数器(初值要比实际传输的字节数少1)•每进行一次DMA传输,当前字节计数器自动减1。它的值由0减到FFFFH(-1)时,产生计数结束信号EOP。•当前计数器的值可以由CPU通过输入指令分两次读出。202.读/写逻辑8237A在系统总线中作为“从模块”时•接收CPU对I/O接口的读(IOR#)、写(IOW#)信号;•对地址总线的低4位(A0~A3)译码;•片选和IOW#信号有效时,把数据总线的内容写入所寻址的寄存器;•片选和IOR#有效时,把选择的寄存器内容送到数据总线上。212.读/写逻辑8237A在系统总线中作为“主模块”时•DMA写周期:读/写逻辑产生IOR#控制逻辑产生存储器写(MEMW#)数据从外设接口传送到存储器单元;•DMA读周期:读/写逻辑产生IOW#控制逻辑产生存储器读(MEMR#)数据从存储器单元传送到外设接口。223.控制逻辑•DMA周期内,控制逻辑通过产生控制信号和16位要存取的存储单元地址来控制DMA操作步骤。•初始化时,通过对方式寄存器编程,使控制逻辑可以对各个通道的操作进行控制。234.锁存缓冲器(外接)使用8237A工作时,需要外接一个八位的地址锁存缓冲电路,它能够储存八位的地址信号,通过可控的三态门连接系统地址总线。在DMA传送之前,8237A从DB0~DB7把存储器地址的A8~A15送入这个锁存器。在DMA周期里,锁存器将锁存的地址送往系统地址总线的A8~A15,同时从A0~A7引脚发送地址的低八位。245.页面地址寄存器(外接)8237A控制了地址总线的16位,所以最多只能连续传送64K字节的数据。为了控制8086系统20位的物理地址,需要外接一个四位的“页面地址寄存器”(PC机地址:83H)页面地址寄存器的值由CPU写入8237A发送低16位地址时,高四位的地址从页面地址寄存器发往地址总线的A16~A19256.2.38237A的对外连接信号8237A作为从模块时的引脚信号(1)RESET—复位输入端,高电平有效。复位时,屏蔽寄存器被置1,其他寄存器均清0。CS#——片选输入端,低电平有效,由A4~A15译码得到。为低电平时,8237A被选中,CPU可以对8237A进行读写(进行预置或读取工作状态)。A3~A0—最低的4位地址线,双向信号引脚。DMA控制器作为从模块时,A3~A0作为输入端,用来选择DMAC内部的16个端口地址。268237A作为从模块时的引脚信号(2)IOR#——I/O设备读信号,双向、三态、低电平有效。作为从模块时为输入。有效时,CPU读DMA控制器内部寄存器的值。IOW#——I/O设备写信号,双向、三态、低电平有效。作为从模块时输入。有效时,CPU向DMA控制器的内部寄存器中写入信息(进行编程)。DB7~DB0——8位双向三态数据线。DMA控制器作为从模块时,CPU通过DB7~DB0对8237A进行读写。278237A作为总线主模块时的引脚信号(1)地址信号A3~A0——DMAC为主模块时,提供存储器最低4位地址(输出)。A7~A4—-提供存储器的中间4位地址(输出)DB7~DB0—输出当前地址寄存器中的高8位地址,并通过信号ADSTB打入外部锁存器,和A7~A0输出的低8位地址一起构成16位地址。28地址信号ADSTB——地址选通信号,输出,高电平有效。信号有效时,将DMAC高8位地址经DB7~DB0送到外部锁存器。AEN——地址允许信号,输出,高电平有效。把高12位地址(地址锁存器中高8位、页面地址寄存器最高4位)一起送到地址总线上,与芯片直接输出的低8位地址共同构成20位内存地址。AEN信号也使与CPU相连的地址锁存器无效。保证地址总线上的信号来自DMA控制器,而不是来自CPU。29(2)对存储器/外设接口的读写控制信号IOR#——作为主模块时,IOR#输出外设接口的读控制信号,信号有效时,I/O接口部件中的数据被读出送往数据总线。IOW#——作为主模块时,IOW#输出外设接口的写控制信号,信号有效时,存储器中读出的数据被写入I/O接口中。READY——准备就绪信号,输入,高电平有效。所用的存储器或I/O接口的速度较慢时,使READY处于低电位,8237A会自动插入等待周期。数据准备就绪时,READY端为高电平,表示可以进行数据传输。30(2)对存储器/外设接口的读写控制信号MEMR#——存储器读信号,低电平有效,输出。信号有效时,所选中的存储器单元的内容被读到数据总线。MEMW#——存储器写信号,低电平有效,输出。信号有效时,数据总线上的内容被写入选中的存储单元。31(3)DMA联络信号DREQ——通道DMA请求信号,输入。每个通道对应一个DREQ信号端,它的极性可以通过编程来选择。外设接口要求DMA传输时,使DREQ处于有效,DMAC控制器送来DMA响应信号DACK以后,接口撤除DREQ的有效电平。DACK——通道DMA应答信号,输出。DMAC送给接口的回答信号,每个通道有一个DACK信号端。DMAC获得CPU送来的总线允许信号HLDA以后,产生DACK信号送到外设接口。DACK信号的极性可以通过编程选择。该信号相当于IO接口的地址选择信号。32HRQ——总线请求信号,输出。8237A收到外设接口发来DREQ信号后,如果该通道的DMA请求没有被屏蔽,DMAC通过HRQ端向CPU发出总线请求。HLDA——总线响应信号,输入。DMAC向CPU发总线请求信号HRQ以后,CPU发回的总线响应信号。8237A收到该信号后,便获得了总线控制权。HLDA也称为总线保持回答信号。EOP#——DMA传输结束信号,低电平

1 / 68
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功