您好,欢迎来电子发烧友网! ,新用户?[免费注册]

当前位置:电子发烧友网 > 图书频道 > 电子 > 《计算机组成原理与汇编语言》 > 第5章 输入输出技术

第5节 直接存贮器存取(DMA)

5.4.1 DMA的工作过程
 
   要实现DMA传送,目前都采用大规模集成电路芯片DMA控制器(DMAC)。

   DMA的工作过程大致如下:


   ①外设向DMAC发出DMA传送请求。

   ②DMAC通过连接到CPU的HOLD信号向CPU提出DMA请求。

   ③CPU在完成当前总线周期后会立即对DMA请求做出响应。

   ④待CPU将总线置高阻——放弃总线控制权,DMAC即开始对总线实施控制并向外设送出DMA的应答信号。
   
   ⑤DMAC送出地址信号和控制信号,实现外设与内存或内存与内存的数据传送。

   ⑥DMAC将规定的数据字节传送完之后,通过向CPU发HOLD信号,撤消对CPU的DMA请求。 
   

 

 

5.4.2 DMA控制器8237

   1. 8237的引线及功能

       DMAC8237的外部引线图如图5.33所示。

       A0~A3:双向地址线,具有三态输出。
 
       A4~A7:三态输出线。 

       DB0~DB7:双向三态数据总线。  

 

 

      HRQ:保持请求信号 

       HLDA:保持响应信号 

       DREQ0~DREQ3:DMA请求(通道0~3)信号。
       
      DACK0~DACK3:DMA响应信号,分别对应通道0~3。
       
      CLK:时钟输入。

       RESET:过程结束,低电平有效的双向信号。


   2.8237的工作方式

       8237工作有两种周期,即空闲周期和工作周期。


   (1)空闲周期


   (2)工作周期

    ①单字节传送方式。

    ②数据块传送。

    ③请求传送。

    ④级联方式。 
   

   (3) 传送类型

   ① 接口到存贮器的传送。
 
   ② 存贮器到接口。
 
   ③ 存贮器到存贮器。


   (4) 优先级


   (5) 传送速率


   3. 8237的内部寄存器

        8237有4个独立的DMA通道,有许多内部寄存器。 表5.3给出这些寄存器的名称、长度和数量。

   (1)基地址寄存器 

   (2)基字数寄存器

   (3)当前地址寄存器

   (4)当前字数寄存器

   (5)地址暂存寄存器和字数暂存寄存器

   (6)方式寄存器

   (7)命令寄存器

   (8)请求寄存器

   (9)屏蔽寄存器

 

 

       ①单个通道屏蔽字。
 
       ②四通道屏蔽字。
 
   (10)状态寄存器

   (11)暂存寄存器

   (12)字节指针触发器

 

  4. 8237的寻址及连接

     8237的4个通道的寄存器及其他各种寄存器的寻址编码如表5.4和表5.5所示。

 

 

 

 

    5. 8237的初始化

       下面我们抽出PC机中BIOS对8237初始化部分加以说明:

   ①为了对DMAC8237初始化,首先进行总清。
 
   ②对DMAC(8237)的4个通道的基地址寄存器与当前地址寄存器、基字数寄存器及当前字数寄存器先写入FFFFH,再读出比较,看读写操作是否正确。
 
   ③程序对DMAC(8237)的零通道初始化。一行刷新结束,HRQ变为无效,退出DMA。

   此处给出通道0初始化程序如下:

   OUT DMA+0DH,AL ;总清8237

   ;INITIALIZEANDSTARTDMAFORMEMORYREFRESH

   MOV DS,BX

   MOV ES,BX ;初始化DS和ES

   MOV AL,0FFH

   OUT DMA+1,AL ;通道0的传送字节数,为64K字节

   OUT DMA+1,AL
   MOV DL,0BH ;使DX=000BH

   MOV AL,58H

   OUT DX,AL ;写方式字

   MOV AL,0

   OUT DMA+8,AL ;写入命令字

   OUT DMA+10,AL; ;写屏蔽字
   


DMAC初始化程序如下:

   INITADM:OUT DMA+0DH,AL ;总清

   MOV AL,40H

   OUT DMA+2,AL ;送地址低字节到通道1

   MOV AL,74H

   OUT DMA+2,AL ;送地址高字节到通道1

   MOV AL,80H


   OUT PAG,AL ;送页寄存器
   MOV AL,64H

   OUT DMA+3,AL;送传送字节数低字节到通道1
   MOV AL,0

   OUT DMA+3,AL ;送传送字节数高字节到通道1

   MOV AL,59H ;通道1方式字:读操作,单字节 ;传送

   OUT DMA+11,AL ;地址递增,自动预置

   MOV AL,0 ;命令字,允许工作,固定优先级

   OUT DMA+8,AL ;DACK低有效

   OUT DMA+15,AL ;写屏蔽寄存器,规定允许  ;4个通道均可请求

       程序中,将取数的存贮单元的首地址87440H分别写到页寄存器(外加的三态输出寄存器)和DMAC通道1的高低字节寄存器中。

   这里每次传送一个字节。每传送100个字节循环。开始可以不用总清命令,以免影响其他通道。这时可以换成只清字节指针触发器的命令,即:

   MOV AL,0

   OUT DMA+12, AL