主讲:焦明海Email:mhjiao@cc.neu.edu.cn计算机硬件技术基础主讲:焦明海东北大学计算中心主讲:焦明海Email:mhjiao@cc.neu.edu.cn第八章DMA控制器§8.1DMA控制器功能§8.2DMA控制器8237A主讲:焦明海Email:mhjiao@cc.neu.edu.cn§8.1DMA控制器功能DMA具有以下功能:1.工作要受CPU的管理。它和其它I/O接口一样是CPU的管理对象。2.具有总线主设备(MASTER)的功能。一旦DMA请求并得到了总线控制权,它就成了总线主设备,它和CPU一样控制信息在总线上的传输—DMA传输。在DMA传送期间,DMAC将读取源口数据,并写到目的口。当一次传输或若干次传送完毕,DMAC就把总线控制权移交给CPU,它又变成从设备。主讲:焦明海Email:mhjiao@cc.neu.edu.cnCPU对8237A的编程初始化工作是通过8237A的端口进行的。8237A的端口是用低4位地址线A3A2A1A0编址,共有16个端口地址。16个端口地址分为以下两部分:(1)00H~07H分配给4个通道的相应的16位寄存器。8237A的寄存器都是16位的,而8237A只有8位数据线,读/写操作均分两次进行。(2)08H~0FH分配给其他寄存器。包括3条不使用数据总线而只利用端口地址进行操作的命令。§8.2DMA控制器8237A主讲:焦明海Email:mhjiao@cc.neu.edu.cn§8.2.18237A的内部结构DB7~DB0DREQ3~DREQ0减1计数器计数暂存器(16)减1/加1计数器地址暂存器(16)读缓冲器基地址寄存器(16)基字节数计数器(16)读写缓冲器当前地址寄存器(16)当前字节数计数器(16)命令(8)屏蔽(4)请求(4)方式(6x4)状态(8)暂存器(8)I/O缓冲器输出缓冲器命令控制逻辑I/O缓冲器写缓冲器读缓冲器时序和控制逻辑优先权编码逻辑A3~A0A7~A4EOPRESETCSREADYCLOCKAENADSTBMEMRMEMWIORIOWDACK3~DACK0HRQHLDA主讲:焦明海Email:mhjiao@cc.neu.edu.cn§8.2.28237A内部端口地址分配A3A2A1A0寄存器说明0000通道0写:基地址寄存器和当前地址寄存器读:当前地址寄存器0001通道0写:基字节计数器和当前字节计数器读:当前字节计数器0010通道1写:基地址寄存器和当前地址寄存器读:当前地址寄存器0011通道1写:基字节计数器和当前字节计数器读:当前字节计数器0100通道2写:基地址寄存器和当前地址寄存器读:当前地址寄存器0101通道2写:基字节计数器和当前字节计数器读:当前字节计数器0110通道3写:基地址寄存器和当前地址寄存器读:当前地址寄存器0111通道3写:基字节计数器和当前字节计数器读:当前字节计数器主讲:焦明海Email:mhjiao@cc.neu.edu.cnA3A2A1A0寄存器说明1000写:命令寄存器读:状态寄存器1001写:请求寄存器读:非法1010(A)写:一位屏蔽字寄存器读:非法1011(B)写:方式字寄存器读:非法1100(C)写:清除F触发器读:非法1101(D)写:8237A总清读:暂存寄存器1110(E)写:清除屏蔽寄存器读:非法1111(F)写:四位屏蔽字寄存器读:非法§8.2.28237A内部端口地址分配主讲:焦明海Email:mhjiao@cc.neu.edu.cn§8.2.3DMA控制器8237A的编程方式字传送方式D7D6地址增减D5自动初始化D4传送类型D3D2通道选择D1D0D7D600请求方式01单字节方式10数据块方式11级联方式0:递增1:递减0:禁止1:允许D3D200DMA校验01DMA写10DMA读11无效D1D000通道001通道110通道211通道3主讲:焦明海Email:mhjiao@cc.neu.edu.cn命令字0:允许1:禁止0:正常1:压缩DACK极性D7D6优先级编码D5读/写时序D4工作允许D3D2存储器间传送D1D0通道0保持写入选择DREQ极性0:固定1:循环0:滞后写入(先读后写)1:扩展写入(同时读写)0:低电平有效1:高电平有效0:低电平有效1:高电平有效0:允许1:禁止0:允许1:禁止§8.2.3DMA控制器8237A的编程主讲:焦明海Email:mhjiao@cc.neu.edu.cn1位屏蔽字屏蔽D2D1D0通道选择D7D6D5D4D3不用0:允许1:禁止DMAD1D000通道001通道110通道211通道3§8.2.3DMA控制器8237A的编程主讲:焦明海Email:mhjiao@cc.neu.edu.cn1.控制命令1)方式字写入端口地址0BH,主要功能:选择传送方式和传送类型,设置自动初始化方式和地址增量方向。2)命令字写入端口地址08H,主要功能:选择DREQ、DACK有效极性,读/写时序,优先级编码方式等。3)请求字写入端口地址09H,主要功能:发生软件DMA请求。4)屏蔽字写入端口地址0AH或0FH,主要功能:允许或禁止通道的DMA请求。5)状态字从端口地址08H读出,主要功能:反映通道DMA请求状态和是否有TC信号。§8.2.3DMA控制器8237A的编程主讲:焦明海Email:mhjiao@cc.neu.edu.cn2.清除命令清除命令不需通过数据总线。执行输出指令时,AL的内容可任意设置。1)清除字节指针命令(写入端口地址0CH).8237A数据线是8位的,所以16位数据分两次读/写,而且使用同一端口地址。2)主清除命令(写入端口地址0DH).使屏蔽寄存器各位置“1”外,其他各寄存器均被清“0”.3)清除屏蔽寄存器命令(写入端口地址0EH),主要功能:将4个通道的屏蔽位清除。§8.2.3DMA控制器8237A的编程主讲:焦明海Email:mhjiao@cc.neu.edu.cn3.8237A的编程步骤:1)CPU发主清除命令。2)写入基地址及当前地址的值。3)写入基字节数和当前字节数的初值。4)写入方式字。5)写入屏蔽字。6)写入命令字。7)写入请求字。§8.2.3DMA控制器8237A的编程主讲:焦明海Email:mhjiao@cc.neu.edu.cn例:8237A数据块传送。设在某8086/8088系统中,用8237A通道1将内存1000H单元开始的24KB数据转存到硬盘中(1000H即为基地址初值),采用数据块方式传送,地址增量方式,只传送一便,设DREQ和DACK低电平有效,当A15~A4为000000000111时选中8237A.要求设计8237A通道1的初始化程序。分析:1)端口地址。A3~A0由8237A芯片内部译码,编码范围为0000~1111,再与A15~A4组合,则端口地址范围是0070H~007FH。2)传送字节数。24KB对应的16进制数为6000H,写入通道字节数计数器的值应为:6000H-1=5FFFH。§8.2.4DMA控制器8237A的编程实例主讲:焦明海Email:mhjiao@cc.neu.edu.cn分析:3)方式字。按题目要求,控制字的组合为:10001001B.4)一位屏蔽字。按题要求,一位屏蔽字组合为:00000001B.5)命令字。按题目要求,命令字的组合为01000000B.6)初始化程序如下:START:MOVDX,007DH;发生清除命令OUTDX,AL;AL内容任意设置MOVDX,0072H;通道1§8.2.4DMA控制器8237A的编程实例主讲:焦明海Email:mhjiao@cc.neu.edu.cn6)初始化程序如下(续上):MOVAL,00HOUTDX,AL;送基地址和当前地址低8位MOVAL,10HOUTDX,AL;送基地址和当前地址高8位MOVDX,0073HMOVAL,0FFH;送基值和当前计数值低8位OUTDX,ALMOVAL,5FH;送基值和当前计数值高8位OUTDX,AL§8.2.4DMA控制器8237A的编程实例主讲:焦明海Email:mhjiao@cc.neu.edu.cn6)初始化程序如下(续上):MOVDX,007BHMOVAL,89H;写入方式控制字OUTDX,AL;DMA读传送MOVDX,007AHMOVAL,01H;写入屏蔽字OUTDX,ALMOVDX,0078HMOVAL,40H;写入命令控制字OUTDX,AL§8.2.4DMA控制器8237A的编程实例