《DMA与DMA控制器.ppt》由会员分享,可在线阅读,更多相关《DMA与DMA控制器.ppt(23页珍藏版)》请在三一办公上搜索。
1、DMA与DMA控制器,DMA(Direct Memory Access)的概念DMA方式不用处理器干预完成M与I/O间数据传送。DMA期间系统总线由其它主模块控制(驱动)控制总线的主模块要提供系统的地址及控制信号。DMA控制器与处理器配合可实现系统的DMA功能。,地址总线,HRQ DREQDMACHLDA DACK,总线请求,总线响应,HOLD HLDA,CPU,DMA请求,DMA响应,I/O设备,控制总线,数据总线,DMA与DMA控制器(续),2.DMA系统组成及工作过程 DMA系统组成,DMA与DMA控制器(续),2.DMA系统组成及工作过程 DMA工作过程 I/O向DMAC DMAC向
2、CPU响应 DMAC向 发请求 CPU发请求 DMAC请求 I/O发响应,DMA传送结束,DMA传送进行,DMAC发出控制信号,DMAC发出内存地址,允许 DMA,DMA请求?,DMAC发BUS请求,CPU响应DMA放弃BUS,DMAC控制传一个字节,块结束否?,放弃总线中断请求,N,DMA放总线,N,Y,字节传送,Y,DMA传送方式,允许 DMA,DMA请求?,DMAC发BUS请求,CPU 响应 DMA放弃 BUS,DMAC控制传一个字节,块结束否?,放总线中断请求,DMA请求?,N,Y,Y,N,块传送,DMA传送方式,允许 DMA,DMA请求?,DMAC发出BUS请求,CPU响应DMA放弃
3、总线,DMAC 控制传一个字节,块结束否?,放总线中断请求,Y,DMA请求?,Y,放总线,N,N,Y,随机请求DEMAND REQUEST,DMA传送方式,控制 REG.8,HRQ,Count Temp.16,状态 REG.8,暂存器 8,HLDA,REN,MODE REG.6,REQ,1,FLAG,1,MASK,FLAG,当前ADDR.REG.16,基地址 REG.16,可读,非读,当前字节计数器.16,基字节数REG.16,通道0,通道1,通道2,通道3,HOLD,HLDA,CLOCK,AEN,关闭CPU地址锁存器,EN#,STB,锁存器,ADSTB,DB7:DB0,IO/M#,CS#,A
4、DDR.译 码,DATA SUB,A15A8,A7A0,地址总线,A3A0,A7A4,IOR#,MEMR#,IOW#,MEMW#,READY,RESET,DREQ0,DACK0,DREQ1,DACK1,DREQ2,DREQ3,DACK2,DACK3,EOP#,3.Intel 8237A可编程DMA控制器框图,DMA与DMA控制器(续),3.Intel 8237A可编程DMA控制器框图(续)8237A主从两面性:作为DMAC,8237A是可控制总线的主模块。作为I/O芯片,8237A可被处理器读写。运行时注意8237A主-从地址的变化。8237A组成说明:8237A有四个独立通道:每个通道有16
5、位地址REG,16位字节数计数器,6位模式REG。四个通道公用控制寄存器,状态寄存器,屏蔽寄存器,请求标志寄存器及暂存器,各寄存器均为8位。,DMA与DMA控制器(续),3.Intel 8237A可编程DMA控制器框图(续)8237A组成说明:基地址寄存器:放DMA传送RAM地址初值。当前地址寄存器:DMA传送时内容变化,可读。基字节数寄存器:DMA传送的总字节数。当前字节数寄存器:DMA传送时内容变化,可读。,DMA与DMA控制器(续),3.Intel 8237A可编程DMA控制器框图(续)8237A引线说明:DB7-DB0:双向数据总线。8237A为从模块时被处理器编程或读状态,DB7-D
6、B0作为数据线,传输数据或命令字。8237A为主模块时DB7-DB0输出地址A15-A8,在 M M传送操作时经DB7-DB0,将M数据送8237A暂存器。A3-A4:地址线,从模块时为输入,处理器寻址8237A;主模块时输出低压位地址。,DMA与DMA控制器(续),A7-A4:地址线,主模块时输出A7-A4。CS#:片选,从模块时处理器用来寻址8237A。IOR#,IOW#:I/O读写控制,双向。8237A在从模块时为输入,在主模块时为输出。AEN,ADSTB输出:8位地址锁存允许及选通。在主模块时允许外部锁存器锁存8237A的高8位地址。MEMR#,MEMW:输出,存储器读写控制,主模块时
7、送存储器。READY:输入,准备就绪,主模块时控制总线周期的长度,与慢速设备同步。,DMA与DMA控制器(续),RESET:输入,复位信号,复位时屏幕寄存器置1,其它寄存器置0。EOP#:双向。输出时,表明内部通道传送结束;输入时,表明外部强迫DMA传送停止。DREQ0-DREQ3:I/O设备DMA请求输入信号。DACK0-DACK3:输出DMA请求的响应。HRQ:8237A向处理器发出的总线请求信号。HLDA:处理器发给8237A的总线请求响应信号。,通道,REGISTER,操作,CS#10R#10W#,A3 A2 A1 A0,内 F/F,DB0DB7,0,0,0,1,1,1,1,基/现行地
8、址,基/现行字计数,现行地址,现行字计数,基/现行地址,现行地址,基/现行字计数,现行字计数,写,写,写,写,读,读,读,读,0 1 0 0 1 0,0 0 10 0 1,0 1 0 0 1 0,0 0 1 0 0 1,0 1 00 1 0,0 0 10 0 1,0 0 10 0 1,0 1 00 1 0,0 0 0 00 0 0 0,0 0 0 00 0 0 0,0 0 0 10 0 0 1,0 0 0 10 0 0 1,0 0 1 00 0 1 0,0 0 1 00 0 1 0,0 0 1 10 0 1 1,0 0 1 10 0 1 1,0 1,0 1,01,01,01,01,01,01,
9、A0 A7 A8 A15,A0 A7 A8 A15,W0 W7W8 W15,W0 W7W8 W15,W0 W7W8 W15,W0 W7W8 W15,A0 A7A8 A15,A0 A7A8 A15,8237A 字计数器与地址寄存器端口号与对应操作(1),8237A编程地址、字计数器端口分配,0,通道,REGISTER,操作,CS#10R#10W#,A3 A2 A1 A0,内 F/F,DB0DB7,2,2,3,3,3,3,基/现行地址,基/现行字计数,现行地址,现行字计数,基/现行地址,现行地址,基/现行字计数,现行字计数,写,写,写,写,读,读,读,读,0 1 0 0 1 0,0 0 10 0
10、1,0 1 0 0 1 0,0 0 1 0 0 1,0 1 00 1 0,0 0 10 0 1,0 0 10 0 1,0 1 00 1 0,0 1 0 00 1 0 0,0 1 0 00 1 0 0,0 1 0 10 1 0 1,0 1 0 10 1 0 1,0 1 1 00 1 1 0,0 1 1 00 1 1 0,0 1 1 10 1 1 1,0 1 1 10 1 1 1,0 1,0 1,01,01,01,01,01,01,A0 A7 A8 A15,A0 A7 A8 A15,W0 W7W8 W15,W0 W7W8 W15,W0 W7W8 W15,W0 W7W8 W15,A0 A7A8 A1
11、5,A0 A7A8 A15,8237A 字计数器与地址寄存器端口号与对应操作(2),2,2,操作命令与端口号对应关系表,A3 A2 A1 A0 IOR#IOW#操 作 十六进制,1 0 0 0 0 1 读状态 REG.81 0 0 0 1 0 写命令/控制 REG.,1 0 0 1 0 1 非法 91 0 0 1 1 0 写DMA请求标志 REG.,1 0 1 0 0 1 非法 A1 0 1 0 1 0 写屏蔽标志 REG.,1 0 1 1 0 1 非法 B1 0 1 1 1 0 写模式 REG.,1 1 0 0 0 1 非法 C1 1 0 0 1 0 清除字节指针 F/F,1 1 0 1 0
12、 1 读暂存器 D 1 1 0 1 1 0 复位(总清),1 1 1 0 0 1 非法 E1 1 1 0 1 0 清除/屏蔽标志 REG.,1 1 1 1 0 1 非法 F1 1 1 1 1 0 写所有屏蔽 REG,单一位,三个软件命令不依赖DB上数据,所有位,8237A 模式 REG.格式(写B号):工作方式设定,D7,D6,D5 D4,D3,D2,D1,D0,模式选择,随机请求传输模式 0 0,单字节传输模式,0,0,1,1,1,1,非传输模式,级联传输模式,地址增量选择,地址加1 0,地址减1 1,自动预置功能选择,禁止 0,允许 1,通道选择,0 选 0#Channel,0,0,1,1
13、,1,0,1,选 1#Channel,选 2#Channel,选 3#Channel,传输类型选择,0 0 校验传输,0,0,1,1,1,1,X X,写传输,读传输,非 法,D7 D6=11,8237A 控制/命令REG.格式(写8号):硬件设置与运行控制8237A硬件设置:,D7,D6,D5 D4,D3,D2,D1,D0,DACK有效电平,低电平有效 0,高电平有效,1,0,1,DREQ有效电平,高电平有效,扩展写,MEM.,0,1,1,0,0,1,Enable 8237A,低电平有效,不扩展写,0,扩展写,1,D3=1,X,优先级类型,0,1,固定优先级,循环优先级,MEM.传输,禁止,允
14、许,Channel 0 地址保持不变,X,Disable,Enable,D0=0,8237A 工作,Disable 8237A,时序类型,0,1,X,普通时序,压缩时序,D0=1,8237A DMA 请求REG.格式(写9号),D7,D6,D3,D2,D1,D0,D5,D4,运行控制,不用,0,清除DMA请求位,建立DMA请求位,1,0,0,Channel 0,0,0,1,1,1,1,Channel 1,Channel 2,Channel 3,8237A 控制/命令REG.格式(写9号):硬件设置与运行控制8237A运行控制命令字:软件DMA请求,8237A 屏蔽 REG.格式(单一位)(写A
15、号),D7,D6,D3,D2,D1,D0,D5,D4,运行控制,不用,0,清除 MASK 位,建立 MASK 位,1,0,0,Channel 0,0,0,1,1,1,1,Channel 1,Channel 2,Channel 3,通道选择,8237A 控制/命令REG.格式(写A号):硬件设置与运行控制8237A运行控制命令字:设屏蔽字(单通道),8237A 全4位 MASK REG.格式(写F号),D7,D6,D3,D2,D1,D0,D5,D4,运行控制,不用,0,清 Channel 3 M 位,设 Channel 3 M 位,1,0,0,1,1,0,清 Channel 2 M 位,1,设
16、Channel 2 M 位,清 Channel 0 Mask 位,设 Channel 0 Mask 位,清 Channel 1 Mask 位,设 Channel 1 Mask 位,8237A 控制/命令REG.格式(写F号):硬件设置与运行控制8237A运行控制命令字:设屏蔽字(四通道),DMA与DMA控制器(续),8237A编程(续)关于3个软件命令:与端口号有关,与DB线上的内容无关。写C号地址:清除字节指针F/F,使将装入顺序为先LSB后MSB。写D号地址:总清除命令,屏蔽REG.为1,其它REG.为0,软件复位。写E号地址,清除屏蔽标志。,编程过程,HLDA无效时8237A接受P编程,
17、不管HRQ是否有效。编程前禁止8237A:发关闭8237A命令,向8号端口(硬件设置)写04H,或对通道进行屏蔽。用软命令发出总清(Master Clear)操作:向0DH端口执行一次写操作。向有关通道送地址值,计数值,模式字。送硬件设置命令字,打开8237A。去除屏蔽准备接收DMA请求。,8237A 状态 REG.格式(读8号),D7,D6,D3,D2,D1,D0,D5,D4,通道 3 有DMA请求 1,1:通道 0计数结束,通道 2有DMA请求 1,通道 1 有DMA请求 1,通道 0 有DMA请求 1,1:通道 1计数结束,1:通道 2计数结束,1:通道 3计数结束,状态字,8237A编程序(续)8237A状态监测:可监测运行状态。,