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