资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,可编程,DMA,控制器,A,8.1,概述,Inte18237A,是一种有,40,个引脚的高性能可编程,DMA,控制,器,采用主频,5MHz,的,8237A,传送速度可达到,1.6MB/,秒。,8237A,的主要功能为:,(,1,)在一个,8237A,芯片中有,4,个独立的,DMA,通道,每个通道均可独立地传送数据,可控制,4,个,I/O,外设进行,DMA,传送。,(,2,)每个通道的,DMA,请求都可以分别允许和禁止。每个通道的,DMA,请求有不同的优先权,优先权可以是固定的,也可以是循环的。,(,3,)每个通道均有,64KB,的寻址和计数能力,即一次,DMA,传送的数据最大长度可达,64KB,。,8.1,概述,(,4,)可以在存储器与外设间进行数据传送,也可以在存储器的两个区域之间进行传送。,(,5,),8237A,有四种,DMA,传送方式,分别为单字节传送、数据块传送、请求传送方式和级连方式。,(,6,),8237A,芯片有一条结束处理的输入信号,允许外界用此输入端结束,DMA,传送或重新初始化。,(,7,),8237A,可以级连,扩展更多的通道。,(,8,),40,脚双列直插式,,+5V,工作电源。,8.1,概述,8237A,有两种不同的工作状态,分别为从态方式和主态方式。,(,1,)在,DMA,控制器未取得总线控制权时必须由,CPU,对,DMA,控制器进行编程,以确定通道的选择、数据传送的方式和类,型、内存单元起始地址、地址是递增还是递减及要传送的总,字节数等,,CPU,也可以读取,DMA,控制总线的状态。这时,,CPU,处于主控状态,而,DMA,控制器就和一般的,I/O,芯片一样,是系,统总线的从设备,这种工作方式称为从态方式。,(,2,)当,DMA,控制器取得总线控制权后,系统就完全在它的,控制下,使,I/O,设备和存储之间或存储器与存储器之间进行直,接的数据传送,这种工作方式称为主态方式。,8.2 8237A,的内部结构及引脚,8-2-1 8237A,的内部结构,8237A,的内部结构如图,8-1,所示,主要由时序与控制,逻辑、优先级编码电路、数据和地址缓冲器组、命令控,制逻辑和内部寄存器等组成。,8.2 8237A,的内部结构及引脚,图,8-1 8237A,的内部结构图,8.2 8237A,的内部结构及引脚,8-2-2 8237A,的引脚,8237A,采用双列直,插式,有,40,个引脚,其,引脚排列如图,8-2,所示,。,8.3 8237A,工作方式,8.3.1,单字节传送方式,在这种工作方式下,每进行一次,DMA,操作,只传送一个字节的数据。,8237A,每完成一个字节的传送,计数器便自动减,1,,地址寄存器的值加,1,或减,1,。接着,,8237A,释放系统总线,把控制权交还给,CPU,。但是,8237A,在释放总线后,会立即对,DREQ,端进行测试,一旦,DREQ,有效,则,8237A,会立即发送总线请求,在获得总线控制权后,又成为总线主模块而进行,DMA,传送。,特点:,一次,DMA,传送至传送,1,个字节的数据,占用,1,个总线周期,然后释放系统总线。因此,这种方式又被称为总线周期窃取方式。,8.3.2,块传送方式,在这种工作方式下,一旦开始传送,就会一个字节一,个字节的进行下去,直到把整个数据块全部传送完毕,才,交出系统总线控制权。,特点:,数据传输效率高,,DREQ,有效电平只要保持到,DACK,有效,就能传送完整批数据,但整个数据块传送期,间,,CPU,失去总线控制权,因而别的,DMA,请求也被禁止。,8.3.3,请求传送方式,这种工作方式每传送一个字节后,,8237A,都对,DREQ,端进行测试,询问其是否有效。如果检测到,DREQ,端变为无效电平,则立刻,“,挂起,”,,停止,DMA,传送,但并不释放系统总线,测试过程仍然进行。当检测到,DREQ,端变为有效电平时,就在原来的基础上继续进行传送。由于请求传送方式在传送完一个字节的数据之后就询问,DREQ,信号是否有效,故又称询问传送方式。,特点:,DREQ,信号一直有效时,则连续传送数据,只有当字节计数器由,1,减为,FFFFH,,或外部送来有效的信号,或,DREQ,变为无效时才结束,DMA,传送过程。,8.3.4,级联传送方式,在这种方式下,可以把,一片,8237A,(称为主片)和,几片,8237A,(称为从片)进,行级联,以便扩充,DMA,通道。,图,8-3,所示为二级,8237A,级联时的情况,图,8-3,二级,8237A,级联,8.4 8237A,内部寄存器功能及格式,8237A,的内部可编程寄存器主要有,10,个,如下表所示。,名 称,位数,数 量,功能,当前地址寄存器,16,4,(每通道一个),保存在,DMA,传送期间的地址值,可读写,当前字节计数寄存器,16,4,(每通道一个),寄存当前字节数,初始值比实际值少,1,,可读写,基地址寄存器,16,4,(每通道一个),寄存当前地址寄存器的初始值,只能写,基字节数寄存器,16,4,(每通道一个),保存相应通道当前字(节)数的计数器的初值,工作方式寄存器,8,4,(每通道一个),寄存相应通道的方式控制字,由编程写入,命令寄存器,8,1,(,4,个通道共用一个),寄存,CPU,发送的控制命令,状态寄存器,8,1,(,4,个通道共用一个),存放,8237A,各通道的现行状态,请求寄存器,4,1,(每通道,1,位),寄存各通道的,DMA,请求信号,屏蔽寄存器,4,1,(每通道,1,位),用于选择允许或禁止各通道的,DMA,请求信号,暂存寄存器,8,1,(每通道,1,位),暂存传输数据,仅用于存储器到存储器的传输,8.5 8237A,的编程及应用,8237A,进行初始化编程的步骤如下:,(,1,)输出主清除命令,使,8237A,处于复位状态,以接收新的命令;,(,2,)写入工作方式寄存器,以确定,8237A,工作方式和传送类型;,(,3,)写入命令寄存器,以控制,8237A,的工作;,(,4,)根据所选通道,输入相应通道当前地址寄存器和基地址寄存器的初始值;,(,5,)输入当前字节计数器和基字节寄存器的初始值;,(,6,)写入屏蔽寄存器;,(,7,)写入请求寄存器,便可由软件,DMA,传送。否则,经过(,1,),(,6,)步编程后,由通道,DREQ,启动,DMA,传送过程。,【,例,8.1】,在某一个系统中,用一片,8237A,设计了,DMA,传输电路,,8237A,的基地址为,00H,。要求利用它的通道,0,,从外设(如磁盘)输入一个,1KB,的数据块,传送到内存中,6000H,开始的区域中,每传送一个字节,地址增,1,,采用数据块连续传送方式,禁止自动预置,外设的,DMA,请求信号,DREQ,和响应信号,DACK,均为高电平有效。初始化,8237A,的程序如下:,DMA EQU 00H,;,8237A,的基地址为,00H,;输出主清除命令,OUT DMA+0DH,,,AL,;发总清除命令,;将基地址,6000H,写入通道,0,基地址和当前地址寄存器,分两次进行,MOV AX,,,6000H,;基地址和当前地址寄存器,OUT DMA+00H,,,AL,;先写入低,8,位地址,MOV AL,,,AH,OUT DMA+00H,,,AL,;后写入高,8,位地址,;把要传送的总字节数,1K=400H,减,1,后,送到基字计数器和当前字计数器,MOV AX,,,0400H,;总字节数,DEC AX,;总字节数减,1,OUT DMA+01H,,,AL,;先写入字节数的低,8,位,MOV AL,,,AH,OUT DMA+01H,,,AL,;后写入字节数的高,8,位,;写入方式字:数据块传送,地址增量,禁止自动预置,写传送,选择通道,MOV AL,,,10000100B,;方式字,OUT DMA+0BH,,,AL,;写入方式字,;写入屏蔽字:通道,0,屏蔽位清,0,MOV AL,,,00H,;屏蔽字,OUT DMA+0AH,,,AL,;写入,8237A,;写入命令字:,DACK,和,DREQ,为高电平,固定优先级,非存储器间传送,MOV AL,,,10000000B,;命令字,OUT DMA+08H,,,AL,;写入,8237A,;写入请求字:通道,0,产生请求,MOV AL,,,04H,;请求字,OUT DMA+09H,,,AL,;将请求字写入,8237A,,用软件启动,8237A,3.8237A,的应用,在,PC/XT,机中,用一片,8237A-5,构成,DMA,控制电路形成,4,个,DMA,通道,提供数据宽度为,8,位的,DMA,传输。使用固定优先级,所以通道,0,的优先级最高,通道,3,最低。这,4,个,DMA,通道的功能分配如下:,通道,0,用于动态,RAM,的刷新,通道,1,为用户保留,通道,2,用于软盘,DMA,传送,通道,3,用于硬盘,DMA,传送,在,PC/XT,机进行软盘或硬盘,DMA,传输时,先要对,8237A-5,进行编程。下面是,ROM BIOS,中的一段程序,名为,DMA_SETUP,,位于首地址为,FEEC8H,的内存中。它被读软盘、写软盘和软盘校验程序等调用,用来向,8237A-5,输入所要读写数据的,20,位首地址和字计数器初始值。调用前要求的入口参数是:,AL=DMA,方式字(读,=46H,,写,=4AH,,校验,=42H,)。,DH=,要传送的扇区个数。每个扇区的字节数基数为,128,,实际由磁盘驱动器的规格而定,可能是,128,,,256,,,512,或,1024,个,也就是说可能是,128,的,1,,,2,,,4,,,8,倍,表示成,2,的,N,次方,,N,分别为,0,、,1,、,2,、,3,。,N,存放在磁盘基值区,DISK_BASE,的第,03,号单元中,可由它和,DH,中的扇区数计算出实际要传送的总字节数。,ES,:,BX=,所读写数据的内存首地址(段地址:偏移量),DMA_SETUP PROC NEAR,PUSH CX,;保护,CX,的值,CLI,;关中断,OUT DMA+0CH,,,AL,;清除先,/,后触发器,PUSH AX,;延时,满足,8237A I/O,定时要求,POP AX,OUT DMA+0BH,,,AL,;将,AL,中的方式字写入方式寄存器,;计算,20,位物理地址,结果的最高,4,位放在,CH,中,低,16,位放入,AX,MOV AX,,,ES,;,AX,段基地址,MOV CL,,,4,;循环次数,ROL AX,,,CL,;,AX,循环左移,4,位,MOV CH,,,AL,;,AX,的低,8,位暂存入,CH,AND AL,,,0F0H,;,AX,的最低,4,位清零,MOV AL,AH,控制器进行编程,以确定通道的选择、数据传送的方式和类,8237A的基地址为00H,控制下,使I/O设备和存储之间或存储器与存储器之间进行直,由于请求传送方式在传送完一个字节的数据之后就询问DREQ信号是否有效,故又称询问传送方式。,将最高4位地址预置到页面寄存器中,寄存当前地址寄存器的初始值,只能写,这种工作方式每传送一个字节后,8237A都对DREQ端进行测试,询问其是否有效。,8237A进行初始化编程的步骤如下:,DMA EQU 00H ;,OUT DMA+00H,AL ;,OUT DMA+01H,AL ;,OUT DMA+0BH,AL ;,OUT DMA+01H,AL ;,将基地址6000H写入通道0基地址和当前地址寄存器,分两次进行,通道1 为用户保留,器,采用主频5MHz的8237A传送速度可达到1.,ADD AX,,,BX,;加上偏移量,形成,16,位地址(,A15A0,),JNC RLL,;无进位,转移,INC CH,;有进位,最高,4,位加,1,。至此形成了,20,位物理地址,低,16,位在,;,AX,中,最高,4,位在,CH,的低,4,位中,RLL,:,PUSH AX,;保存,16,位起始地址,;将,16,位地址送到通道,2,基址和当前地址寄存器中,OUT DMA+4,,,AL,;先写低字节,MOV AL,,,AH,OUT DMA+4,,,AL,;后写高字节,;将最高,4,位地址预置到页面寄存器中,MOV AL,,,CH,;最高,4,位地址,AND AL,,,0FH,;截低,4,位,OUT 81H,,,AL,;置入页面寄存器(通道,2,,软盘,DMA,传送),MOV AH,,,DH,;取传输的扇区数送,AH,SUB AL,,,AL,;,AL,清零后,使,AX=256,扇区数,SHR AX,,,1,;将,AX,内容除以,2,后,,AX=128,扇区数,;调用取软盘参数子程序,要求入口参数:,BX=,字节索引值(,03,号单元),2,PUSH AX,;保存,AX,的值,MOV BX,,,6,;,BX=,字节索引值,2,CALL GET_PARM,;调用取参数子程序,保存相应通道当前字(节)数的计数器的初值,OUT DMA+0CH,AL ;,1】在某一个系统中,用一片8237A设计了DMA传输电路,8237A的基地址为00H。,寄存当前字节数,初始值比实际值少1,可读写,如果检测到DREQ端变为无效电平,则立刻“挂起”,停止DMA传送,但并不释放系统总线,测试过程仍然进行。,由于请求传送方式在传送完一个字节的数据之后就询问DREQ信号是否有效,故又称询问传送方式。,保存在DMA传送期间的地址值,可读写,因此,这种方式又被称为总线周期窃取方式。,寄存当前字节数,初始值比实际值少1,可读写,每个通道的DMA请求有不同的优先权,优先权可以是固定的,也可以是循环的。,当检测到DREQ端变为有效电平时,就在原来的基础上继续进行传送。,PUSH AX ;,寄存各通道的DMA请求信号,插式,有40个引脚,其,在PC/XT机进行软盘或硬盘DMA传输时,先要对8237A-5进行编程。,清除通道2(软盘DMA传送)的屏蔽位,将16位地址送到通道2基址和当前地址寄存器中,;调用后结果,,AH=N,,,N,可以是,0,,,1,,,2,或,3,,它表示所选软盘每扇区的字节数:,0,或,;,128,,,1,为,256,,,2,为,512,,,3,为,1024,MOV CL,,,AH,;基数值,N,由,AH,送,CL,POP AX,;弹出,“,128,扇区数,”,送,AX,SHL AX,,,CL,;左移后,,AXAXN,DEC AX,;传输总字节数减,1,PUSH AX,;保存此值(即基字计数值),;将减,1,后的字节数送通道,2,基字和当前字计数器,OUT DMA+5,,,AL,;先送高字节,MOV AL,,,AH,OUT DMA+5,,,AL,;后送高字节,STI,;开中断,POP CX,;恢复计数值(基字计数值),POP AX,;恢复低,16,位起始地址,;将基地址和基字计数器值相加,判别是否有进位,若有,表示超出,64K,,出错,;因为,DMA,传送过程中,页寄存器的值是不变的,,8237A,只允许在,64K,范围内变化,ADD AX,,,CX,;相加,根据结果建立进位位,CF,POP CX,;恢复进入子程序时保护的,CX,值,MOV AL,,,02H,OUT DMA+0AH,,,AL,;清除通道,2,(软盘,DMA,传送)的屏蔽位,RET,;返回,若,CF=1,,则,64K,溢出,应减少传送的扇区数,字组,;的传送要分块进行,DMA_SETUP ENDP,本章内容到此结束,谢谢各位,!,谢谢观看,
展开阅读全文