欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    可编程DMA控制器8237A.ppt

    • 资源ID:6555596       资源大小:575.50KB        全文页数:63页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    可编程DMA控制器8237A.ppt

    第9章 可编程DMA控制器8237A,9.1 8237A的引脚与内部结构项目1:利用8237进行存贮器到存贮器数据传送9.1.2 知识讲解9.2 8237A的控制字及应用项目2:用8237A从接口向RAM输入数据并显示 9.2.2 知识讲解9.3 项目扩展与工程应用9.3.1 项目3:DMA进行存贮器到存贮器传送数据9.3.2 项目4:DMA进行存贮器到I/O数据传送思考题与练习题,9.1 8237A的引脚与内部结构,1项目要求与目的(1)项目要求:利用8086CPU控制8237A可编程DMA控制器,实现存贮器之间的DMA数据传送。(2)项目目的:了解8237A DMA控制器基本原理。掌握8237A DMA控制器的使用方法。学习用DMA进行存贮器到存贮器传送数据的编程方法。,2项目电路连接与说明(1)项目电路连接:做MEM=MEM数据传送时无需用户联线,系统自动做总线切换,本程序将RAM中的一段数据用DMA方式复制到另一地址。(2)项目说明:实验过程中不用联线,程序运行状态通过查看存贮器、寄存器内容来观察。要传送存储器的起始地址为8100H:0000H,传送字节数2000,8237的端口地址为00H0FH,8237通道1的页面寄存器端口地址为83H,则利用8237通道1进行存储器的数据传送。对程序进行编译连接后,使光标指向最后一条MOV指令处,点击菜单栏调试下拉菜单的执行到光标所在行,使程序执行到此处。查看运行后8237寄存器值、存贮器的内容,点击菜单栏查看的数据区窗口中的代码段数据窗口,查看8100:0000到8100:0800中数据与8100:0100到8100:0900中数据一致(要注意各实验系统为用户提供的RAM区间)。,3项目电路原理框图DMA进行存贮器到存贮器传送数据电路框图如图9-1所示。电路由8086CPU芯片、8237A芯片、RAM等组成。,图9-1 DMA进行存贮器到存贮器传送数据电路框图,4项目程序设计(1)程序流程图DMA进行存贮器到存贮器传送数据程序流程图如图9-2所示。,图9-2 DMA进行存贮器到存贮器传送数据程序流程图,(2)程序清单DMA进行存贮器到存贮器传送数据程序清单如下所示。,DMA EQU 00HDATA SEGMENTPB DB?DATA ENDSSTACK SEGMENT STACKSTA DW 50 DUP(0)TOP EQU LENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AL,04HOUT DMA+0DH,AL;复位命令,使先后触发器清0MOV AL,08H,OUT 83H,AL;置通道1页面寄存器 MOV AL,00H OUT DMA+02H,AL;写地址低8位 MOV AL,00H OUT DMA+02H,AL;写地址高8位 MOV AX,2000;置传送字节数OUT DMA+03H,AL;先写入低8位 MOV AL,AH;OUT DMA+03H,AL;后写入高8位MOV AL,88HOUT DMA+0BH,AL;后通道0模式字MOV AL,85H OUT DMA+0BH,AL;后通道1模式字MOV AL,83H OUT DMA+08H,AL;写命令字,允许通道0地址保持MOV AL,0EH OUT DMA+0FH,AL;通道0解除屏蔽MOV AL,04H OUT DMA+09H,AL;通道0软件请求,启动DMA传送MOV AH,4CH;返回DOSINT 21H CODE ENDS END START,9.1.2 知识讲解,1.DMA传送的基本概念直接存储器存取DMA是一种外设与存储器或者存储器与存储器之间直接传送数据的方法,适用于需要大量数据高速传送的场合,通常在微机系统中,图像显示、磁盘存取、磁盘间的数据传送和高速的数据采集系统均可采用DMA数据交换技术。DMA传送示意图如图9-3所示,在数据传送过程中,DMA控制器可以获得总线控制权,控制高速I/O设备(如磁盘)和存储器之间直接进行数据传送,不需要CPU直接参与。用来控制DMA传送的硬件控制电路就是DMA控制器(简称DMAC)。,图9-3 DMA传送示意图图9-3 DMA数据传送过程如下:I/O接口向DMAC发出DMA请求。如果DMAC未被屏蔽,则在接到DMA请求后,向CPU发出总线请求,希望CPU让出数据总线、地址总线和控制总线的控制权,由DMAC控制。CPU执行完现行的总线周期,如果CPU同意让出总线控制权,向DMAC发出响应请求的回答信号,并且脱离三总线处于等待状态。DMAC在收到总线响应信号后,向I/O接口发DMA响应信号,并由DMAC接管三总线控制权。进行DMA传送。DMAC给出传送数据的内存地址,传送的字节数,及发出/信号;在DMA控制下,每传送一个字节,地址寄存器加1,字节计数器减1,如此循环,直至计数器之值为0。DMA读操作:读存储器写外设。DMA写操作:读外设写存储器。,DMA传送结束,DMAC撤除总线请求信号,CPU重新控制总线,恢复CPU的工作。Intel8237A是一种高性能的可编程DMA控制器,可以用软件对芯片进行编程,使它能在多种方式下工作。一个芯片中有4个独立的DMA通道。每个通道的DMA请求都可以允许和禁止。每个通道的DMA请求有不同的优先权。优先权可以是固定的,也可以是循环的,由初始化编程决定。每个通道一次传送的最大长度不能超过64KB。可以用级联的方法来扩展通道数。8237A DMAC有四个通道,每个通道都可用于DMA数据传送。PC机系统占用了8237A通道0、通道2、通道3,分别用于刷新动态存储器、软盘控制器与存储器间交换数据、硬盘控制器与存储器交换数据,只有通道1未使用,供用户使用。,2.8237A引脚与内部结构(1)8237A引脚8237A为40个引脚的双列直插式封装的芯片如图9-4(a)所示,引脚功能如下。BD7BD0(21脚23脚、26脚30脚):8位数据线,双向,三态。作用有三:第一是当8237A空闲,即CPU控制总线时,BD7BD0作为双向数据线,由CPU读/写8237A内部寄存器;第二是当8237A控制总线时,BD7BD0输出被访问存储器单元的高8位地址信号A15A8,并由ADSTB信号将这些地址信息存入地址锁存器。第三是在进行DMA操作时,读周期经DB7DB0线把源存储器的数据送入数据缓冲器保存,在写周期再把数据缓冲器保存的数据经DB7DB0传送到目的存储器。A3A0(35脚32脚):低8位地址线的低4位,双向,三态。当CPU控制总线时,8237作为一般I/O接口,A3A0为输入,作为选中8237A内部寄存器的地址选择线。当8237A控制总线时,A3A0为输出,作为选中存储器的低4位地址。,A7A4(40脚37脚):低8位地址线的高4位,输出,三态。当8237A控制总线时,A7A4作为被访问存储器单元的地址信号A7A4。(11脚):片选信号,输入,低电平有效。当8237A空闲时,仅作为一个I/O设备时,为8237A的片选信号。当该信号有效时,CPU向8237A写入工作方式控制字、操作方式控制字,或读入状态寄存器中的内容。(1脚):I/O读信号,双向,三态,低电平有效。当CPU控制总线时,为输入信号,CPU读8237A内部寄存器的状态信息;当8237A控制总线时,为输出信号,与配合实现DMA写操作。(2脚):I/O写信号,双向,三态,低电平有效。当CPU控制总线时,为输入信号,CPU利用它把数据写入8237A内部寄存器;当8237A控制总线时,为输出信号,与配合实现DMA读操作。,CLK(12脚):时钟信号,输入。8237A的时钟频率为3MHz,用于控制芯片内部定时和数据传送速率。RESET(2脚):复位信号,输入,高电平有效。当芯片被复位时,屏蔽寄存器被置1,其余寄存器置0,8237A处于空闲状态,即4个通道的DMA请求被禁止,仅作为一般I/O设备。READY(6脚):准备好信号,输入,高电平有效。当进行DMA操作,存储器或外部设备的速度较慢,来不及接收或发送数据时,外部电路使READY 为低电平,这时DMA控制器会在总线传送周期,自动插入等待周期,直到READY变成高电平。AEN(9脚):地址允许信号,输出,高电平有效。访问DMA时AEN1,访问外设时AEN0。当AEN1时,它把外部地址锁存器中的高8位地址送入地址总线,与8237A芯片输出的低8位地址组成16位地址。ADSTB(8脚):地址选通信号,输出,高电平有效。当ADSTB1时,将保存在8237A缓冲器的高8位地址信号传送到片外地址锁存器。,图9-4 8237A引脚与内部结构图,(3脚):存储器读信号,输出,三态,低电平有效。在DMA操作时,作为从选定的存储单元读出数据的控制信号。(4脚):存储器写信号,输出,三态,低电平有效。在DMA操作时,作为向选定的存储单元写入数据的控制信号。(36脚):DMA传送结束信号,双向,低电平有效。任一通道DMA传送结束时,从此端子发出有效信号,此外,当外部从端输入有效信号时,也能强迫DMAC终止传送过程。DREQ3DREQ0(16脚19脚):DMA请求信号,输入,有效电平可由工作方式控制字确定。他们分别是连接到四个通道的外设,向DMA控制器请求DMA操作的请求信号。该信号要保持有效电平一直到8237A控制器作出DMA应答信号DACK。当8237A被复位时,他们被初始化为高电平有效。HRQ(10脚):请求占用总线信号,输出,高电平有效。该信号是DMAC接到某个通道的DMA请求信号后,且该通道请求未被屏蔽情况下,DMAC向CPU发出请求占用总线的信号。HLDA(7脚):同意占用总线信号,输入,高电平有效。此信号是CPU发给DMAC,同意DMAC器占用总线控制权请求的应答信号。8237A接收到HLDA后,即可进行DMA操作。DACK3DACK0(15脚、14脚、24脚、25脚):DMA响应信号,输出,它的有效电平可由工作方式控制字确定。该信号是由8237A控制器发给四个通道中申请DMA操作的通道的应答信号。VCC(31脚):电源+5V。GND(20脚):接地。NC(5脚):空(没有用)。,(2)内部结构8237A的内部结构如图9-4(b)所示,图中通道部分只画出了 一个通道的情况。8237A的内部结构由控制逻辑单元、优先级编码单元、缓冲器和内部寄存器四个基本部分组成,功能介绍如下。控制逻辑单元控制逻辑单元的主要功能是根据CPU传送来的有关DMAC的工作方式控制字和操作方式控制字,在定时控制下,产生DMA请求信号、DMA传送以及发出DMA结束的信号。优先级编码单元它用来裁决各通道的优先级顺序,解决多个通道同时请求DMA服务时可能出现的优先级竞争问题。优先级顺序是指通道0优先级最高,其次是通道1,通道3的优先级最低。循环四个通道的优先级不断变化,即本次循环执行DMA操作的通道,到下一次循环为优先级最低。不论优先级别高还是低,只要某个通道正在进行DMA操作,其他通道无论级别高低,均不能打断当前的操作。当前操作结束后,再根据级别的高低,响应下一个通道的DMA操作申请。缓冲器组包括两个I/O缓冲器1、I/O缓冲器2和一个输出缓冲器,通过这三个缓冲器把8237A的数据线、地址线和CPU的系统总线相连。,I/O缓冲器1:8位、双向、三态地址/数据缓冲器,作为8位数据BD7BD0输入/输出和高8位地址A15A8输出缓冲。I/O缓冲器2:4位地址缓冲器,作为地址A3A0输出缓冲。输出缓冲器:4位地址缓冲器,作为地址A7A4输出缓冲。内部寄存器8237A内部寄存器共有12个,如表9-1所示。分为两大类:一类是控制寄存器或状态寄存器;另一类是地址寄存器和字节计数器。CPU对8237A内部寄存器的访问是在8237A作为一般的I/O设备时,通过A3A0的地址译码选择相应的寄存器。具体操作是:用A3区分上述两类寄存器,A3=1选择第一类寄存器,A3=0选择第二类寄存器。对于第一类寄存器,有两个寄存器共用一个端口地址,这种情况,用和来区分。,表9-1 8237A的内部寄存器,表9-2 8237A内部寄存器寻址及软件命令,从8237A内部寄存器寻址及软件命令表9-2可以看出,A31选择第一类寄存器,A30选择第二类寄存器。对于第一类寄存器A2A0用来指明选择哪一个寄存器,若有两个寄存器共用一个端口,用读写信号区分。对于第二类寄存器用A2、A1来区分选择哪一个通道,用A0来区别是选择地址寄存器还是字节计数器。现只对基地址寄存器、当前地址寄存器、基字节数寄存器和当前字节计数器的作用进行阐述,其他寄存器的作用将在控制字设置中讲解。基地址寄存器、当前地址寄存器这两个寄存器都用来存放DMA操作时将要访问的存储器的地址,是16位的寄存器,每个通道都有。基地址寄存器的内容是初始化编程时由CPU写入,整个DMA操作期间不再变化。若在工作方式控制字中设置D4位等于1,采用自动预置方式,那么DMA操作结束,自动将基地址寄存器的内容写入当前地址寄存器。该寄存器的内容只能写入,不能读出。当前地址寄存器的作用是在DMA操作期间,通过加1或减1的方法不断修改访问存储器的地址指针,指出当前正访问的存储器地址。当前地址寄存器地址值的输入方法,可在初始化时写入,也可在DMA操作结束,由基地址寄存器写入。该寄存器的内容可通过执行两次输入指令读入CPU中。基字节数寄存器、当前字节计数器这两个寄存器都用来存放进行DMA操作时传送的字节数,是16位寄存器,每个通道都有。,基地址寄存器的内容是初始化编程时由CPU写入,整个DMA操作期间不再变化。若在工作方式控制字中设置D4位等于1,采用自动预置方式,那么DMA操作结束,自动将基地址寄存器的内容写入当前地址寄存器。该寄存器的内容只能写入,不能读出。当前地址寄存器的作用是在DMA操作期间,通过加1或减1的方法不断修改访问存储器的地址指针,指出当前正访问的存储器地址。当前地址寄存器地址值的输入方法,可在初始化时写入,也可在DMA操作结束,由基地址寄存器写入。该寄存器的内容可通过执行两次输入指令读入CPU中。基字节数寄存器、当前字节计数器这两个寄存器都用来存放进行DMA操作时传送的字节数,是16位寄存器,每个通道都有。基字节数寄存器的数据是在初始化时写入的,整个DMA操作中不变,若将工作方式控制字中的D4位置1,采用自动预置方式,那么DMA操作结束,自动将基字节数寄存器的内容写入当前字节计数器。该寄存器的内容只能写入,不能读出。当前字节计数器的作用是在DMA传送操作期间,每传送一个字节,字节计数器减1,当由0减到FFFFH时,产生DMA操作结束信号。当前字节计数器的内容可在初始化命令写入,也可通过在DMA传送结束时由基字节计数寄存器写入。该寄存器的内容既能写入也能通过执行两次输入指令读入CPU。,9.2 8237A的控制字及应用,项目2:用8237A从接口向RAM输入数据并显示 1项目要求与目的(1)项目要求:利用8086CPU控制8237A可编程DMA控制器,实现从接口向存贮器输入数据。要求每发生一次DMA请求,就从接口电路(74LS244)向内存传送一个字节数据,存入从6000H:0H开始的10个字节的缓冲区,然后将该缓冲区的内容送PC机屏幕上显示。(2)项目目的:掌握8237A DMA控制器的使用方法。学习用DMA控制器实现从接口向存贮器输入数据的编程方法。2项目电路连接与说明(1)项目电路连接:做I/O=MEM数据传送时用户可以根据如图9-5所示联线,电路需要增加一个74LS244芯片。(2)项目说明:本程序将I/O口中的数据用DMA方式读到内存,然后将该内存的内容送PC机屏幕上显示。因此需要编写8237的初始化程序及有关控制程序。8237的端口地址为00H0FH,通道1页面寄存器的端口地址为83H.3项目电路原理框图 用8237从接口向RAM输入数据并显示电路框图如图9-5所示。电路由8086CPU芯片、8237A芯片、RAM、74LS244芯片和开关K0K7等组成。,图9-5 用8237从接口向RAM输入数据并显示电路框图,。,4项目程序设计(1)程序流程图用8237从接口向RAM输入数据并显示程序流程图如图9-6所示。,图9-6 DMA进行存贮器到I/O间传送数据程序流程图,(2)程序清单DMA进行存贮器到I/O间传送数据程序清单如下所示。DMA EQU 00HDATA SEGMENTIN-data DB 10 DUP(20H),0DH,0AH,24HDATA ENDSEXTRA SEGMENT AT 6000HBUF-data DB 13 DUP(?)EXTRA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:EXTRASTART:MOV AX,DATA MOV DS,AXMOV AX,EXTRA MOV ES,AX LEA SI,IN-data,LEA DI,BUF-data CLD;方向标志DF=0 MOV CX,13 REP MOVSB;清缓冲区 OUT DMA+0DH,AL;复位命令,使先后触发器清0 MOV AL,06H;置通道1页面寄存器 OUT 83H,AL MOV AL,00H OUT DMA+02H,AL;写入地址低8位MOV AL,00H OUT DMA+02H,AL;写入地址高8位 MOV AX,10;置传送字节数 OUT DMA+03H,AL;先写入低8位MOV AL,AH;置传送字节数 OUT DMA+03H,AL;后写入高8位MOV AL,55H OUT DMA+0BH,AL;输出模式字MOV AL,00H,OUT DMA+08H,AL;输出命令字MOV AL,01H OUT DMA+0AH,AL;清除通道1屏蔽位,启动DMA传送DISP:LEA DX,BUF-data MOV AH,09H INT 21H;显示字符串 MOV AH,01H INT 16H JZ DISP;无键按下继续显示 MOV AH,4CH INT 21H;有键按下,返回DOSCODE ENDSEND START,9.2.2 知识讲解,18237A的的控制字(1)工作方式控制字8237A每个通道都有一个工作方式控制字,工作方式控制字为8位,通过编程的方法写入模式寄存器。模式寄存器为6位,共4个,每个通道1个。工作方式控制字的格式及定义如图9-7所示,各位的说明如下。D1、D0:通道选择位。根据D1、D0位的值决定工作方式控制字写入到哪一个通道的模式寄存器中。由于每个通道内的模式寄存器为6位,所以8位的方式控制字写入6位的模式寄存器时,只将D7D2位写入,D1、D0位不写入。D3、D2:传送类型选择位。8237A有三种传送类型,分别是DMA读传送、DMA写传送和DMA校验传送。三种传送类型是根据数据传送的方向定义的,由D3、D2两位决定。DMA读传送:把存储器的数据读出传送至外设,操作时若有效则从存储器读出数据,若有效则把数据写入外设。DMA写传送:把外设输入的数据写至存储器中,操作时若有效则从外设读出数据,若有效,则把数据写入存储器。DMA校验传送:这种传送方式实际上不传送数据,主要用来对DMA读传送或DMA写传送功能进行校验。在校验传送时8237A保留对系统总线的控制权,但不产生对I/O接口和存储器的读写信号,只产生地址信号,计数器进行减1计数,响应信号。,图9-7 8237A工作方式控制字的格式,D4:自动预置功能选择位。当D4=1时,允许自动预置,每当DMA传送结束,基地址寄存器自动将保存的存储器数据区首地址传送给当前地址寄存器,基字节计数器自动将保存的传送数据字节传送给当前字节寄存器,进入下一轮数据传输过程。当D4=0时,禁止自动预置。需要注意的是,如果一个通道被设置为自动预置方式,那么这个通道的对应屏蔽位应置0。D5:地址增减选择位。当D5=1时,每传送一个字节,当前地址寄存器的内容减1;当D5=0时,每传送一个字节,当前地址寄存器的内容加1。D7、D6:传送方式选择位。8237A的每个通道有4种传送方式,即单字节传送方式、数据块传送方式、请求传送方式和多片级联方式。工作方式由工作方式字中的D7、D6位决定。单字节传送方式:8237A控制器每响应一次DMA申请,只传输一个字节的数据,传送一个字节之后,当前字节计数器的值减1,当前地址寄存器的数加1(或减1),8237A释放系统总线,总线控制权交给CPU。8237A释放控制权后,马上对DMA请求DREQ进行测试,若DREQ有效,则再次发出总线请求信号,进入下一个字节的传送,如此循环,直至计数值为0,结束DMA传送。单字节传送方式的特点是:一次传送一个字节,效率较低,但它会保证在两次DMA传送之间,CPU有机会获得总线控制权,执行一次CPU总线周期。,数据块传送方式:在这种传送方式下,8237A一旦获得总线控制权,就会连续地传送数据块,直到计数器由0减到FFFFH,结束DMA传送,让出总线控制权。数据块传送方式的特点:一次请求传送一个数据块,效率高,但在整个DMA传送期间,CPU长时间无法控制总线(无法响应其他DMA请求,无法处理其他中断等)。请求传送方式:请求传送方式与数据块传送方式类似,也是一种连续传送数据的方式。只是在请求传送方式下,每传送一个字节就要检测一次DREQ信号是否有效,若有效,则继续传送下一个字节;若无效,则停止数据传送,结束DMA过程,让出总线控制权。但DMA的传送现场全部保持(当前地址寄存器和当前字节计数器的值),待请求信号DREQ再次有效时,再次申请总线控制权,申请成功后,8237A接着原来的计数值和地址继续进行数据传送,直到当前字节计数器减到0或由外设产生信号时,终止DMA传送,释放总线控制权。请求传送方式的特点是:DMA操作可由外设利用DREQ信号控制数据传送的过程。级联传送方式:当一片8237A通道不够用时,可通过多片级联的方式增加DMA通道,第二级的HRQ和HLDA信号连到第一级某个通道的DREQ和DACK上;第二级芯片的优先权等级与所连通道的优先权相对应;第一级只起优先权网络的作用,实际的操作由第二级芯片完成;还可由第二级扩展到第三级等。级联方式的特点是:可扩展多个DMA通道。,例如,使用8237A的通道0,把内存中的数据输出到外设,禁止自动初始化,存储器地址自动加1,单字节传送方式,设置工作方式控制字的指令如下:MOV AL,01001000B OUT 0BH,AL;写入模式寄存器(2)操作命令控制字操作命令控制字在初始化时写入8位命令寄存器,4个通道共用,各位格式及定义如图9-8所示,各位的说明如下。,图9-8 8237的操作命令控制字,D0:允许或禁止存储器到存储器的传送操作。当D0=1时,允许存储器到存储器的传送;当D0=0时,禁止存储器到存储器的传送。D1:设定在存储器到存储器传送过程中,源地址保持不变或改变。当D1=0时,传送过程中源地址是变化的,当D=1时,整个传送过程中,源地址保持不变。当D0=0时,不允许存储器到存储器传送,此时D1位无意义。D2:类似一个开关位。当D20时,启动8237A工作,当D21时,停止8237A工作。D3:时序类型选择位。D3=0时为正常时序,每进行一次DMA传送一般用3个时钟周期;D3=1时为压缩时序,在大多数情况下仅用2个时钟周期完成一次DMA传送,仅当A15A8发生变化时需用3个时钟周期。D4:优先权方式选择位。D4=0,采用固定优先级;D4=1,采用循环优先级。固定优先级方式,其优先级次序是通道0优先级最高,通道1和通道2的优先级依次降低,通道3的优先级最低。循环优先级方式,通道的优先级依次循环,假如最初优先级次序0123,当通道2执行DMA操作后,优先级次序变为3012。由于采用了循环优先级方式,避免了某一通道独占总线。DMA方式的优先级不要同中断的优先级混淆。中断方式的优先级,高级中断源可以打断低级中断源的中断服务。DMA方式的优先级当低级通道进行DMA操作时,不允许高级通道中止现行操作。,D5:D5位是在D3位为0时,即采用普通时序工作时,才有意义。该位表示或信号的长度。D51表示或信号要扩展两个时钟周期以上。D6:选择DMA请求信号DREQ的有效电平。D7:选择DMA请求信号DACK的有效电平。例如,DREQ和DACK都为低电平有效,正常写命令信号,固定优先权,正常时序,启动8237A工作,禁止通道0地址保持不变,禁止存储器到存储器传送,设置8237A命令寄存器。指令如下:MOV AL,00000000BOUT 08H,AL;写命令寄存器(查表9-2的地址)(3)DMA请求控制字DMA请求既可以由硬件发出,通过DREQ引脚引入,也可以由软件产生。软件方法是通过CPU设置DMA请求控制字的方法,来设置或撤消DMA请求。请求标志的设置是通过D1、D0来指明通道号,D2位用来表示是否对相应通道设置DMA请求。当D2=1时,使相应通道的DMA请求触发器置1,产生DMA请求,当D2=0时,清除该通道的DMA请求。其格式如图9-9所示。,图9-9 8237的DMA请求控制字,例如,设置8237A的通道0,发软件请求DREQ。指令如下:MOV AL,00000100B OUT 09H,AL;写入请求寄存器(查表9-2的地址),(4)屏蔽控制字屏蔽控制字是记录各个通道的DMA请求是否允许的控制字。该控制字保存在屏蔽寄存器内,各位的定义如图9-10所示。屏蔽字的格式有两种,分别如图9-10(a)、(b)所示,其中图(a)是单通道的屏蔽字,只能完成单个通道的屏蔽设置,其中D1、D0指出通道号,当D2=1时,对相应的通道设置DMA屏蔽,当D2=0时,则清除该通道的屏蔽字。图(b)是综合屏蔽字,可以同时完成对4条通道的屏蔽设置,当D3D0某一位为1时,可以对对应的通道屏蔽位置1,使其设置为屏蔽。,图9-10 8237的屏蔽控制字的格式,例如,禁止8237A通道3的DMA请求,设置单屏蔽位。指令如下:MOV AL,00000111BOUT 0AH,AL;写单屏蔽位(查表9-2的地址)例如,禁止8237A通道0、通道2的DMA请求;允许通道1、通道3的DMA请求,设置所有屏蔽位。指令如下:MOV AL,00000101B OUT 0FH,AL;写所有屏蔽位(查表9-2的地址)(5)状态字状态字反映了8237A当前4条通道DMA操作是否结束,是否有DMA请求。其中低4位反映了读命令这个瞬间每条通道是否计数结束,高4位反映了每条通道有没有DMA请求,它的状态字的格式如图9-11所示。,图9-11 8237的状态字格式,例如,读取8237A当前的DMA状态,指令如下:IN AL,08H;把状态寄存器中的状态读入AL(查表9-2的地址)读入的状态信息在AL中,可以根据AL中各二进制位的状态了解8237A各通道当前的DMA工作状态。,2.8237A的初始化编程及应用,(1)初始化编程的步骤输出主清除命令。写入基地址与当前地址寄存器。写入基字节与当前字节计数寄存器。写入工作方式寄存器。写入屏蔽寄存器。写入命令寄存器。写入请求寄存器。若用软件方式发DMA请求,则应向指定通道写入命令字,即进行的编程后,就可以开始DMA传送的过程。若无软件请求,则在完成的编程后,由通道的DREQ启动DMA传送过程。,(2)编程应用【例9-1】若选用通道1,由外设(磁盘)输入16KB的数据块,传送至28000H开始的区域(按增量传送)采用数据块传送方式,传送完后不自动初始化,外设的DREQ和DACK都为高电平有效。要编程首先要确定端口地址,地址的低4位寻址8237的内部寄存器。解:先确定各控制字 工作方式控制字为10000101B=85H。D1D0为01,选通道1;D3D2为01,DMA写操作(I/OM);D4位为0,表示传送结束禁止自动初始化;D5位为0,表示选择地址加1;D7D6为10,选择数据块传送方式。屏蔽控制字为00000000B=00H。D7D4位无用设置为0;D3D0位设置为0,表示将4个通道的屏蔽位复位,即都可以产生DMA请求。若要屏蔽某个通道的DREQ请求,则相应位设置为1。操作命令控制字为10100000B=A0H。D7设置为1,表示DACK1高电平有效;D6设置为0,表示DREQ1高电平有效;D5设置为1,表示扩展写;D4设置为0,表示选用固定优先权;D2设置为0,表示允许8237操作;D0为0,表示非存储器到存储器传送。,初始化程序如下所示。OUT 0DH,AL;输出主清除命令MOV AL,00H OUT 02H,AL;输出当前和基地址的低8位MOV AL,80H OUT 02H,AL;输出当前和基地址的高8位MOV AX,16384OUT 03H,AL;输出当前和基字节计数初值低8位MOV AL,AHOUT 03H,AL;输出当前和基字节计数初值高8位MOV AL,85HOUT 0BH,AL;输出工作方式控制字MOV AL,00HOUT 0AH,AL;输出屏蔽字MOV AL,0A0HOUT 08H,AL;输出操作命令控制字MOV AX,DS;取数据段地址MOV CL,4;移位次数送CLROL AX,CL;循环左移4次MOV CH,AL;将DS的高4位存入CH寄存器中AND AL,0F0H;屏蔽DS的低4位MOV BX,OFFSET BUFFER;获得缓冲区首地址偏移量ADD AX,BX;计算16位物理地址INC CH;有进位DS高4位加1PUSH AX;保存低16位起始地址,【例9-2】利用8237A编写从源存储器传送1000个字节数据到目标存储器的程序。把一个数据块从存储器一个区传送到另一个区是通过通道0和通道1完成的。MOV AL,04H;关闭8237A,操作方式控制字D2=1MOVDX,DMA+08H;设置命令寄存器的端口地址OUTDX,ALMOVDX,DMA+0DH;设置总清命令寄存器的地址OUTDX,AL;总清MOVDX,DMA+00H;设置通道0地址寄存器端口地址MOVAX,SOURCE;设置源数据块首地址OUTDX,AL;设置地址寄存器低字节MOVAL,AH;将源数据块首地址高字节送ALOUT DX,AL;设置地址寄存器高字节MOVDX,DMA+02H;设置通道1地址寄存器端口地址MOVAX,DST;设置目标数据块的首地址,OUTDX,AL;目标数据块首地址送通道1的地址寄存器MOVAL,AHOUTDX,ALMOVDX,DMA+03H;设置通道1字节计数器的端口地址MOVAX,1000;设置计数器值OUTDX,AL;传送源数据块字节数给通道1的字节数计数器MOVAL,AHOUTDX,ALMOVDX,DMA+0CH;设置先/后触发器端地址OUTDX,AL;清先/后触发器MOVDX,DMA+0BH;设置模式寄存器端口地址MOVAL,88H;设置8237A的工作方式控制字,定义通道0为DMA读传输OUTDX,ALMOVDX,DMA+0CH;设置清先/后触发器命令寄存器的地址OUTDX,AL;清先/后触发器MOVDX,DMA+0BHMOVAL,85H;设置8237A的模式字,定义通道1为DMA写传输OUTDX,ALMOVDX,DMA+0CHOUTDX,AL;清先/后触发器MOVDX,DMA+0FHMOVDX,0CH;屏蔽通道2和通道3,OUTDX,ALMOVDX,DMA+0CHOUTDX,AL;清先/后触发器MOVDX,DMA+08HMOVAL,01H;设置8237A的控制字,定义为存储器到存储器传送模式OUTDX,AL;启动8237A工作MOVDX,DMA+0CHOUTDX,AL;清先/后触发器MOVDX,DMA+09HMOVAL,04H;向通道0发出DMA请求OUTDX,ALMOVDX,DMA+08HAA1INAL,DX;读8237A状态寄存器的内容JZ AA1;判断计数是否结束MOVDX,DMA+0CHOUTDX,AL;清先/后触发器MOVDX,DMA+09HMOVAL,00H;向通道0撤消DMA请求OUTDX,AL,MOVDX,DMA+0CHOUTDX,AL;清先/后触发器MOVAL,04H;关闭8237A,操作方式控制字D2=1MOVDX,DMA+08H;设置控制寄存器的端口地址OUTDX,ALHLT,9.3 项目扩展与工程应用,项目3:DMA进行存贮器到存贮器传送数据1项目要求与目的(1)项目要求:利用8086CPU控制8237A可编程DMA控制器,实现存贮器之间的DMA数据传送。(2)项目目的:掌握8237A DMA控制器的使用方法。学习用DMA进行存贮器到存贮器传送数据的编程方法。2项目电路连接与说明(1)项目电路连接:做MEM=MEM数据传送时无需用户联线,系统自动做总线切换本程序将RAM中的一段数据用DMA方式复制到另一地址。(2)项目说明:实验过程中不用联线,程序运行状态通过查看存贮器、寄存器内容来观察。对程序作如下说明:,3项目电路原理框图DMA进行存贮器到存贮器传送数据电路框图如图9-12所示。电路由8086CPU芯片、8237A芯片、RAM等组成。,图9-12 DMA进行存贮器到存贮器传送数据电路框图,4项目程序设计(1)程序流程图DMA进行存贮器到存贮器传送数据程序流程图如图9-13所示。,图9-13 DMA进行存贮器到存贮器传送数据程序流程图,(2)程序清单DMA进行存贮器到存贮器传送数据程序清单如下所示。DMA EQU 00HDATA SEGMENTPB DB?DATA ENDSSTACK SEGMENT STACKSTA DW 50 DUP(0)TOP EQU LENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AL,04HOUTDMA+8,AL;禁止8237A工作OUT DMA+0DH,AL;复位命令,使先后触发器清0MOV AL,1100BOUT DMA+0AH,AL;充许通道0,1MOV AL,00H;通道0起始地址1000H,OUT DMA+00H,ALMOV AL,10HOUT DMA+00H,ALMOV AX,255;通道0计数OUT DMA+01H,ALMOV AL,00HOUT DMA+01H,ALMOV AL,10001000B;通道0工作方式OUT DMA+0BH,ALMOV AL,00H;通道1起始地址1100OUT DMA+02H,ALMOV AL,11HOUT DMA+02H,ALMOV AX,255;通道1计数OUT DMA+03H,ALMOV AL,00HOUT DMA+03H,ALMOV AL,10000101B;通道1工作方式OUT DMA+0BH,ALIN AL,DMA+00H;读通道0地址低8位MOV BL,ALIN AL,DMA+00H;读通道0地址低8位MOV BH,AL,IN AL,DMA+01H;读通道0计数器低8位MOV BL,ALIN AL,DMA+01H;读通道0计数器高8位MOV BH,ALIN AL,DMA+02H;读通道1地址低8位MOV BL,ALIN AL,DMA+02H;读通道1地址低8位MOV BH,ALIN AL,DMA+03H;读通道1计数器低8位MOV BL,ALIN AL,DMA+03H;读通道1计数器高8位MOV BH,ALMOV AL,00000001B;允许DMA控制,允许mem-to-memOUT DMA+8,ALMOV AL,100B;通道0启动请求OUT DMA+9,ALNOPIN AL,DMA+00H;读通道0地址低8位MOV BL,AL,IN AL,DMA+00H;读通道0地址低8位MOV BH,ALIN AL,DMA+01H;读通道0计数器低8位MOV BL,ALIN AL,DMA+01H;读通道0计数器高8位MOV BH,ALIN AL,DMA+02H;读通道1地址低8位MOV BL,ALIN AL,DMA+02H;读通道1地址低8位MOV BH,ALIN AL,DMA+03H;读通道1计数器低8位MOV BL,AL

    注意事项

    本文(可编程DMA控制器8237A.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开