- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
DMA的应用举例
DMA的应用举例
1.8237A在系统中的典型连接
我们注意到8237A只能输出A0~A15共16位地址信号,这对于一般8位CPU构成的系统来说是比较方便的,因为大多数8位机的寻址范围就是64KB。而在8086/8088系统中,系统的寻址范围是1MB,地址线有20条,即A0~A19。为了能够在8086/8088系统中使用8237A来实现DMA,需要用硬件提供一组4位的页寄存器。
通道0、1、2、3各有一个4位的页寄存器。在进行DMA传送之前,这些页寄存器可利用I/O地址来装入和读出。当进行DMA传送时,DMAC将A0~A15放在系统总线上,同时页寄存器把A16~A19也放在系统总线上,形成A0~A19这20位地址信号实现DMA传送。其地址产生如图所示。
图是8237A在PC机中的连接简图。利用74LS138译码器产生8237A的CS,8237A的接口地址可定为000H~00FH (注:在CS译码时XA4未用)。
8237A利用页寄存器74LS670、三态锁存器74LS373和三态741S244形成系统总线的地址信号A0~A19。8237的IOR、IOW、MEMR、MEMW接到74LS245上,当芯片8237A空闲时,CPU可对其编程,加控制信号到8237A。而在DMA工作周期,8237A的控制信号又会形成系统总线的控制信号。
2. 8237A应用举例
(1)用8237A实现存储器到存储器传输8237A与80x86处理器相连时,使用地址锁存器作为地址锁存。假设将内存地址00000H~13FFFH的内容传输到14000H~17FFFH中,用DMA控制传输。其控制程序如下,其中CX寄存器为计数,SI、DI分别作为源、目的寄存器,ES段寄存器为数据地址。
LATCHB EQU 10H
CLEAR_F EQU 7CH
CH0_A EQU 70H
CH1_A EQU 72H
CH1_C EQU 73H
MODE EQU 7BH
CMMD EQU 78H
MASKS EQU 7FH
REQ EQU 79H
STATUS EQU 78H
TRANS PROC FAR USE AX
MOV AX,ES
MOV AL,AH
SHR AL,4
OUT LATCHB,AL
OUT CLEAR_F,AL
MOV AX,ES
SHL AX,4
ADD AX,SI
OUT CH0_A,AL
MOV AL,AH
OUT CH0_A,AL
MOV AX,ES
SHL AX,4
ADD AX,DI
OUT CH1_A,AL
MOV AX,CX
DEC AX
OUT CH1_C,AL
MOV AL,AH
OUT CH1_C,AL
MOV AL,88H
OUT MODE,AL
MOV AL,85H
OUT MODE,AL
MOV AL,1
OUT CMMD,AL
MOV AL,0EH
OUT MASKS,AL
MOV AL,4
OUT REQ,AL
REPEAT
IN AL,STATUS
RET
TRANS ENDP
在存储器到存储器传输的DMA编程控制中,先将地址送地址锁存器,然后清除先/后触发器,接着再对DMA通道作初始编程。通道0作为源、通道1作为目的,传输字计数器值减“1”后装入字计数寄存器。然后,对每一个通道的屏蔽寄存器编程,命令寄存器选择块传输,通道0被使用,DMA请求软件初始化。在过程返回前,还要对状态寄存器测试是否已计数结束,以防止再传输其他的数据。另外,在程序中使用了MASM6.0的重复执行语句REPEAT-UNTIL。
(2)编程举例
若要利用通道0,由外设(磁盘)输入32KB的一个数据块,传送至内存8000H开始的区域(增量传送),采用块连传送的方式,传送完不自动初始化,外设的DREQ和DACK都为高电平有效。
要编程首先要确定端口地址。地址的低四位用以区分8237A的内部寄存器,高四位地址A7~A4经译后,连至选片端CS,假定选中时高4位为5。
方式控制字
2) 屏蔽控制字
3) 命令字
初始化程序如下:
OUT 5DH,AL ;输出主清除命令
MOV AL,00H
OUT 50H,AL ;输出基和现行地址的低8位
MOV AL ,80H
OUT 50H,AL ;输出基和现行地址的高8位
MOV AL,00H
OUT 51H,AL
MOV AL,80H
O
原创力文档


文档评论(0)