微机接口第09章(DMA).ppt
1,2,第9章 DMA控制接口,教学重点 8237A的工作方式 8237A寄存器组的作用 8237A寄存器组的编程,注意复习第6.5节,3,9.1 DMA控制器8237A,DMA控制器用于存储器的高速数据交换PC/XT使用1片8237APC/AT使用2片8237A(级连)每个8237A芯片有4个DMA通道,即4个独立的DMA控制器,可支持4路DMA操作各DMA通道优先权不同各DMA通道可以分别允许和禁止每个DMA通道有 4 种工作方式一次DMA传送的最大长度可达64KB多个8237A芯片可以级连,以扩展通道数目,4,DMA控制器的双重身份,在CPU控制总线时 DMA控制器为外设芯片,其地址线A0A3、-IOR、-IOW均为输入,地址线,-IOR,-IOW,CPU,DMAC,数据线,5,DMA控制器的双重身份,DMAC控制总线时 DMA控制器为总线控制设备,其地址线A0A3、-IOR、-IOW、-MEMR、-MEMW等均为输出,地址线,-IOR,-IOW,CPU,DMAC,-MEMR,-MEMW,存储器,高速外设,数据线,对外设不寻址,对内存寻址,6,9.1.1 8237A的内部结构和引脚,内部结构和外部引脚都相对比较复杂应用观点,内部主要由两类寄存器组成通道寄存器控制和状态寄存器,首先分类展开外部引脚,7,1.请求与响应信号,DREQ0DREQ3:DMA通道请求。当外设需要请求DMA服务时,将DREQ信号置成有效电平,并要保持到产生响应信号。HRQ:总线请求。8237A输出有效的HRQ高电平,向CPU申请使用系统总线。HLDA:总线响应。8237A接受来自CPU的响应信号HLDA,取得了总线的控制权。DACK0DACK3:DMA通道响应。8237A使请求服务的通道产生相应的DMA响应信号。,-MEMW,-IOR,数据总线,地址总线,输入设备,存储器,DMAC,CPU,HOLD,HLDA,DREQ,DACK,8,2.DMA传送时的控制信号,A0A7:地址线。输出低8位存储器地址。DB0DB7:数据线。输出高8位存储器地址;存贮器与存贮器的传送期间,用于数据传送。ADSTB:地址选通。DMA传送开始时,输出高有效,把在DB0DB7上输出的高8位地址锁存在外部锁存器中(相当于CPU的ALE信号)。AEN:地址允许。输出高有效,将锁存的高8位地址送入系统总线,与芯片此时输出的低8位地址组成16位存储器地址。,9,2.DMA传送时的控制信号(续),-MEMR:存储器读,输出。有效将数据从存储器读出-MEMW:存储器写,输出。有效将数据写入存储器-IOR:I/O读,输出。有效将数据从外设读出-IOW:I/O写,输出。有效将数据写入外设READY:准备好。DMA传送的S3下降沿检测到为低时,插入等待状态Sw,直到READY为高才进入第4个时钟周期S4。-EOP:过程结束,双向。DMA传送过程结束,输出一个低有效脉冲。外部输入低脉冲信号,则终结DMA传送。,10,3.与处理器的接口信号,DB0DB7:数据线。用于8237A与微处理器进行数据交换。A0A3:地址线。用以选择芯片内部寄存器。-CS:片选。低有效时,微处理器与8237A通过数据线通信,主要完成对8237A的编程。-IOR:I/O读,输入。CPU读8237A内部寄存器。-IOW:I/O写,输入。CPU写8237A内部寄存器。CLK:时钟。控制芯片内部操作和数据传输。RESET:复位。使8237A处于初始状态。,11,8237A的两种工作状态,8237A具有两种工作状态空闲周期:作为接口芯片,受CPU的控制有效周期:作为DMA控制器控制系统总线,完成DMA传送(DMA读或DMA写),于是,有些引脚有两种作用,12,8237A引脚的两种作用,13,9.1.2 8237A的工作时序 空闲周期,8237A的所有通道都无DMA请求8237A由微处理器作为一个接口芯片来控制CPU可对8237A编程,或从8237A读取状态8237A不断采样选片信号-CS,该信号有效时,表示CPU要对8237A进行读/写操作8237A不断采样通道的请求输入信号DREQ,该信号有效时,8237A将进入有效周期,进入有效周期,14,9.1.2 8237A的工作时序 有效周期,8237A采样到外设有DMA请求,就脱离空闲周期进入有效周期8237A作为系统总线的控制设备,控制DMA传送操作DMA传送需借用系统总线完成,其控制信号以及工作时序类似CPU总线周期,进入DMA传送时序,15,DMA传送时序,DB0DB7,DACK,ADSTB,HRQ,DREQ,CLK,S1,S0,S0,Si,Si,S3,S2,S4,S3,S2,Si,Si,S4,HLDA,AEN,A0A7,-MEMR(-IOR),-IOW(-MEMW),DMA总线周期,A8A15,A0A7,A0A7,扩展写,滞后写,16,DMA传送时序,S1状态输出16位存储器地址,AEN输出高电平,表示DMA送出的地址有效(CPU的地址无效)S2状态输出DMA响应信号和控制信号,DMA读:-MEMR和-IOW有效DMA写:-IOR和-MEMW有效S3和Sw状态检测数据传送是否完成(READY),决定是否插入等待状态SwS4状态完成数据传送,17,9.1.3 8237A的工作方式,DMA传送方式单字节传送方式数据块传送方式请求传送方式(引脚有效)级连方式,DMA传送类型DMA读DMA写DMA检验,存储器,8237内部寄存器,存储器,经变通后亦可支持存储器到存储器的传送,DMA读,DMA写,18,1.DMA传送单字节方式,每次DMA传送时仅传送一个字节传送一个字节之后,字节数寄存器减1,地址寄存器加1或减1,HRQ变为无效8237A释放系统总线,将控制权还给CPU若传送后使字节数从0减到FFFFH,则终结DMA传送或重新初始化特点:一次传送一个字节,效率略低DMA传送之间CPU有机会重新获取总线控制权,19,1.DMA传送数据块方式,DREQ请求后就连续传送数据,直到字节数寄存器从0减到FFFFH终止计数,或由外部输入有效信号-EOP终结DMA传送DREQ只需维持有效到DACK有效特点:一次请求可传送一个数据块,效率高整个DMA传送期间CPU长时间无法控制总线(无法响应其他DMA请求、无法处理中断等),20,1.DMA传送(引脚)请求方式,DRE引脚信号有效时就连续传送数据DREQ引脚信号无效时就停止传送(8237A释放总线,通道中的地址和字节数保持不变),CPU可继续操作DREQ信号再次有效时,DMA传送将继续进行如果字节数寄存器从0减到FFFFH,或者由外部送来一个有效的信号,将计数将终止特点:DMA操作可由外设利用DREQ信号控制传送的过程,21,1.DMA传送级连方式,用多个8237A级连可扩展DMA通道第2级的HRQ和HLDA信号连到第一级某个通道的DREQ和DACK上第2级芯片的优先权等级与所连通道的优先权相对应级连时,第1级只起优先权网络的作用,实际的操作由第2级芯片完成8237A级连还可由第2级扩展到第3级,22,2.DMA传送类型,DMA读把数据由存储器传送到高速外设由-MEMR有效从存储器读出数据,由-IOW有效把这一数据写入外设DMA写把高速外设输入的数据写入存储器由-IOR有效从外设输入数据,由-MEMW有效把这一数据写入存储器。DMA检验空操作8237A不进行任何检验可对8237A进行DMA校验存储器和I/O控制线保持无效,不进行传送,23,3.存储器到存储器的传送,固定使用通道0及通道1通道0的地址寄存器存源区地址,通道1的地址寄存器存目的区地址,通道1的字节数寄存器存传送的字节数传送通过对通道0的设置,软件启动每传送1字节需用8个时钟周期前4个时钟周期用通道0地址寄存器的地址从源区读数据送入8237A的临时寄存器后4个时钟周期用通道1地址寄存器的地址把临时寄存器中的数据写入目的区,24,4.DMA通道的优先权方式,固定优先权方式优先权固定通道0优先权最高,通道3最低循环优先权方式优先权循环变化最近1次服务的通道在下次循环中变成最低优先权,其他通道的优先权依次轮流,DMA操作不嵌套,25,5.自动初始化方式,DMA过程的结束(-EOP的功能)每当DMA过程结束(计数从0变到FFFFH),则从-EOP引脚将输出有效信号当外部输入有效信号到-EOP引脚,可以终止内部的计数8237A在DMA结束时可选择自动初始化,其具体内容是:用基地址寄存器和基字节数寄存器的内容,使相应的现行寄存器恢复为初始值恢复屏蔽位允许DMA请求这样就为下一次DMA传送做好了准备,26,9.1.4 8237A的寄存器,8237A共有4位地址,可寻址16个片内地址,其中:读操作可访问10个地址写操作可访问16个地址8237A共有10种内部寄存器(有些是16位的),可对它们进行读或写的操作,后面我们将分别描述它们此外,还有3个“软件命令”,这3个命令通过对3个特定地址的写操作来实现,写入内容可任意清除高/低触发器命令 A0A3=1100 写入值任意主清除命令 A0A3=1101 写入值任意清屏蔽寄存器命令 A0A3=1110 写入值任意,全部都用地址A0A3区分,27,8237A中的寄存器,通道03地址寄存器 4(只写,16位)通道03字节数寄存器4(只写,16位)通道03现行地址寄存器4(只读,16位)通道03现行字节数寄存器4(只读,16位)命令寄存器1(只写,8位)请求寄存器1(只写,8位)方式寄存器1(只写,8位)屏蔽寄存器1(只写,8位,有2种写法)状态寄存器1(只读,8位)临时寄存器1(只读,8位),3个写命令清除高/低触发器命令主清除命令清屏蔽寄存器命令,单通道屏蔽字 4 通道屏蔽字,28,1.基地址/现行地址寄存器,现行地址寄存器(动态)保存DMAC寻址存储器的当前地址值每次传送后该寄存器的值可自动加1或减1在空闲周期该寄存器的值可由CPU读出,基地址寄存器(静态)在空闲周期CPU可将地址初值写入基地址寄存器,29,2.基字节数/现行字节数寄存器,现行字节数寄存器保存DMA传送任务中剩余的字节数每次传送后,该寄存器的值将减1在空闲周期,这个寄存器的值可由CPU读出该寄存器的值减至0,再减1(从0减到FFFFH)时,计数将终止(写入FFFFH时实际可传送10000H个数据),基字节数寄存器(静态)在空闲周期,CPU可将计数初值写入基字节数寄存器要传送 N 个字节,其初始值应设为 N-1,30,读/写通道寄存器,通道寄存器包括:基地址寄存器/基字节数寄存器(各4个,只写)现行地址寄存器/现行字节数寄存器(各4个,只读)通道寄存器均为16位,而CPU访问8237A的总线宽度为8位,对通道寄存器的读/写需要操作两次8237A内有一个高/低字节触发器,可控制读、/写通道寄存器的高/低操作顺序,31,高/低触发器,高/低触发器=0时,读/写低字节高/低触发器=1时,读/写高字节软、硬件复位后,高/低触发器=0每次读写通道寄存器,高/低触发器自动改变状态。如果对16位寄存器的操作用两次连续读写进行,就不必清除这个触发器清除高/低触发器命令(对A3A2A1A01100进行一次写操作)将使高/低触发器清0,32,3个通过写特定地址实现的软件命令,清除高/低触发器命令写A3A01100,使高/低触发器清零主清除命令 写地址A3A01101(写什么不论)实现主清与硬件的RESET信号具有相同的功能,其效果:清零高/低字节触发器清零命令、状态、请求、临时寄存器将屏蔽寄存器置为全1(禁止DMA请求)清屏蔽寄存器命令写地址A3A01110(写什么不论),可使4个屏蔽位都清零(允许DMA请求),33,5.方式寄存器(只写),存放相应通道的方式控制字选择某个DMA通道的工作方式其中用最低2位选择哪个DMA通道,请看方式字的格式,34,方式字格式,00 请求模式01 单字节模式10 数据块模式11 级联模式,0 地址增量(加1)1 地址减量(减1),0 禁止自动初始化1 允许自动初始化,00DMA校验01DMA写10DMA读11非法若D7D611,00 通道001 通道110 通道211 通道3,35,6.命令寄存器(只写),存放8237A的命令字设置整个8237A芯片(包括所有通道)的操作方式复位时,命令寄存器被清0设置命令寄存器D21(允许工作)后,才使能8237A的DMAC功能,请看命令字的格式,36,命令字格式,0 DACK低有效1 DACK高有效,0 DREQ高有效1 DREQ低有效,0 滞后写1 扩展写 若D31,0 固定优先权1 循环优先权,0 正常时序1 压缩时序 若D01,0 允许DMAC工作1 禁止DMAC工作,0 允许通道0地址改变1 禁止通道0地址改变 若D00,0 禁止存储器之间传送1 允许存储器之间传送,37,7.请求寄存器(只写),存放软件DMA请求标志除硬件DMA请求外,当工作在数据块传送方式时也可以通过软件发出DMA请求若要进行存贮器到存贮器的传送,则必须由软件请求来启动通道0,请看请求字的格式,38,请求字格式,任意,0 复位1 置位,00 通道001 通道110 通道211 通道3,39,8.屏蔽寄存器(只写),屏蔽寄存器控制各DMA通道是否允许工作(为0允许工作)。注意,各个通道相互独立。有3种访问屏蔽寄存器的方法:单通道屏蔽字只对1个DMA通道的屏蔽位进行设置主屏蔽字可对4个DMA通道屏蔽位同时进行设置清屏蔽寄存器命令使4个屏蔽位都清0(允许工作)复位时,4个通道屏蔽位全部置1(不允许工作)当一个通道的DMA过程结束,如果不是工作在自动初始化方式,则这一通道的屏蔽位将被置1(不允许工作),必须再次编程为允许,才能进行下次DMA传送,请看屏蔽字的格式,40,单通道屏蔽字格式(写),任意,0 清屏蔽位1 置屏蔽位,00 通道001 通道110 通道211 通道3,41,主屏蔽字格式(写),任意,Di0 清通道I屏蔽位Di1 置通道I屏蔽位,42,9.状态寄存器(只读),在空闲周期可由CPU读取低4位反映读命令这个瞬间每个通道是否产生TC(为1,表示该通道传送结束)高4位反映每个通道的DMA请求情况(为1,表示该通道有请求)状态位在复位或被读出后,均被清零,43,10.临时寄存器(只读),在存储器到存储器的传送方式下,通道0从源存储单元读出的数据先保存在临时寄存器该数据后来又被通道1写入到目的存储单元传送完成,临时寄存器只会保留最后一个字节,在空闲周期,CPU可读出临时寄存器的内容复位时,临时寄存器内容被清0,44,9.1.5 8237A的编程,8327A芯片的初始化编程只需写命令寄存器先写主清除命令,进行软件复位再写命令字,命令字将影响全部4个通道,45,9.1.5 8237A的编程(续1),4个DMA通道需要逐一进行初始化:将DMA时要访问的存储器地址写入地址寄存器地址增量方式,则先传低地址的存储单元地址减量方式,则先传高地址的存储单元将本次DMA传送的数据个数写入字节数寄存器(传送N时,写入N-1)确定通道的工作方式,写入方式寄存器写屏蔽寄存器,将该通道屏蔽位清0,允许通道工作,请看实例,46,PC机中8237通道0的任务和连接,D Q CLK,OUT1,+5V,DACK0,连续负脉冲,8253,(15us),DREQ0,8237,通道0,通道1,A0A15,-MEMR,-IOW,刷新DRAM内存,刷新时仅低7位行地址有效每15uS刷新一次,128次后可将DRAM全部刷新一遍,47,DMA通道0被用于DRAM刷新,out 0dh,al;主清命令mov al,0out 08,al;命令字mov al,0;地址初值=0000hout 00,al;通道0的地址寄存器低字节out 00,al;通道0的地址寄存器高字节mov al,0ffh;字节数初值=0ffffh+1out 01,al;通道0的字节数寄存器低字节out 01,al;通道0的字节数寄存器高字节mov al,58h out 0bh,al;通道0方式字mov al,0out 0ah,al;通道0屏蔽字,IBM PC/XT,48,9.1.5 8237A的编程(续2),DMA过程结束(终止计数/TC)可用两种方法来进行判断:查询状态寄存器的低4位用引脚信号 DACK i 去触发中断,49,9.2 8237A的应用,8237A在PC系列机的使用情况DMA写传送DMA设定子程序,50,9.2.1 8237A在IBM PC系列机上的应用,IBM PC/XT机使用一片8237A通道0:动态存贮器DRAM刷新通道1:用户使用或SDLC卡(同步通信)通道2:内存与软盘的高速数据交换通道3:内存与硬盘的高速数据交换IBM PC/AT机采用两片8237ADMAC1包含通道03,支持8位数据传送DMAC2组成通道47,通道57支持16位数据传送,通道4用于级连,51,1.8237A的初始化,8237A初始化写入命令字为0,确定了:DREQ高电平有效、DACK低电平有效,固定优先权(依次为通道07)不进行存储器到存储器的数据传输PC机用DMA控制电路进行DRAM刷新,所以DMA传送不能长时间占用总线(不应超过15s),一般只能使用单字节传送方式在PC系列机上,用户如果使用DMA通道,要注意遵循上述系统要求。除了要禁止8237A工作,用户通常不必操作命令寄存器,52,2.高位地址的形成,DMA传送时的高位地址由“页面寄存器”提供页面寄存器由CPU的输出指令实现写入DMAC1的通道0通道3:8237A提供系统A0A15低16位地址XT机的页面寄存器输出系统A16 A19高4位地址 AT机的页面寄存器输出系统A16 A23高8位地址DMAC2的通道5通道7:系统A0被强迫为逻辑08237A提供系统A1A16的16位地址页面寄存器仅输出A17A23高7位地址,页面寄存器不会自动增减量高位地址在DMA传送过程中不改变,53,9.2.2 DMA写传送接口,CLK,CLK,D0D7,Q,+5V,外设数据,外设DMA请求,74LS374,74LS74,RESET,DRQ1,DACK1,IOR,R,S,D触发器,锁存器,D,54,通道1工作方式,mov al,45h;通道1方式字:单字节写传送,out 0bh,al;地址增量,非自动初始化nop;延时nopout 0ch,al;清高/低触发器命令,DMA写传送,55,通道1起始地址,mov al,0out 02h,al;写入低8位地址到地址寄存器mov al,50hout 02h,al;写入中8位地址到地址寄存器mov al,04hout 83h,al;写入高4位地址到页面寄存器,DMA写传送,56,通道1传送字节数,mov ax,2048-1;AX传送字节数减1out 03h,al;送字节数低8位到字节数寄存器mov al,ahout 03h,al;送字节数高8位到字节数寄存器mov al,01out 0ah,al;单通道屏蔽字:;允许通道1的DMA请求;其他工作,DMA写传送,57,通道1传送结束判断,dmalp:in al,08h;读状态寄存器and al,02h;判断通道1是否传送结束jz dmalp;没有结束,则循环等待;传送结束,处理转换数据,DMA写传送,DMA传送过程结束的判断:软件查询方式,58,9.2.3 DMA设定子程序,系统ROM-BIOS的DMA设定子程序:DMA通道2传送编程软盘的读写利用DMA通道2传送数据软盘I/O功能程序调用(BIOS中断)读软盘写软盘软盘检验等,59,通道2工作方式,push cx;保存CXcli;关中断out 0ch,al;清高/低触发器命令push ax;延时pop axout 0bh,al;将AL中的方式字写入通道2,DMA设定子程序,入口参数,任意,60,形成物理地址,mov ax,esmov cl,4rol ax,cl;段地址左移4位mov ch,al;高位存入CHand al,0f0hadd ax,bx;加偏移地址jnc j33inc ch;物理地址形成j33:push ax;保存AX,DMA设定子程序,入口参数:es:bx=内存地址,61,通道2起始地址,out 04h,al;写入地址寄存器mov al,ahout 04h,almov al,chand al,0fhout 81h,al;写入页面寄存器,DMA设定子程序,62,计算传送字节数,mov ah,dh;取扇区数,计算传送的字节数sub al,al;AX为扇区数乘256shr ax,1;AX为扇区数乘128push ax;暂存AXmov bx,6call GET-PARM;调用参数子程序mov cl,ah;出口参数:AH0/1/2/3pop ax;恢复AXshl ax,cl;AX为DMA传送的字节数,DMA设定子程序,入口参数,63,通道2传送字节数,dec ax;字节数减1push ax;保存out 05h,al;写入字节数寄存器mov al,ahout 05h,alsti;开中断,DMA设定子程序,64,设置出口参数,pop cx;弹出传送的字节数pop ax;弹出物理地址的低16位地址add ax,cx;相加,根据结果建立标志CFpop cx;恢复CXmov al,02h;允许通道2进行DMA响应out 0ah,alret;返回,DMA设定子程序,DMA传送过程结束的判断:硬件中断方式,65,第9章教学要求,了解8237A引脚特点和工作时序掌握8237A的各种工作方式理解8237A内部寄存器的作用和编程了解8237A在IBM PC系列机上的应用情况,66,作业,习题9P219 9.1 9.2 9.3 9.6 9.9,67,跨越物理段(换页)示例,4 0000H,64KB 物理段,5 0000H,6 0000H,64KB 物理段,64KB,40F00H,50F00H,此处跨越物理段(换页),