单片机中DMA是什么意思

谷歌邮箱格式2023-04-28  21

DMA是一种不需要CPU参与传送数据的方式,这样可以节省大量的CPU资源。例如你需要传送100个8位的数据到外设,如果用CPU来做可能是

char num[100];

char i;

for(i = 0; i < 100; i++)

{

P0 = num[i];

}

这样cpu要执行100次for循环,如果用DMA方式只要把数据的个数和数据的起始地址给DMA接CPU就不用理会了。

实现DMA传送的基本操作如下:

1、外设可通过DMA控制器向CPU发出DMA请求;

2、CPU响应DMA请求,系统转变为DMA工作方式,并把总线控制权交给DMA控制器;

3、由DMA控制器发送存储器地址,并决定传送数据块的长度;

4、执行DMA传送;

5、DMA操作结束,并把总线控制权交还CPU。

扩展资料

DMA方式下,为了控制外设和主存直接交换数据,需要有专门的数据传送控制电路,通常把这样的控制逻辑称为DMA控制器。整个过程分以下三个阶段:

(1)DMA控制器初始化

首先,对DMA控制器和设备接口中的参数寄存器进行初始化,以设定主存首地址、传送数据个数、传送方向(读出/写入)、设备地址(如磁头号、磁道号、起始扇区号)等,这些初始化工作由CPU执行指令完成。初始化工作的最后是向外设接口发送启动读或写的命令。

(2)DMA传送

外设接口接受到CPU送来的启动命令后,就开始控制设备进行读或写操作,当外设准备好数据以后,外设接口就会向DMA控制器发送相应的“DMA请求”信号。

DMA控制器接受到该信号后,就会向CPU发送“总线请求”信号,要求CPU释放总线,请求由DMA控制器控制总线以进行外设和主存之间的数据交换。CPU总是在一个总线事务结束后让出总线。

DMA控制器每传送一个数据,就使数据个数计数器减1。当该计数器为0时,表示传送过程结束。此结束信号被送到外设接口,引起外设接口向CPU发送一个“DMA传送结束”中断请求。

(3)DMA结束处理。当CPU接收到“DAM传送结束”中断请求后,就调出相应的中断服务程序进行DMA结束处理。

参考资料来源:百度百科-DMA方式

DMA指标又叫平行线差指标,是目前股市分析技术指标中的一种中短期指标,它常用于大盘指数和个股的研判。

买卖原则

DMA线向上交叉AMA线,做买。

DMA线向下交叉AMA线,做卖。

DMA指标也可观察与股价的背离。

一、DMA指标的原理及计算方法

DMA指标的原理

DMA指标是属于趋向类指标,也是一种趋势分析指标。DMA是依据快慢两条移动平均线的差值情况来分析价格趋势的一种技术分析指标。它主要通过计算两条基准周期不同的移动平均线的差值,来判断当前买入卖出的能量的大小和未来价格走势的趋势。

DMA指标的计算方法

DMA指标的计算方法比较简单,其计算过程如下:

DMA=短期平均值—长期平均值

AMA=短期平均值

以求10日、50日为基准周期的DMA指标为例,其计算过程具体如下:

DMA(10)=10日平均值—50日平均值

AMA(10)=10日平均值

和其他指标的计算一样,由于选用的计算周期的不同,DMA指标也包括日DMA指标、周DMA指标、月DMA指标年DMA指标以及分钟DMA指标等各种类型。经常被用于股市研判的是日DMA指标和周DMA指标。虽然它们的计算时的取值有所不同,但基本的计算方法一样。另外,随着股市软件分析技术的发展,投资者只需掌握DMA形成的基本原理和计算方法,无须去计算指标的数值,更为重要的是利用DMA指标去分析、研判股票行情。

二、DMA指标的一般研判标准

DMA和AMA的值及线的运动方向

1、当DMA和AMA均大于0(即在图形上表示为它们处于零线以上)并向上移动时,一般表示为股市处于多头行情中,可以买入或持股;

2、当DMA和AMA均小于0(即在图形上表示为它们处于零线以下)并向下移动时,一般表示为股市处于空头行情中,可以卖出股票或观望。

3、当DMA和AMA均大于0(即在图形上表示为它们处于零线以上),但在经过一段比较长时间的向上运动后,如果两者同时从高位向下移动时,一般表示为股票行情处于退潮阶段,股票将下跌,可以卖出股票和观望;

4、当DMA和AMA均小于0时(即在图形上表示为它们处于零线以下),但在经过一段比较长时间的的向下运动后,如果两者同时从低位向上移动时,一般表示为短期行情即将启动,股票将上涨,可以短期买进股票或持股待涨。

DMA曲线和股价曲线的配合使用

由于DMA指标有领先股价涨跌的功能,因此,投资者也可以将DMA曲线和股价曲线配合使用。

1、当DMA曲线与股价曲线从低位(DMA和AMA数值均在0以下)同步上升,表明空头力量已经衰弱、多头力量开始积聚,短期内股价有望止跌企稳,投资者应可以开始少量逢低买入。

2、当DMA曲线与股价曲线从0值附近向上攀升时,表明多头力量开始大于空头力量,股价将在成交量的配合下,走出一波向上扬升的上涨行情。此时,投资者应逢低买入或坚决持股待涨。

3、当DMA曲线从高位回落,经过一段时间强势盘整后再度向上并创出新高,而股价曲线也在高位强势盘整后再度上升创出新高,表明股价的上涨动力依然较强,投资者可继续持股待涨。

4、当DMA曲线从高位﹝DMA和AMA数值均在远离0值的上方﹞回落,经过一段时间盘整后再度向上,但到了前期高点附近时未能创出新高却调头向下时,而且,股价曲线也同时下跌时,这可能就意味着股价上涨的动力开始减弱,将开始一轮比较强劲的下跌行情。此时投资者应千万小心,一旦股价从下,应果断及时地离场。

5、当DMA曲线与股价曲线从中位(DMA和AMA数值均在0以上)继续同步下降,表明短期内股价将继续下跌趋势,投资者应继续持币观望或逢高卖出。

6、当DMA曲线在长期弱势下跌过程中,经过一段时间弱势反弹后再度向下并创出新低,而股价曲线也在弱势盘整后再度向下创出新低,表明股价的下跌动能依然较强,投资者可继续持币观望。

DMA线和AMA线的几次交叉情况

一般而言,在一个股票的完整的升势和跌势过程中,DMA指标中的DMA线和AMA线会出现两次或以上的“黄金交叉”和“死亡交叉”情况。

1、当股价经过一段很长时间的下跌行情后,DMA线开始向上突破AMA线时,表明股市即将转强,股价跌势已经结束,将止跌朝上,可以开始买进股票,进行中长线建仓。这是DMA指标“黄金交叉”的一种形式。

2、当股价经过一段时间的上升过程中的盘整行情后,DMA线开始再次向上突破AMA线,成交量再度放出时,表明股市处于一种强势之中,股价将再次上涨,可以加码买进股票或持股待涨,这就是DMA指标“黄金交叉”的一种形式。

3、当股价经过前期一段很长时间的上升行情后,股价涨幅已经很大的情况下,一旦DMA线向下突破AMA时,表明股市即将由强势转为弱势,股价将大跌,这时应卖出大部分股票而不能买股票,这就是AMA指标的“死亡交叉”的一种形式。

4、当股价经过一段时间的下跌后,而股价向上上涨的动力缺乏,各种均线对股价形成较强的压力时,一旦DMA线再次向下突破AMA线时,表明股市将再次进入极度弱市中,股价还将下跌,可以再卖出股票或观望,这是AMA指标“死亡交叉”的另一种形式。

三、DMA指标的特殊分析方法

DMA指标的背离

DMA指标的背离就是指当DMA指标的曲线图的走势方向正好和K线图的走势方向正好相反。DMA指标的背离有顶背离和底背离两种。

当股价K线图上的股票走势一峰比一峰高,股价在一直向上涨,而DMA指标图上的DMA曲线和AMA曲线的走势是在高位一峰比一峰低,这叫顶背离现象。顶背离现象一般是股价将高位反转的信号,表明股价中短期内即将下跌,是卖出的信号。

当股价K线图上的股票走势一峰比一峰低,股价在向下跌,而DMA指标图上的DMA曲线和AMA曲线的走势是在低位一底比一底低,这叫低背离现象。底背离现象一般是股价将低位反转的信号,表明股价中短期内即将上涨,是买入的信号。

相比于其它技术指标的背离现象而言,DMA指标出现的机会比较少,但如果在实际走势中,一旦DMA指标出现背离现象,它的准确性则更高,这点投资者应引起足够的重视。

DMA指标的形态

当DMA指标中的DMA线和AMA线在高位盘整或低位横盘时所出现的各种交叉形态也是判断行情,决定买卖行动的一种分析方法。

1、当DMA指标中的DMA线和AMA线在高位交叉并形成M头或三重顶等高位反转形态时,意味着股价的上升动能已经衰竭,股价有可能出现长期反转行情,投资者应及时地卖出股票。如果股价走势曲线也先后出现同样形态则更可确认,股价下跌的幅度和过程可参照M头或三重顶等顶部反转形态的研判。

2、当DMA指标中的DMA线和AMA线在低位交叉并形成W底或三重底等低位反转形态时,意味着股价的下跌动能已经减弱,股价有可能构筑中长期底部,投资者可逢低分批建仓。如果股价走势曲线也先后出现同样形态则更可确认,股价的上涨幅度及过程可参照W底或三重底等底部反转形态的研判。

3、DMA指标的顶部反转形态对行情判断的准确性要高于底部反转形态。

什么是DMA?

当我们向计算机中加入了一块新的声卡或其它适配卡时,安装程序可能会提醒我们应该选择一个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与设备之间传输,因而大大提高了数据传输速度。 呵呵,看过上面的DMA的含义及用途了,所以我们只需要打开DMA传输方式就可以了~~~操作方法: Windows 98/Me 启用内存直接存取DMA 右击Windows桌面上的“我的电脑” 图标并从弹出菜单选择“属性”。系统属性窗口出现。单击“设备管理”标签。双击“CDROM驱动器”,查看硬盘驱动器列表。右击IDE DISK(可能会有其他名称,例如 GENERIC IDE DISK)并从弹出菜单选择 “属性”。该硬盘属性窗口出现。单击“设置”标签。选择“DMA”如果该项未选,然后单击“确认”。Windows问您是否要重新启动,单击是。 在Windows 2000启用内存直接存取DMA 作为管理员(或具管理员特权的用户)登录进入Windos。右击Windows 桌面上的“我的电脑”图标并从弹出菜单选择属性。系统属性窗口出现。单击硬件标签, 然后单击设备管理器。设备管理员窗口出现。双击 IDE ATA/ATAPI 控制器来查看控制器列表。双击主IDE 通道。主IDE信道属性窗口出现。单击高级设置标签。选择DMA,如果该项可从设备0的传输模式列表中找到的话。单击确认。Windows问您是否要重新 启动, 单击是。 在Windows XP启用内存直接存取DMA 作为管理员(或具管理员特权的用户)登录进入Windows。单击“开始”按钮,,然后右击“我的电脑”并从弹出菜单选择属性。系统属性窗口出现。单击 “硬件” 标签,,然后单击“设备管理员”。设备管理员窗口出现。双击“IDE ATA/ATAPI”控制器来查看控制器列表。双击“从IDE 通道”。从IDE通道属性窗口出现。单击“高级设置”标签。选择DMA,如果该项可从装置0(或1,视您的刻录机的跳线设置而定)的传输模式列表中找到的 话。单击确认。您不必重新启动 Windows。 ================================================

附录:DMA精读 /\

Copyright (C) 2000 Texas Instruments Incorporated

All Rights Reserved

------------------------------------------------------------------------------

FILENAME dma1c

DATE CREATED 01/11/2000

LAST MODIFIED 01/04/2001

\/

#include <stdh>

#include <logh> / Include DSPBIOS/CSL GUI configuration header file /

#include "dma1cfgh" #include <cslh>

#include <csl_irqh>

#include <csl_dmah> / Constant defines transfer length /

#define N 128 / Place src and dst of DMA transfer in seperate memory section /

/ to better control placement in user specified memory range /

#pragma DATA_SECTION(src,"dmaMem")

Uint16 src[N]; #pragma DATA_SECTION(dst, "dmaMem")

Uint16 dst[N];

/ This example effects a single-frame transfer of 128 /

/ elements from DARAM to DARAM, via DMA /

/ The macro invocation reflect the settings required in /

/ DMA control registers to make this happen / / DMACSDP dstben == 0 /

/ dstpack == 0 /

/ dst == 0 /

/ srcben == 0 /

/ srcpack == 0 /

/ src == 0 /

/ datatype == 1 /

/ /

/ DMACCR dstamode == 1 /

/ srcamode == 1 /

/ endprog == 0 /

/ fifoflush == 0 /

/ repeat == 0 /

/ autoinit == 0 /

/ en == 0 /

/ prio == 0 /

/ fs == 0 /

/ sync == 0 /

/ /

/ DMACICR blockie == 1 /

/ lastie == 1 /

/ frameie == 1 /

/ firsthalfie == 1 /

/ dropie == 1 /

/ timeoutie == 1 / DMA_Config myconfig = {

DMA_DMACSDP_RMK(

DMA_DMACSDP_DSTBEN_NOBURST,

DMA_DMACSDP_DSTPACK_OFF,

DMA_DMACSDP_DST_DARAM,

DMA_DMACSDP_SRCBEN_NOBURST,

DMA_DMACSDP_SRCPACK_OFF,

DMA_DMACSDP_SRC_DARAM,

DMA_DMACSDP_DATATYPE_16BIT

), / DMACSDP /

DMA_DMACCR_RMK(

DMA_DMACCR_DSTAMODE_POSTINC,

DMA_DMACCR_SRCAMODE_POSTINC,

DMA_DMACCR_ENDPROG_OFF,

DMA_DMACCR_FIFOFLUSH_OFF,

DMA_DMACCR_REPEAT_OFF,

DMA_DMACCR_AUTOINIT_OFF,

DMA_DMACCR_EN_STOP,

DMA_DMACCR_PRIO_HI,

DMA_DMACCR_FS_ENABLE,

DMA_DMACCR_SYNC_NONE

), / DMACCR /

DMA_DMACICR_RMK(

DMA_DMACICR_BLOCKIE_OFF,

DMA_DMACICR_LASTIE_OFF,

DMA_DMACICR_FRAMEIE_ON,

DMA_DMACICR_FIRSTHALFIE_OFF,

DMA_DMACICR_DROPIE_OFF,

DMA_DMACICR_TIMEOUTIE_OFF

), / DMACICR /

(DMA_AdrPtr) &src, / DMACSSAL /

0, / DMACSSAU /

(DMA_AdrPtr) &dst, / DMACDSAL /

0, / DMACDSAU /

N, / DMACEN /

1, / DMACFN /

0, / DMACFI /

0 / DMACEI /

}; / Define a DMA_Handle object /

DMA_Handle myhDma;

int i, j;

Uint16 err = 0;

volatile Bool WaitForTransfer = TRUE; void main(void)

{

/ Initialize source and destination buffers /

for (i = 0; i <= (N - 1); i++) {

dst[i] = 0;

src[i] = i + 1;

}

} void taskFxn(void)

{

/ Open DMA Channel 0 /

myhDma = DMA_open(DMA_CHA0, 0); / By default, the TMS320C55xx compiler assigns all data symbols word /

/ addresses The DMA however, expects all addresses to be byte /

/ addresses Therefore, we must shift the address by 2 in order to /

/ change the word address to a byte address for the DMA transfer /

myconfigdmacssal =

(DMA_AdrPtr)(((Uint16)(myconfigdmacssal))<<1);

myconfigdmacdsal =

(DMA_AdrPtr)(((Uint16)(myconfigdmacdsal))<<1); / Write configuration structure values to DMA control registers /

DMA_config(myhDma, &myconfig); / Enable DMA channel for to begin transfer /

DMA_FSETH(myhDma,DMACCR,EN,1); / Wait for FRAME status bit in DMA status register to signal /

/ transfer is complete /

while (!DMA_FGETH(myhDma,DMACSR,FRAME)) {

;

} / Check dta values to make sure transfer happened correctly /

for (i = 0; i <= (N - 1); i++) {

if (dst[i] != src[i]) {

++err;

}

} if (err) {

LOG_printf(&trace, ">>> Warning, DMA Example 1 Failed");

}

else {

LOG_printf(&trace, "DMA Example 1 Complete");

} / We are through with DMA, so close it /

DMA_close(myhDma);

} DMA Functions Function Purpose

DMA_close() Closes the DMA and its corresponding handler

DMA_config() Sets up DMA using configuration structure (DMA_Config)

DMA_configArgs() Sets up DMA using register values passed to the function

DMA_getConfig() Reads the DMA configuration

DMA_getEventId() Returns the IRQ Event ID for the DMA completion interrupt

DMA_open() Opens the DMA and assigns a handler to it

DMA_pause() Interrupts the transfer in the corresponding DMA channel

DMA_reset() Resets the DMA registers with default values

DMA_start() Enables transfers in the corresponding DMA channel

DMA_stop() Disables the transfer in the corresponding DMA channel

Trackback: >

简单地说是:控制是硬盘内部的控制读写,这样有利于减轻CPU负担,加快读取速度

复杂点,专业点:

Direct Memory Access(存储器直接访问)。这是指一种高速的数据传输操作,允许在外部设备和存储器之间直接读写数据,既不通过CPU,也不需要CPU干预。整个数据传输操作在一个称为"DMA控制器"的控制下进行的。CPU除了在数据传输开始和结束时做一点处理外,在传输过程中CPU可以进行其他的工作。这样,在大部分时间里,CPU和输入输出都处于并行操作。因此,使整个计算机系统的效率大大提高。

DMA的概念:DMA是在专门的硬件( DMA)控制下,实现高速外设和主存储器之间自动成批交换数据尽量减少CPU干预的输入/输出操作方式。通常有两种方式:

◎独占总线方式 ◎周期挪用方式

(2)DMA的组成:

◎主存地址寄存器

◎数据数量计数器

◎DMA的控制/状态逻辑

◎DMA请求触发器

◎数据缓冲寄存器

◎中断机构

(3)DMA的传送数据的过程:由三个阶段组成

◎传送前的预处理:由CPU完成以下步骤

向DMA卡送入设备识别信号,启动设备,测试设备运行状态,送入内存地址初值,传送数据个数, DMA的功能控制信号。

◎数据传送:在DMA卡控制下自动完成

◎传送结束处理

DMA 卡上应包括通用接口卡的全部组成部分,并多出如下内容:

主存地址寄存器,传送字数计数器,DMA控制逻辑,DMA请求,DMA响应,DMA工作方式,DMA优先级及排队逻辑等

一次完整的DMA传送过程:

DMA 预处理,CPU向DMA送命令,如DMA方式,主存地址,传送的字数等,之后CPU执行原来的程序

DMA 控制在 I/O 设备与主存间交换数据:

准备一个数据, 向CPU发DMA请求,取得总线控制权,进行数据传送,修改卡上主存地址,修改字数计数器内且检查其值是否为零,不为零则继续传送,若已为零,则向 CPU发中断请求

DMA技术的弊端:

因为DMA允许外设直接访问内存,从而形成对总线的独占。

这在实时性强的硬实时系统的嵌入式开发中将会造成中断延时过长。这在军事等系统中是不允许的。

1、DMA是直接内存访问。这是指一种高速的数据传输操作,允许在外部设备和存储器之间直接读写数据,既不通过CPU,也不需要CPU干预;

2、整个数据传输操作在DMA控制器的控制下进行的;

3、CPU除了在数据传输开始和结束时做一点处理外,在传输过程中CPU可以进行其他的工作。这样,在大部分时间里,CPU和输入输出都处于并行操作。因此,使整个计算机系统的效率大大提高;

4、DMA是在专门的硬件控制下,实现高速外设和主存储器之间自动成批交换数据尽量减少CPU干预的输入或

DMA是Digital Media Award的缩写,也就是亚太地区数码媒体协会的简称。唐旗数码科技有限公司的CEO Jabez G既是亚太数码媒体领域十大杰出设计大师之一,也是新媒体的代言人,数码媒体业的先驱者。在动漫多媒体和品牌传播设计领域有着丰富的经验,多次荣获国际奖项和区域大奖。凭借在多媒体行业的影响地位和良好的教育背景,Jabez G被选为亚太数码媒体协会的会长。

DMA传送方式有3种:单元传送方式、块传送方式和on-the-fly传送方式。与外部DMA请求/应答协议不同的是,DMA传送方式定义了每次传送读/写的单元数,如表所示。

(1)单元传送方式(单字节传送方式)

单元传送方式意味着每个DMA请求对应一对DMA读/写周期,即1个单元读,然后1个单元写。

(2)块传送方式(连续传送方式)

块传送方式意味着在连续4个字的DMA写周期前有连续的4个字的DMA读周期,即4个字突发读,然后4个字突发写,因此传输的数据个数应该是16字节的倍数。

如果传送大小或者DMA计数值不是16的倍数,则DMA将不能完整地传送完数据。假设要传送的数据为50个字节,则316=48字节,会导致2个字节不能被传送,DMA在传送48个字节后停止。所以,选择DMA块传送方式时,一定要注意这一点。

(3)on-the-fly传送方式(请求传送方式)

在on-the-fly传送方式下DMA读/写可以同时进行。DMA应答信号通知外部设备去读或者写。同时,存储控制器将产生与读/写相关的控制信号给外部存储器。如果外部设备能够支持on-the-fly传送方式,将会使得外设的数据传输速率大大地增加。

停止CPU访问内存

当外围设备要求传送一批数据时,由DMA控制器发一个停止信号给CPU,要求CPU放弃对地址总线、数据总线和有关控制总线的使用权。DMA控制器获得总线控制权以后,开始进行数据传送。在一批数据传送完毕后,DMA控制器通知CPU可以使用内存,并把总线控制权交还给CPU。在这种DMA传送过程 中,CPU基本处于不工作状态或者说保持状态。

优点:控制简单,它适用于数据传输率很高的设备进行成组传送。

缺点:在DMA控制器访内阶段,内存的效能没有充分发挥,相当一部分内存工作周期是空闲的。这是因为,外围设备传送两个数据之间的间隔一般总是大于内存存储周期,即使高速I/O设备也是如此。

周期挪用

当I/O设备没有DMA请求时,CPU按程序要求访问内存;一旦I/O设备有DMA请求,则由I/O设备挪用一个或几个内存周期。

I/O设备要求DMA传送时可能遇到两种情况:

(1)此时CPU不需要访内,如CPU正在执行乘法指令。由于乘法指令执行时间较长,此时I/O访内与CPU访内没有冲突,即I/O设备挪用一二个内存周期对CPU执行程序没有任何影响。

(2)I/O设备要求访内时CPU也要求访内,这就产生了访内冲突,在这种情况下I/O设备访内优先,因为I/O访内有时间要求,前一个I/O数据必须在下一个访内请求到来之前存取完毕。显然,在这种情况下I/O设备挪用一二个内存周期,意味着CPU延缓了对指令的执行,或者更明确地说,在CPU执行访内指令的过程中插入DMA请求,挪用了一二个内存周期。

与停止CPU访内的DMA方法比较,周期挪用的方法既实现了I/O传送,又较好地发挥了内存和CPU的效率,是一种广泛采用的方法。但是I/O设备每一次周期挪用都有申请总线控制权、建立总线控制权和归还总线控制权的过程,所以传送一个字对内存来说要占用一个周期,但对DMA控制器来说一般要2—5个 内存周期(视逻辑线路的延迟而定)。因此,周期挪用的方法适用于I/O设备读写周期大于内存存储周期的情况。

DMA与CPU交替访内

如果CPU的工作周期比内存存取周期长很多,此时采用交替访内的方法可以使DMA传送和CPU同时发挥最高的效率。假设CPU工作周期为 12μs,内存存取周期小于06μs,那么一个CPU周期可分为C1和C2两个分周期,其中C1供DMA控制器访内,C2专供CPU访内。

这种方式不需要总线使用权的申请、建立和归还过程,总线使用权是通过C1和C2分时进行的。CPU和DMA控制器各自有自己的访内地址寄存器、数据寄存 器和读/写信号等控制寄存器。在C1周期中,如果DMA控制器有访内请求,可将地址、数据等信号送到总线上。在C2周期中,如CPU有访内请求,同样传送 地址、数据等信号。事实上,对于总线,这是用C1,C2控制的一个多路转换器,这种总线控制权的转移几乎不需要什么时间,所以对DMA传送来讲效率是很高的。

这种传送方式又称为“透明的DMA”方式,其来由是这种DMA传送对CPU来说,如同透明的玻璃一般,没有任何感觉或影响。在透明的DMA方式下工作,CPU既不停止主程序的运行,也不进入等待状态,是一种高效率的工作方式。当然,相应的硬件逻辑也就更加复杂。

以上就是关于单片机中DMA是什么意思全部的内容,包括:单片机中DMA是什么意思、DMA方式的工作过程、DMA指标是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

转载请注明原文地址:https://juke.outofmemory.cn/read/3714727.html

最新回复(0)