總線上的數(shù)據(jù)的傳遞有兩種形式。一種為程控輸入/輸出(PIO)另一種為直接存儲器訪問(DMA)。
1、PIO
使用PIO時,CPU是主模塊,總線上數(shù)據(jù)的讀取由CPU上運行的軟件程序直接發(fā)起,傳遞的數(shù)據(jù)一定進過CPU(如下面的一、二所述)。
一、軟件指令或者將已經(jīng)存放在CPU數(shù)據(jù)寄存器中的數(shù)據(jù)發(fā)送到目標(biāo)被控模塊;
二、或者將目標(biāo)被控模塊里的一個數(shù)據(jù)讀入,放到CPU的數(shù)據(jù)寄存器中。
例如:需要將數(shù)據(jù)從模塊A---轉(zhuǎn)移到----模塊B,軟件將這個任務(wù)分解為兩個PIO操作
第一步:從模塊A讀取數(shù)據(jù),并存放到CPU的數(shù)據(jù)寄存器中;
第二步:將存放在CPU數(shù)據(jù)寄存器中的數(shù)據(jù)寫入到模塊B。
2、DMA
由于鏈接芯片與芯片之間的系統(tǒng)總線的時鐘頻率比CPU內(nèi)部的時鐘頻率要低許多,用PIO讀寫大量的數(shù)據(jù)是一種非常低效的方式占用CPU的處理能力。所以需要利用專門的硬件來協(xié)助執(zhí)行,在芯片與芯片之間或者模塊與模塊之間數(shù)據(jù)傳輸。這就是DMA。
此時軟件只需要將傳輸數(shù)據(jù)要求使用PIO通知DMA硬件,DMA硬件按照要求執(zhí)行數(shù)據(jù)的傳輸。這期間CPU繼續(xù)進行其他工作。當(dāng)DMA硬件執(zhí)行完畢數(shù)據(jù)的傳輸任務(wù)之后,通過中斷信號或這通過向主存儲的某個特定地址寫入特定的數(shù)值,通知軟件。
一個DMA硬件通常包括多個DMA通道。每個通道一般用于一對模塊之間的數(shù)據(jù)傳輸,通道之間相互獨立。
DMA描述符用于指定如何傳輸數(shù)據(jù)塊。一個DMA描述符至少包括數(shù)據(jù)傳輸?shù)脑吹刂罚⊿A)、目的地址(DA)、需要傳輸?shù)臄?shù)據(jù)量(data size)、和每次總線傳輸?shù)臄?shù)據(jù)量(transfer size)。有些DMA模塊要求軟件將DMA描述符的數(shù)據(jù)結(jié)構(gòu)存放在主存儲器中,使用這個方法的好處時軟件可以十分有效的建立DMA描述符。在DMA執(zhí)行一個DMA數(shù)據(jù)傳輸任務(wù)之前,DMA先要用DMA的方法,將存放在CPU主存儲的DMA描述符讀到DMA模塊中。
DMA將一個數(shù)據(jù)塊的傳輸分為兩個步驟。
第一步:從源地址的被控模塊讀取數(shù)據(jù);
第二步:將讀取的數(shù)據(jù)寫入目的地址的被控模塊。
根據(jù)DMA描述符的規(guī)定,DMA可以在傳輸了一個數(shù)據(jù)塊之后,自動的將源地址和目的地址更新到下一個數(shù)據(jù)塊地址,然后DMA開始傳輸下一個數(shù)據(jù)塊,一直傳輸完實際要求傳輸?shù)臄?shù)量級。假設(shè)一個DMA開始傳輸?shù)臄?shù)據(jù)量是128Byte,每次傳輸?shù)臄?shù)據(jù)塊是16Byte,為了完成這個DMA描述符指定的數(shù)據(jù)傳輸,DMA自動進行8次總線讀取和8次總線寫入。這些傳輸路徑不經(jīng)過CPU
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
6808瀏覽量
88743 -
總線
+關(guān)注
關(guān)注
10文章
2858瀏覽量
87912 -
dma
+關(guān)注
關(guān)注
3文章
556瀏覽量
100344 -
PIO
+關(guān)注
關(guān)注
0文章
18瀏覽量
6187
原文標(biāo)題:總線的兩種數(shù)據(jù)傳遞形式:PIO、DMA
文章出處:【微信號:mcugeek,微信公眾號:MCU開發(fā)加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論