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