導航:首頁 > 數據處理 > dma傳輸數據已完畢怎麼查

dma傳輸數據已完畢怎麼查

發布時間:2023-07-24 02:19:07

① DMA方式的工作過程

實現DMA傳送的基本操作如下:

1、外設可通過DMA控制器向CPU發出DMA請求;

2、CPU響應DMA請求,系統轉變為DMA工作方式,並把匯流排控制權交給DMA控制器;

3、由DMA控制器發送存儲器地址,並決定傳送數據塊的長度;

4、執行DMA傳送;

5、DMA操作結束,並把匯流排控制權交還CPU。

(1)dma傳輸數據已完畢怎麼查擴展閱讀

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通道。那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...... dma1.c
* DATE CREATED.. 01/11/2000
* LAST MODIFIED. 01/04/2001
\******************************************************************************/
#include <std.h>
#include <log.h> /* Include DSPBIOS/CSL GUI configuration header file */
#include "dma1cfg.h" #include <csl.h>
#include <csl_irq.h>
#include <csl_dma.h> /* 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. */
myconfig.dmacssal =
(DMA_AdrPtr)(((Uint16)(myconfig.dmacssal))<<1);
myconfig.dmacdsal =
(DMA_AdrPtr)(((Uint16)(myconfig.dmacdsal))<<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: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1568514 本文來自CSDN博客,轉載請標明出處: http://blog.csdn.net/zhongrg/archive/2007/11/18/1891323.aspx

閱讀全文

與dma傳輸數據已完畢怎麼查相關的資料

熱點內容
美團技術服務費折扣系數怎麼續 瀏覽:313
塗料產品檢測哪些 瀏覽:287
亞馬遜上傳的產品怎麼清理 瀏覽:42
微分子技術用到護膚品中會怎麼樣 瀏覽:68
如何找到小程序推送消息 瀏覽:298
美股沒有盤前交易說明什麼 瀏覽:64
地圖產品怎麼傳遞 瀏覽:721
棗庄智慧經營代理哪裡有店 瀏覽:766
製作微信小程序時攝氏度如何表達 瀏覽:891
數字程序卡哪裡有賣 瀏覽:121
流沙有哪些市場 瀏覽:624
大數據把多少小企業搞死 瀏覽:100
apachedruid是什麼資料庫 瀏覽:588
手機程序包換了怎麼辦 瀏覽:648
如何清除王者榮耀微信數據 瀏覽:503
網路扶貧產品有哪些 瀏覽:384
上技術學院需要准備什麼 瀏覽:589
數據類型哪些是字元型 瀏覽:33
售賣偽造3c的產品怎麼判 瀏覽:11
哪個手機上的小程序能看電視劇 瀏覽:251