1第9章DMA控制接口为了实现CPU与I/O设备之间的数据传送,通常采用程序控制方式、中断方式和DMA方式这样三种数据传送方式。2程序控制方式和中断方式程序控制方式和中断方式都需要CPU作为中介:外设CPU内存两个含义:1)软件:外设与内存之间的数据传送是通过CPU执行程序来完成的2)硬件:I/O接口和存储器的读写控制信号、地址信号都是由CPU发出的(总线由CPU控制)。缺点:程序的执行速度限定了传送的最大速度—解决:DMA传输31、DMA传送的特点DMA传输:外设内存外设直接与存储器进行数据交换,CPU不再担当数据传输的中介者;总线由DMA控制器(DMAC)进行控制(CPU要放弃总线控制权),内存/外设的地址和读写控制信号均由DMAC提供。优点:数据传输由DMA硬件来控制,数据直接在内存和外设之间交换,可以达到很高的传输速率CPU外设存储器总线:执行程序指令的数据传送路径;:DMA方式的数据传送路径两种不同的数据传送路径5DMA传送方式通常用来高速传送大批量的数据块。如:硬盘和软盘I/O;快速通信通道I/O;多处理机和多程序数据块传送;在图像处理中,对CRT屏幕送数据;快速数据采集;DRAM的刷新操作。62、DMA控制器的基本功能①能接收外设的DMA请求,并能向CPU发出总线保持请求,以便取得总线使用权。②能接收CPU的总线保持允许信号,并能实行对总线的控制。③在获得总线控制权后,能提供访问存储器和I/O端口的地址,并在数据传送过程中能够自动修改地址指针,以便指向下一个要传送的数据单元。④在DMA期间向存储器和I/O设备发出所需要的控制信号,如读/写控制信号等。⑤能控制数据传送过程的进行和结束。⑥当DMA传送结束时,能向CPU发出DMA结束信号,以便CPU恢复对总线的控制。73、DMA控制器的基本组成①地址寄存器②字节计数器③控制寄存器④状态寄存器⑤内部定时与控制逻辑8DMA传送机制①系统总线CPUDMAC存储器外设接口AENIOWMEMWMEMRIORMEMWMEMRIOWIORAENHOLDHLDADRQDACK②③④⑤AENIOWIORMEMWMEMR①外设发出DMA请求②DMAC向CPU申请总线③CPU完成当前总线周期后响应,并释放总线控制权④DMAC得到总线控制权,并发出DMA响应信号⑤由DMAC发出各种控制信号,控制外设与存储器之间的数据传送⑥数据传送完后,DMAC撤销HOLD信号⑦CPU释放HLDA信号,并重新控制总线⑥⑦9DMA传送流程返回10DMAC占用总线控制权的方法(1)周期挪用(2)周期扩展(3)CPU停机112.DMA控制器的传送方式(1)单字节传送方式(2)块传送方式(3)请求传送方式(4)级联传送方式121)主动态在DMAC获得总线控制权之后,DMAC取代CPU而成为系统的主控者,接管和控制系统总线(数据总线、地址总线和控制总线)。通过总线向存储器或I/O设备发出地址、读/写信号,以控制在两个实体之间的传送2)被动态在DMAC获得总线控制权之前,DMAC受CPU控制。此时,CPU可对DMAC进行初始化编程,也可从DMAC中读出状态。当DMAC上电或复位时,DMAC自动处于被动态。3、DMA控制器在系统中的地位139.2可编程DMA控制器8237A1、8237A的主要特性①具有4个独立的DMA通道,每个通道都可独立地进行初始化。②每个通道的DMA请求都可以被允许或禁止。③每个通道的DMA有不同的优先级,既可以是固定优先级,也可以是循环优先级。④每个通道进行一次传送的最大字节数为64K。⑤提供4种传送方式:单字节传送方式、数据块传送方式、请求传送方式和级联传送方式。⑥多个8237A芯片可以级连,扩展通道数144.2.282C37A的引脚功能158237A内部逻辑框图168237A的内部寄存器端口通道I/O口地址寄存器读操作写操作DMA+0000H读通道0的地址计数器写通道0的地址初值寄存器和地址计数器DMA+101H读通道0的字节数计数器写通道0的字节数初值寄存器和字节数计数器DMA+2102H读通道1的地址计数器写通道1的地址初值寄存器和地址计数器DMA+303H读通道1的字节数计数器写通道1的字节数初值寄存器和字节数计数器DMA+4204H读通道2的地址计数器写通道2的地址初值寄存器和地址计数器DMA+505H读通道2的字节数计数器写通道2的字节数初值寄存器和字节数计数器DMA+6306H读通道3的地址计数器写通道3的地址初值寄存器和地址计数器DMA+707H读通道3的字节数计数器写通道3的字节数初值寄存器和字节数计数器DMA+8公用08H读状态寄存器写控制(命令)寄存器DMA+909H—写请求寄存器DMA+100AH—写单个通道屏蔽寄存器DMA+110BH—写工作方式寄存器DMA+120CH—写清除先/后触发器命令(软命令)DMA+130DH读暂存寄存器写总清除命令(软命令)DMA+140EH—写清除屏蔽寄存器命令(软命令)DMA+150FH—写综合屏蔽命令188237A的寄存器格式及其编程命令【例9.1】PC系列微机软盘读/写操作选择DMA通道2,单字节传送,地址增1,不用自动预置,其读、写、校验操作的方式如下:写操作:01000110B=46H;读盘,DMA写读操作:01001010B=4AH;写盘,DMA读校验操作:01000010B=42H;校验盘,DMA校验19方式字格式D7D6D5D4D3D2D1D000请求模式01单字节模式10数据块模式11级联模式0地址增量(加1)1地址减量(减1)0禁止自动初始化1允许自动初始化00DMA校验01DMA写10DMA读11非法××若D7D6=1100通道001通道110通道211通道320DMA传送类型DMA读——把数据由存储器传送到外设由MEMR*有效从存储器读出数据,由IOW*有效把这一数据写入外设DMA写——把外设输入的数据写入存储器由IOR*有效从外设输入数据,由MEMW*有效把这一数据写入存储器。DMA检验——空操作8237A不进行任何检验外设可以进行DMA校验存储器和I/O控制线保持无效,不进行传送211)单字节操作方式。每个DMA周期只传送一个字节就立即释放总线。2)连续操作方式。只要DMA操作开始,DMAC始终占用总线,而不管中间DREQ是否有效,直到DMA操作完成,才把总线控制权交还CPU。3)请求操作方式。如果有DMA请求,则DMAC就占用总线;当DMA请求无效,或DMA操作完成,或由外部传来过程结束信号(EOP)时,DMAC都会释放总线。4)级联传送方式。DMA传送方式22命令字格式D7D6D5D4D3D2D1D00DACK低有效1DACK高有效0DREQ高有效1DREQ低有效0滞后写1扩展写×若D3=10固定优先权1循环优先权0正常时序1压缩时序×若D0=10允许DMAC工作1禁止DMAC工作0允许通道0地址改变1禁止通道0地址改变×若D0=00禁止存储器之间传送1允许存储器之间传送23【例9.2】PC微机中的8237A按照如下要求工作:禁止存储器到存储器传送,正常时序,滞后写入,固定优先级,允许工作,DREQ高有效,DACK低有效,控制字为00H,将此命令写入控制寄存器的程序段为:MOVAL,00H;控制字=00000000BOUT08H,AL;控制口地址08H243.请求寄存器存放软件DMA请求状态除硬件DMA请求外,当工作在数据块传送方式时也可以通过软件发出DMA请求若是存贮器到存贮器传送,则必须由软件请求启动通道0请看请求字的格式25请求字格式D7D6D5D4D3D2D1D0任意0复位1置位00通道001通道110通道211通道326例如,如果用软件请求使用通道1进行DMA传送,则向请求寄存器写入05H代码即可。MOVAL,05H;请求字=00000101BOUT09H,AL;请求寄存器端口地址09H274.屏蔽寄存器控制外设硬件DMA请求是否被响应(为0允许),各个通道互相独立。3种方法:单通道屏蔽字只对一个DMA通道屏蔽位进行设置主屏蔽字对4个DMA通道屏蔽位同时进行设置清屏蔽寄存器命令使4个屏蔽位都清零(允许)复位使4个通道全置于屏蔽状态当一个通道的DMA过程结束,如果不是工作在自动初始化方式,则这一通道的屏蔽位置位,必须再次编程为允许,才能进行下次DMA传送请看屏蔽字的格式28单通道屏蔽字格式D7D6D5D4D3D2D1D0任意0清屏蔽位1置屏蔽位00通道001通道110通道211通道329主屏蔽字格式D7D6D5D4D3D2D1D0任意Di=0清通道I屏蔽位Di=1置通道I屏蔽位305.状态寄存器可由CPU读取低4位反映读命令这个瞬间每个通道是否产生TC(为1,表示该通道传送结束)高4位反映每个通道的DMA请求情况(为1,表示该通道有请求)状态位在复位或被读出后,均被清零316软命令2)清字节指示器软命令MOVAL,0XXH;0XXH为AL中任意值OUT0CH,AL;先/后触发器被清“0”1)总清除软命令MOVAL,0XXH;0XXH为AL中任意值OUT0DH,AL;写入总清端口,执行总清除命令3)清屏蔽寄存器软命令。MOVAL,0XXH;0XXH为AL中任意值OUT0EH,AL;写入清屏蔽寄存器端口329.2.48237A的使用和编程◆初始化编程的步骤:①输出主清除命令②方式字写入方式寄存器③命令字写入控制寄存器④写入相应通道当前地址寄存器和基地址寄存器初值⑤写入当前字节寄存器和基字节寄存器的初值⑥解除屏蔽,准备接收DMA请求⑦写入请求寄存器,可以由软件启动DMA,否则由DREQ启动33DMA传送实验在内存6000H:0开始单元存放10个数据,对DMA控制器8237进行初始化,使每一次DMA请求从内存向外设传送一字节数据。34DMA传送实验;由内存向外设输出数据。datasegmentout_datadb01,02,04,08,10h,20h,40h,80h,0ffh,00hdataendsextrasegmentat6000hextdb10dup(?)extraends35codesegmentassumecs:code,ds:data,es:extrastart:movax,datamovds,axmovax,extramoves,axleasi,out_dataleadi,extcldmovcx,10repmovsb36out0ch,al;清字节指针moval,49h;写方式字out0bh,almoval,06;置地址页面寄存器out83h,almoval,0;写入基地址低十六位out02,alout02,al37movax,0ah;写入传送的字节数10out03,al;先写低字节moval,ahout03,al;后写高字节moval,01;清通道屏蔽,启动DMAout0ah,al38movah,4chint21hcodeendsendstart