dma 订阅
DMA(Direct Memory Access,直接存储器访问) 是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依赖于 CPU 的大量中断负载。否则,CPU 需要从来源把每一片段的资料复制到暂存器,然后把它们再次写回到新的地方。在这个时间中,CPU 对于其他的工作来说就无法使用。 展开全文
DMA(Direct Memory Access,直接存储器访问) 是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依赖于 CPU 的大量中断负载。否则,CPU 需要从来源把每一片段的资料复制到暂存器,然后把它们再次写回到新的地方。在这个时间中,CPU 对于其他的工作来说就无法使用。
信息
功    能
不同速度的硬件装置来沟通
外文名
Direct Memory Access
缩    写
DMA
来    源
嵌入式底层驱动
中文名
直接存储器访问
DMA原理
DMA 传输将数据从一个地址空间复制到另外一个地址空间。当CPU 初始化这个传输动作,传输动作本身是由 DMA 控制器来实行和完成。典型的例子就是移动一个外部内存的区块到芯片内部更快的内存区。像是这样的操作并没有让处理器工作拖延,反而可以被重新排程去处理其他的工作。DMA 传输对于高效能 嵌入式系统算法和网络是很重要的。 在实现DMA传输时,是由DMA控制器直接掌管总线,因此,存在着一个总线控制权转移问题。即DMA传输前,CPU要把总线控制权交给DMA控制器,而在结束DMA传输后,DMA控制器应立即把总线控制权再交回给CPU。一个完整的DMA传输过程必须经过DMA请求、DMA响应、DMA传输、DMA结束4个步骤。CPU对DMA控制器初始化,并向I/O接口发出操作命令,I/O接口提出DMA请求。DMA控制器对DMA请求判别优先级及屏蔽,向总线裁决逻辑提出总线请求。当CPU执行完当前总线周期即可释放总线控制权。此时,总线裁决逻辑输出总线应答,表示DMA已经响应,通过DMA控制器通知I/O接口开始DMA传输。DMA控制器获得总线控制权后,CPU即刻挂起或只执行内部操作,由DMA控制器输出读写命令,直接控制RAM与I/O接口进行DMA传输。在DMA控制器的控制下,在存储器和外部设备之间直接进行数据传送,在传送过程中不需要中央处理器的参与。开始时需提供要传送的数据的起始位置和数据长度。当完成规定的成批数据传送后,DMA控制器即释放总线控制权,并向I/O接口发出结束信号。当I/O接口收到结束信号后,一方面停 止I/O设备的工作,另一方面向CPU提出中断请求,使CPU从不介入的状态解脱,并执行一段检查本次DMA传输操作正确性的代码。最后,带着本次操作结果及状态继续执行原来的程序。由此可见,DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为RAM与I/O设备开辟一条直接传送数据的通路,使CPU的效率大为提高。
收起全文
精华内容
下载资源
问答
  • DMA

    2020-01-20 17:38:38
    开发平台 ...F4有两个DMA控制器:DMA1和DMA2,只有DMA2才支持存储器到存储器 DMA架构 1、外设通道选择(每个数据流的每个通道有对应的外设,不过有一些是没有的) 2、数据流的选择 3、仲裁器,当有...

    开发平台

    • 野火开发板F429
    • 标准库

    DMA(直接存储区访问)

    • DMA可以数据的高效传输,数据移动过程无需经过任何CPU的操作和控制。
    • F4支持:存储器到存储器、存储器到外设、外设到存储器
    • F4有两个DMA控制器:DMA1和DMA2,只有DMA2才支持存储器到存储器

    DMA架构

    在这里插入图片描述

    • 1、外设通道选择(每个数据流的每个通道有对应的外设,不过有一些是没有的)
    • 2、数据流的选择
    • 3、仲裁器,当有个多个外设同时请求一个DMA控制器时,这时就要分先后了,仲裁器的作用就在这里了。所以要设置优先级(较高优先级、高优先级、中优先级、低优先级),若优先级相等时,就看数据流序号,序号越小优先级越高
    • 4、FIFO:DMA传输分为直接模式(当DMA使能后直接传输数据)、FIFO模式(当阈值满后,才一次过传输)就有了突发传输
    • 存储器端口
    • 外设端口

    寄存器

    看手册
    在这里插入图片描述

    • 前面四个就是中断标志位以及清除中断标志位
    • 数据流配置寄存器(SxCR),配置通道、优先级、存储器数据宽度、外设数据宽度等等
    • 外设地址寄存器(SxPAR),外设的数据地址或者存储器的目标地址
    • 存储器0地址寄存器/存储器1地址寄存器,存储器源地址,存储器1地址寄存器只用于双缓冲区模式
    • FIFO控制寄存器:使能失能直接模式、设置FIFO阈值
    • 数据项数寄存器(SxNDTR),可以读取该寄存器,得知数据传输到哪
      在这里插入图片描述
      在这里插入图片描述

    存储器到外设

    1.配置DMA参数即可

    • DMA_GetCmdStatus(),只有当数据传输完成后才会被有效禁用,表示数据传输完成

    代码如下:

    void DMA_MTP_Config(void)
    {
        
        DMA_InitTypeDef DMA_InitStruct;
        /*打开时钟*/
        RCC_AHB1PeriphClockCmd(DMA2_CLOCK,ENABLE);
        /*复位初始化DMA数据流*/
        DMA_DeInit(DMA_USART_STREAM);
    
        while(DMA_GetCmdStatus(DMA_USART_STREAM)==ENABLE);
    
        /*
        **通道7
        **方向 寄存器到外设
        **DMA寄存器数据宽度:字节(8位)
        **DMA外设宽度:字节(8位)
        **fifo模式不开
        **寄存器地址:发送数据的首地址
        **外设地址:数据寄存器地址
        **寄存器:单次传输
        **外设:单次传输
        **寄存器地址自动递增
        **外设地址:不需要
        **循环模式
        **优先级为高
        */
        DMA_InitStruct.DMA_Channel=DMA_USART_CHANNLE;
        DMA_InitStruct.DMA_DIR=DMA_DIR_MemoryToPeripheral;
        DMA_InitStruct.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte;
        DMA_InitStruct.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte;
        DMA_InitStruct.DMA_BufferSize=BUFFER_SIZE;
        DMA_InitStruct.DMA_FIFOMode=DMA_FIFOMode_Disable;
        DMA_InitStruct.DMA_FIFOThreshold=DMA_FIFOThreshold_Full;
        DMA_InitStruct.DMA_Memory0BaseAddr=(u32)senddata;
        DMA_InitStruct.DMA_PeripheralBaseAddr=USART_DR_BASE;
        DMA_InitStruct.DMA_MemoryBurst=DMA_MemoryBurst_Single;
        DMA_InitStruct.DMA_PeripheralBurst=DMA_PeripheralBurst_Single;
        DMA_InitStruct.DMA_MemoryInc=DMA_MemoryInc_Enable;
        DMA_InitStruct.DMA_PeripheralInc=DMA_PeripheralInc_Disable;
        DMA_InitStruct.DMA_Mode=DMA_Mode_Circular;
        DMA_InitStruct.DMA_Priority=DMA_Priority_High;
        DMA_Init(DMA_USART_STREAM,&DMA_InitStruct);
    
        DMA_Cmd(DMA_USART_STREAM,ENABLE);
    
        while(DMA_GetCmdStatus(DMA_USART_STREAM)==DISABLE);
    }
    
    展开全文
  • dma

    2016-08-13 23:44:34
    dma 是soc上的硬件模块之间数据通信的接口,基本所有模块上都用到了它,他们都是固定的api,虽然只要知道api怎么调用就够用了,但是还是有必要看看底层的逻辑是什么。 documentation/dmaengine.txt documentation/...

    dma 是soc上的硬件模块之间数据通信的接口,基本所有模块上都用到了它,他们都是固定的api,虽然只要知道api怎么调用就够用了,但是还是有必要看看底层的逻辑是什么。


    documentation/dmaengine.txt

    documentation/dma-api.txt

    documentation/dma-apt-howto.txt


    dma_alloc_coherent--->ops->alloc == arm_dma_alloc

    dma_request_slave_channel_compat--->  __dma_request_slave_channel_compat --->  dma_request_slave_channel ---> of_dma_request_slave_channel --->

    ofdma->of_dma_xlate == (of_dma_controller_register--->at_dma_xlate) --->dma_request_channel--->__dma_request_channel--->private_candidate


    dmaengine_slave_config--->dmaengine_device_control---> chan->device->device_control == atc_control--->set_runtime_config--->convert_burst


    dma_map_single--->dma_map_single_attrs--->ops->map_page == arm_dma_map_page


    sg_init_table


    sg_dma_len


    device_prep_slave_sg == atc_prep_slave_sg


    tx_submit  ==atc_tx_submit--->atc_dostart


    device_issue_pending==atc_issue_pending--->atc_advance_work--->atc_complete_all--->atc_chain_complete--->callback--->dma_run_dependencies

    展开全文
  • DMA

    千次阅读 2011-11-21 15:13:33
    DMA原理:DMA 是所有现代电脑的重要特色,他允许不同速度的硬件装置来沟通,而不需要依于 CPU 的大量 中断 负载。否则,CPU 需要从 来源 把每一片段的资料复制到 暂存器,然后把他们再次写回到新的地方。在这个时间...
     
    

    DMA - 街角的祝福 -  demoDMA - 街角的祝福 -  demo

     

    DMA原理:DMA 是所有现代电脑的重要特色,他允许不同速度的硬件装置来沟通,而不需要依于 CPU 的大量 中断 负载。否则,CPU 需要从 来源 把每一片段的资料复制到 暂存器,然后把他们再次写回到新的地方。在这个时间中,CPU 对于其他的工作来说就无法使用。 DMA 传输重要地将一个内存区从一个装置复制到另外一个。当 CPU 初始化这个传输动作,传输动作本身是由 DMA 控制器 来实行和完成。典型的例子就是移动一个外部内存的区块到芯片内部更快的内存去。像是这样的操作并没有让处理器工作拖延,反而可以被重新排程去处理其他的工作。DMA 传输对于高效能 嵌入式系统 算法和网络是很重要的。 
      在实现DMA传输时,是由DMA控制器直接掌管总线,因此,存在着一个总线控制权转移问题。即DMA传输前,CPU要把总线控制权交给DMA控制器,而在结束DMA传输后,DMA控制器应立即把总线控制权再交回给CPU。
    DMA - 街角的祝福 -  demo
    DMA
    一个完整的DMA传输过程必须经过下面的4个步骤。
    1.DMA请求
      CPU对DMA控制器初始化,并向I/O接口发出操作命令,I/O接口提出DMA请求。
    2.DMA响应
      DMA控制器对DMA请求判别优先级及屏蔽,向总线裁决逻辑提出总线请求。当CPU执行完当前总线周期即可释放总线控制权。此时,总线裁决逻辑输出总线应答,表示DMA已经响应,通过DMA控制器通知I/O接口开始DMA传输。
    3.DMA传输
      DMA控制器获得总线控制权后,CPU即刻挂起或只执行内部操作,由DMA控制器输出读写命令,直接控制RAM与I/O接口进行DMA传输。
    4.DMA结束
      当完成规定的成批数据传送后,DMA控制器即释放总线控制权,并向I/O接口发出结束信号。当I/O接口收到结束信号后,一方面停 止I/O设备的工作,另一方面向CPU提出中断请求,使CPU从不介入的状态解脱,并执行一段检查本次DMA传输操作正确性的代码。最后,带着本次操作结果及状态继续执行原来的程序。
      由此可见,DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为RAM与I/O设备开辟一条直接传送数据的通路,使CPU的效率大为提高。

    DMA操作模式
        DMA用于无需CPU的介入而直接由专用控制器建立源与目的传输的应用,因此,在大量数据传输中解放了CPU。PIC32微控制器中的DMA可用于映射到内存空间中的不同外设,从存储区到SPI,UART或I2C等设备。DMA特性详见器件参考手册,这里仅对一些基本原理与功能做一个简析。
        PIC32中DMA的传输涉及到几个基本的术语
        Event:事件,触发控制器启动或停止DMA传输的操作;
        Transaction:事务,单字传输(最多可以到4个字节),由读/写组成;
        Cell transfer:元传输,单次共DCHXCSIZE个字节的数据传输。元传输由单个或多个事务组成。
        Block transfer:块传输,块传输总的字节数由DCHXSSIZ或DCHXDSIZ决定。块传输由单个或多个元传输组成。
        事件是触发DMA控制器产生动作的方式,分为,START EVENT->启动传输;ABORT EVENT->取消传输;STOP EVENT->停止传输;为了有一个完整的概念认识,可以把用户软件的操作,如置位启动传输位等也包含在事件范围内。由此,可以看出,任何一个DMA动作都是由事件触发完成的。用户在使用DMA控制器时只需设计好事件与DMA操作的关联即可。要充分的使用DMA控制器,熟悉DMA各种工作模式的原理是很有必要的。
             传输模式二:字符匹配终止模式
        字符匹配模式用于传输不定长字节,而又有传输终止标识字节的应用环境中,Uart是这种模式的应用案例

         DMA通道的自动使能模式
        DMA每个通道在正常的块传输、终结字符匹配后或者因异常ABORT后,通道自动禁能。如果该通道有多次的块传输,需要手动的使能通道;为了省却该操作,DCHXCON寄存器提供了允许自动使能通道的位CHAEN(channel auto enable)。通道使能位CHEN在取消传输或ABORT事件发生时会被置为0。
    注:
    1、通道起始/终止/停止中断事件独立于中断控制器,因此相应的中断无需使能,也无需在DMA传输后清除相应的位;
    2、通道优先级和选择
        DMA控制器每个通道有一个自然的优先级,CH0默认为最高,CH4默认为最低;通道寄存器DCHXCON中提供了修改优先级的控制位。优先级控制了通道的传输顺序。
     
    3、DMA传输中的字节对齐
        PIC32采用的数据总线是32位,4字节;无疑访问地址为4字节对齐的访问效率最高,但是,如果把所有的常量或变量存储地址都限制在4字节对齐显然是不可能的;DMA中在处理这个问题上采用的字节对齐方法(存储方式为LSB)。举例来说,如果当前物理地址与4的模为0,则取4字节;模为1,则取高3字节;模为2,则取高2字节;模为3,则取高1字节。
        物理地址为0x1230,模为0,则取从0x1230处4字节数据;
        物理地址为0x1231,模为1,则取从0x1231处3字节数据;
        物理地址为0x1232,模为2,则取从0x1232处2字节数据;
        物理地址为0x1233,模为3,则取从0x1233处1字节数据;
        读/写过程均采取相同的字节对齐机制。DMA传输中的字节对齐过程如图2.

         直接存储器存取(DMA)控制器是一种在系统内部转移数据的独特外设,可以将其视为一种能够通过一组专用总线将内部和外部存储器与每个具有DMA能力的外设连接起来的控制器。它之所以属于外设,是因为它是在处理器的编程控制下来执行传输的。值得注意的是,通常只有数据流量较大(kBps或者更高)的外设才需要支持DMA能力,这些应用方面典型的例子包括视频、音频和网络接口

    一般而言,DMA控制器将包括一条地址总线、一条数据总线和控制寄存器。高效率的DMA控制器将具有访问其所需要的任意资源的能力,而无须处理器本身的介入,它必须能产生中断。最后,它必须能在控制器内部计算出地址。

    一个处理器可以包含多个DMA控制器。每个控制器有多个DMA通道,以及多条直接与存储器站(memory bank)和外设连接的总线如图1所示。在很多高性能处理器中集成了两种类型的DMA控制器。第一类通常称为“系统DMA控制器”,可以实现对任何资源(外设和存储器)的访问,对于这种类型的控制器来说,信号周期数是以系统时钟(SCLK)来计数的,以ADI的Blackfin处理器为例,频率最高可达133MHz。第二类称为内部存储器DMA控制器(IMDMA),专门用于内部存储器所处位置之间的相互存取操作。因为存取都发生在内部(L1-L1、L1-L2,或者L2-L2),周期数的计数则以内核时钟(CCLK)为基准来进行,该时钟的速度可以超过600MHz

    每个DMA控制器有一组FIFO,起到DMA子系统和外设或存储器之间的缓冲器的作用。对于MemDMA(Memory DMA)来说,传输的源端和目标端都有一组FIFO存在。当资源紧张而不能完成数据传输的话,则FIFO可以提供数据的暂存区,从而提高性能。

    因为通常会在代码初始化过程中对DMA控制器进行配置,内核就只需要在数据传输完成后对中断做出响应即可。你可以对DMA控制进行编程,让其与内核并行地移动数据,而同时让内核执行其基本的处理任务—那些应该让它专注完成的工作。

    图1:系统和存储器DMA架构.
    图1:系统和存储器DMA架构。

    在一个优化的应用中,内核永远不用参与任何数据的移动,而仅仅对L1存储器中的数据进行读写。于是,内核不需要等待数据的到来,因为DMA引擎会在内核准备读取数据之前将数据准备好。图2给出了处理器和DMA控制器间的交互关系。由处理器完成的操作步骤包括:建立传输,启用中断,生成中断时执行代码返回到处理器的中断输入可以用来指示“数据已经准备好,可进行处理”。

    图2:DMA控制器.
    图2:DMA控制器。

    数据除了往来外设之外,还需要从一个存储器空间转移到另一个空间中。例如,视频源可以从一个视频端口直接流入L3存储器,因为工作缓冲区规模太大,无法放入到存储器中。我们并不希望让处理器在每次需要执行计算时都从外部存储读取像素信息,因此为了提高存取的效率,可以用一个存储器到存储器的DMA(MemDMA)来将像素转移到L1或者L2存储器中。

    到目前为之,我们还仅专注于数据的移动,但是DMA的传送能力并不总是用来移动数据。  

     在最简单的MemDMA情况中,我们需要告诉DMA控制器源端地址、目标端地址和待传送的字的个数。每次传输的字的大小可以是8、16或者12位。  我们只需要改变数据传输每次的数据大小,就可以简单地增加DMA的灵活性。例如,采用非单一大小的传输方式时,我们以传输数据块的大小的倍数来作为地址增量。也就是说,若规定32位的传输和4个采样的跨度,则每次传输结束后,地址的增量为16字节(4个32位字)。

     

    DMA的设置

    目前有两类主要的DMA传输结构:寄存器模式和描述符模式。无论属于哪一类DMA,表1所描述的几类信息都会在DMA控制器中出现。当DMA以寄存器模式工作时,DMA控制器只是简单地利用寄存器中所存储的参数值。在描述符模式中,DMA控制器在存储器中查找自己的配置参数。

    表1:DMA寄存器
    表1:DMA寄存器

    基于寄存器的DMA

    在基于寄存器的DMA内部,处理器直接对DMA控制寄存器进行编程,来启动传输。基于寄存器的DMA提供了最佳的DMA控制器性能,因为寄存器并不需要不断地从存储器中的描述符上载入数据,而内核也不需要保持描述符。

    基于寄存器的DMA由两种子模式组成:自动缓冲(Autobuffer)模式和停止模式在自动缓冲DMA中,当一个传输块传输完毕,控制寄存器就自动重新载入其最初的设定值,同一个DMA进程重新启动,开销为零。

    正如我们在图3中所看到的那样,如果将一个自动缓冲DMA设定为从外设传输一定数量的字到L1数据存储器的缓冲器上,则DMA控制器将会在最后一个字传输完成的时刻就迅速重新载入初始的参数。这构成了一个“循环缓冲器”,因为当一个量值被写入到缓冲器的最后一个位置上时,下一个值将被写入到缓冲器的第一个位置上。

    图3:用DMA实现循环缓冲器.
    图3:用DMA实现循环缓冲器。

    自动缓冲DMA特别适合于对性能敏感的、存在持续数据流的应用。DMA控制器可以在独立于处理器其他活动的情况下读入数据流,然后在每次传输结束时,向内核发出中断。

    停止模式的工作方式与自动缓冲DMA类似,区别在于各寄存器在DMA结束后不会重新载入,因此整个DMA传输只发生一次。停止模式对于基于某种事件的一次性传输来说十分有用。例如,非定期地将数据块从一个位置转移到另一个位置。当你需要对事件进行同步时,这种模式也非常有用。例如,如果一个任务必须在下一次传输前完成的话,则停止模式可以确保各事件发生的先后顺序。此外,停止模式对于缓冲器的初始化来说非常有用。

    描述符模型

    基于描述符(descriptor)的DMA要求在存储器中存入一组参数,以启动DMA的系列操作。该描述符所包含的参数与那些通常通过编程写入DMA控制寄存器组的所有参数相同。不过,描述符还可以容许多个DMA操作序列串在一起。在基于描述符的DMA操作中,我们可以对一个DMA通道进行编程,在当前的操作序列完成后,自动设置并启动另一次DMA传输。基于描述符的方式为管理系统中的DMA传输提供了最大的灵活性。

    ADI 的Blackfin处理器上有两种主要的描述符方式—描述符阵列和描述符列表,这两种操作方式所要实现的目标是在灵活性和性能之间实现一种折中平衡。

     DMA 方式, 即外设在专用的接口电路DMA 控制器的控制下直接和存储器进行高速数据传送。采用DMA 方式时,如外设
    需要进行数据传输, 首先向DMA 控制器发出请求,DMA 再向CPU 发出总线请求,要求控制系统总线。CPU 响应DMA 控制器
    的总线请求并把总线控制权交给DMA, 然后在DMA 的控制下开始利用系统总线进行数据传输。数据传输结束后,DMA 并回
    总线控制权。
    DMA 操作步骤:
    (1) DMA 控制器的初始化
    (2) DMA 数据传送
    (3) DMA 结束
    DMA 初始化预置如下信息:一是指定I/O 设备对外设"读"还是"写",即指定其控制/状态寄存器中相应的控制位;二是数据应传送至何处,指定其地址的首地址;三是有多少数据字需要传送。


     

    展开全文
  • DMA

    2009-03-15 00:02:00
    当我们向计算机中加入了一块新的声卡或其它适配卡时,安装程序可能会提醒我们应该选择一个DMA通道。那DMA是什么呢? DMA(Direct Memory Access),即直接存储器存取,是一种快速传送数据的机制。数据传递可以从适配...

    当我们向计算机中加入了一块新的声卡或其它适配卡时,安装程序可能会提醒我们应该选择一个DMA通道。那DMA是什么呢? DMA(Direct Memory Access),即直接存储器存取,是一种快速传送数据的机制。数据传递可以从适配卡到内存,从内存到适配卡或从一段内存到另一段内存。DMA技术的重要 性在于,利用它进行数据传送时不需要CPU的参与。每台电脑主机板上都有DMA控制器,通常计算机对其编程,并用一个适配器上的ROM(如软盘驱动控制器 上的ROM)来储存程序,这些程序控制DMA传送数据。一旦控制器初始化完成,数据开始传送,DMA就可以脱离CPU,独立完成数据传送。
    在DMA传送开始的短暂时间内,基本上有两个处理器为它工作,一个执行程序代码,一个传送数据。利用DMA传送数据的另一个好处是,数据直接在源地址和目 的地址之间传送,不需要中间媒介。如果通过CPU把一个字节从适配卡传送至内存,需要两步操作。首先,CPU把这个字节从适配卡读到内部寄存器中,然后再 从寄存器传送到内存的适当地址。DMA控制器将这些操作简化为一步,它操作总线上的控制信号,使写字节一次完成。这样大大提高了计算机运行速度和工作效 率。
    计算机发展到今天,DMA已不再用于内存到内存的数据传送,因为CPU速度非常快,做这件事,比用DMA控制还要快,但要在适配卡和内存之间传送数据,仍 然是非DMA莫属。要从适配卡到内存传送数据,DMA同时触发从适配卡读数据总线(即I/O读操作)和向内存写数据的总线。激活I/O读操作就是让适配卡 把一个数据单位(通常是一个字节或一个字)放到PC数据总线上,因为此时内存写总线也被激活,数据就被同时从PC总线上拷贝到内存中。
    对于每一次写操作,DMA控制器都控制地址总线,通知应将数据写到哪段内存中去。 DMA控制数据从内存传送到适配卡的方法与上面类似。对每一个要传送的单位数据,DMA控制器激活读内存和I/O写操作的总线。内存地址被放到地址总线 上,像从适配卡到内存传送数据一样,以数据总线为通道,数据从源地址直接传送到目的地址。 DMA从DMA请求线(DREQ)上接收DMA请求,正像中断控制器从中断请求线(IRQ)上接收中断请求一样。
    一个典型的从适配卡到内存的数据传送是这样进行的,首先,对DMA控制器编程,写入数据要到达的内存地址和要传送的字节数。适配器可以开始传送数据时,它 将激活DREQ线,与DMA控制器连通。DMA控制器在与CPU取得总线控制权后,输出内存地址,发送控制信号,使得一个字节或一个字从适配器读出并写入 相应内存中,然后更新内存地址,指向下一个字节(或字)要写入的地址,重复上面的操作,直至数据传送完毕。对控制器进行不同编程,就可以实现单字节传送 (即每传送一个字节都要求一个DREQ信号)或块数据传送(即全部数据传送只需要一个DREQ信号)。
    如果你要往计算机中插一块适配卡,而且适配卡使用DMA,通常安装程序会让你选择一个DMA通道,设定DIP开关或跳线,来为相应适配器设置DMA通道。 尽管从理论上讲,只要不是同时使用DREQ线,不同的适配卡可以共享这条线的,但是按常规,我们最好为每个适配卡单独安排一个DMA通道,这样就可以保证 不会发生DMA冲突。附表是DMA的缺省分配情况。通道 功能通道 功能 O 空闲 4 用于级联DMA控制器 1 空闲 5 空闲 2 软盘 6 空闲 3 空闲 7 空闲从中可以看出,DMA通道2和4已被占用,在大多数微机上,通道1、3、5、6和7可由你任意分配。我们平时最好对自己的计算机上DMA通道的分配情 况记录下来,以免我们向计算机增加新硬件时出现两个适配卡共用一个通道,导致冲突。

    DMA---Direct Memory Access,直接内存访问,是一种数据传输模式。DMA方式下由于不直接访问计算机的CPU,而直接在RAM与设备之间传输,因而大大提高了数据传输速度。

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,282
精华内容 7,312
关键字:

dma