第十二章8237ADMA控制器及PC/XT机的系统板DMA数据传送方式(已在第六章讲过)DMA控制器的功能8237DMA控制器的两种工作状态8237A的组成和工作原理DMA数据传送方式DMA方式的提出DMA数据传送方式概述DMA方式的提出程序控制传送方式以CPU为中心,数据传送由CPU来控制利用中断方式虽然可以提高效率,但也必须由CPU控制;CPU在执行中断服务程序、保护现场、恢复现场都会花费不少时间总体评价:慢!不能满足高速数据传送的要求。利用DMA可以实现高速数据传送!DMA数据传送方式概述高速数据传送的需求DMA方式特点DMA方式传送数据路径DMA方式的优点DMA方式不是万能的DMA的应用场合高速数据传送的需求某些外部设备的数据传送非常快!例如:硬盘,其数据的最低传送速率达5MB/S。用程序控制方法传送数据的速率最高也只能达到530KB/S。因此完成硬盘与存储器之间的数据实时传送实际上是不可能的!因此,在这种情况下,数据传送采用DMA方式。DMA方式特点DMA----DirectMemoryAccess在存储器和外部设备之间,直接开辟高速的数据传送通路。数据的传送过程不需要CPU介入,只用一个总线周期,就能完成存储器和外设之间的数据传送。DMA方式传送数据路径CPU外设存储器总线程序控制数据输入/输出DMA方式数据传送DMA方式的优点由DMAC提供源地址和目的地址;修改地址、控制传送操作的结束和发出传送控制信号都由DMAC承担。即DMA方式是一种由硬件代替软件的方法,因而数据传送的速度显著提高了。DMA方式大大缩短了数据传送的响应时间。DMA方式不是万能的在DMA方式传送数据时,CPU把总线的控制权让给DMAC,DMAC取代CPU控制总线,此时,CPU不能读取指令;当DMAC控制总线时,CPU不能去检测和响应来自系统中其他设备的中断请求;DMA传送也存在以下两个额外开销:①总线访问时间;②DMAC的初始化,CPU要对DMAC写入控制字;总之,采用DMA方式,会增加硬件投资,提高系统的成本!DMA控制器的功能能向CPU提出DMA请求,请求信号加到CPU的HOLD引脚上CPU响应DMA请求后,DMA控制器从CPU那获得对总线的控制权,CPU暂停工作。提供读/写存储器或I/O设备的各种命令确定数据传输的起始地址和数据的长度,能自动修改地址和数据长度数据传送完毕,发出结束DMA传送的信号8237DMA控制器的两种工作状态从态方式:DMA控制器未取得总线控制权时,必须由CPU对DMA进行编程,以确定通道的选择、数据传送的方式和类型、内存单元起始地址、地址是递增还是递减、要传送的总字节数;CPU也可读取DMA的状态主态方式:DMA控制器取得总线控制权后,系统完全在它的控制下,I/O设备和存储器之间或存储器与存储器之间进行直接的数据传送8237A的组成和工作原理8237A的内部结构8237A的引脚功能8237A的内部寄存器8237A的内部结构时序与控制逻辑优先级编码电路数据和地址缓冲器命令控制逻辑内部寄存器组8237A引脚功能CLK时钟信号,输入CS片选信号READY准备好A3~A0DMAC的内部寄存器选择信号DB7~DB0数据线AEN地址允许信号ADSTB地址选通信号IOR和IOWI/O读写信号MEMR和MEMW存储器读写信号DREQ3~DREQ0通道3~0的DMA请求信号HRQ和HLDA保持请求和保持响应信号DACK3~DACK0通道3~0的DMA响应信号EOP传输过程结束信号8237A的内部寄存器名称位数数量当前地址寄存器164(每通道一个)当前字计数寄存器164(每通道一个)基地址寄存器164(每通道一个)基字计数寄存器164(每通道一个)工作方式寄存器64(每通道一个)命令寄存器81(4个通道公用一个)状态寄存器81(4个通道公用一个)请求寄存器41(每通道1位)屏蔽寄存器41(每通道1位)暂存寄存器81(每通道1位)当前地址寄存器每个通道都有一个16位的当前地址寄存器,用于存放DMA传送的存储器地址值。每传送一个数据,地址值自动增1或减1,以指向下一个存储单元。当前字计数寄存器每个通道都有一个16位的当前字计数寄存器,它的初值比实际传送的字节数少1,该值是在编程状态下由CPU写入的。在进行DMA传送时,每传送一个字节,字计数器的内容自动减1,当它的值减为0,再由0减到FFFFH,将产生终止计数信号TC。基地址寄存器每个通道都有一个16位的基地址寄存器,它用来存放对应通道当前地址寄存器的初值,该值是在CPU对DMA控制器进行编程时,与当前地址寄存器的值一起被写入的,即两个寄存器有相同的写入端口地址,编程时写入相同的内容。但基地址寄存器的内容不能被CPU读出,也不能被修改。当执行自动预置操作时,使当前地址寄存器能恢复到初始值。基字计数寄存器每个通道都有一个16位基字计数寄存器。用于存放对应通道当前字计数器的初值,该值也是在CPU对8237A进行编程时与当前字计数器一起写入的,且两者具有相同的写入端口,写入相同的内容。该寄存器的内容也不能被CPU读出,主要用于自动预置操作时使当前字计数器恢复初值。工作方式寄存器每个通道都有一个6位的工作方式寄存器,用于选择DMA的传送方式和类型。工作方式字的格式D7D600请求传送方式01单字节传送方式10数据块传送方式11级联传送方式D50地址增1地址减11D40禁止自动预置1允许自动预置D3D200校验传送写传送0110读传送11非法D1D000选择通道0选择通道10110选择通道211选择通道3命令寄存器命令是一个8位寄存器,用来控制8237A的操作。编程状态时,由CPU对它进行编程,设置8237A的操作方式,复位时将其清除。命令字的格式D70DACK低电平有效1DACK高电平有效D60DREQ低电平有效1DREQ高电平有效D50不扩展写选择D3=1时不起作用1扩展写选择D40固定优先权1循环优先权D30正常时序D0=1时不起作用1压缩时序D20允许8237A操作1禁止8237A操作D10禁止通道0地址保持不变D0=0时不起作用1允许通道0地址保持不变D00禁止存储器到存储器传送1允许存储器到存储器传送请求寄存器在DMA内部有一个4位的请求寄存器,每位对应一个通道。相应请求位置1,对应的通道可产生DMA请求,清0时不产生请求。请求字的格式D7D6D5D4D3无关D20复位请求位1置位请求位D1D000选择通道0选择通道10110选择通道211选择通道3屏蔽寄存器DMA内部有一个4位的屏蔽寄存器,每位对应一个通道。相应屏蔽位置1时,禁止对应通道的DREQ请求进入请求寄存器,屏蔽位复位时,允许DREQ请求。状态寄存器DMA内部的8位状态寄存器用来存放状态信息,供CPU读出。暂存寄存器在存储器到存储器传送时,暂存寄存器用来保存所传送的数据。当传送完毕,暂存寄存器中始终保存着最后一个传送的数据字节,可以用RESET信号清除。软件命令在编程状态,DMA可执行3个附加的特殊软件命令,这3个软件命令不关心数据的具体格式,只要对特定的端口地址进行一次写操作,命令就生效。清除先/后触发器主清命令清除屏蔽寄存器各寄存器对应的端口地址I/O口地址寄存器读写00H通道0当前地址寄存器通道0基地址与当前地址寄存器01H通道0当前字计数寄存器通道0基字计数与当前字计数寄存器02H通道1当前地址寄存器通道1基地址与当前地址寄存器03H通道1当前字计数寄存器通道1基字计数与当前字计数寄存器04H通道2当前地址寄存器通道2基地址与当前地址寄存器05H通道2当前字计数寄存器通道2基字计数与当前字计数寄存器06H通道3当前地址寄存器通道3基地址与当前地址寄存器07H通道3当前字计数寄存器通道3基字计数与当前字计数寄存器08H状态寄存器命令寄存器09H请求寄存器0AH屏蔽寄存器0BH工作方式寄存器0CH清除先/后触发器0DH暂存寄存器主清命令寄存器0EH屏蔽寄存器(清除屏蔽)0FH屏蔽寄存器(主屏蔽字)8237A的时序外设和内存间的DMA数据传送时序8237A有两个主要的工作周期,即空闲周期(IDLECYCLE)和有效周期(ACTIVECYCLE)。每个周期由若干个状态构成。空闲周期、有效周期和扩展写周期空闲周期:系统复位后或无DMA请求时处于空闲周期,这时DMA处于从态有效周期:当外部向DMAC发出DMA请求,可处于有效周期,DMAC处于主态扩展写周期:8237A的编程和应用举例PC/XT机中的DMA的控制逻辑8237A的一般编程方法PC/XT机上的DMA控制器的使用PC/XT机中的DMA的控制逻辑各通道的功能通道0:用于动态RAM的刷新通道1:保留通道2:用于软盘的DMA传送通道3:用于硬盘的DMA传送8237A的编程方法编程步骤:1.输出主清命令,使8237A复位2.写入基地址和现行地址寄存器,确定起始地址3.写入基字和现行字计数器,确定要传送的字节数4.写入方式字,指定工作方式5.写入屏蔽字6.写入命令字(此时DMAC处于待命状态)7.写入请求字8237A的编程举例在某系统中,用一片8237A设计了DMA传输电路,8237A的基地址为0,要求利用它的通道0,从外设输入一个1K字节的数据,传送到内存中6000H开始的区域中,每传送一个字节,地址增1,采用数据块连续传送方式,禁止自动预置,外设的DMA请求信号DREQ和响应信号DACK均为高电平有效。写出初始化程序。