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