510 likes | 655 Views
DMA 控制器. 大綱. DMA 簡介 概論 DMAC 資料傳送 DMAC 暫存器. DMA 簡介. 早期電腦系統的週邊設備,以中斷 CPU 目前的工作來獲得 CPU 的服務。 CPU 經常處於被中斷的狀況下,而導致系統效能降低 。 DMA 運作模式是週邊設備不必經過 CPU 處理,大量資料區塊能與記憶體建立直接傳輸的通道。. 概論. DMAC 可以將內部與外部週邊裝置的資料傳送至主記憶體,從主記憶體傳送資料至週邊裝置,或將資料從主記憶體傳送到主記憶體 DMAC 具有 16 個優先權式的通道 (channel0~channel15 )
E N D
DMA 控制器 5-1
大綱 • DMA簡介 • 概論 • DMAC • 資料傳送 • DMAC暫存器 5-2
DMA簡介 • 早期電腦系統的週邊設備,以中斷CPU目前的工作來獲得CPU的服務。 • CPU經常處於被中斷的狀況下,而導致系統效能降低 。 • DMA運作模式是週邊設備不必經過CPU處理,大量資料區塊能與記憶體建立直接傳輸的通道。 5-3
概論 DMAC可以將內部與外部週邊裝置的資料傳送至主記憶體,從主記憶體傳送資料至週邊裝置,或將資料從主記憶體傳送到主記憶體 • DMAC具有16個優先權式的通道(channel0~channel15) • DMAC服務提出傳送要求的對象 • 任何內部的周邊裝置 • 最多兩個外部的輔助晶片(companion chip) 5-4
DMAC(DMA控制器) • XScale晶片的DMAC特性 • DMAC區塊圖 • DMAC通道 • 訊號說明 • DMA_IRQ • DMA通道優先權排程 • DMA敘述元 • DMA通道狀態 • 讀取與寫入順序 • 位元組傳送順序 5-5
XScale晶片的DMAC特性 • 支援Flow-through傳送方式 • 資料會先通過DMAC後,才會被目的裝置的緩衝區或記憶體拴鎖住(latched) • 支援以敘述元為基礎(descriptor-based)的傳輸方式,因此可允許許多命令形成串列或迴圈結構 5-6
DMAC區塊圖 5-7
DMAC通道 • DMAC具有16個通道,每一個通道由4個32位元的暫存器所控制 • 每個通道可以經由設定其組態,以Flow-through傳輸方式服務任何內部的週邊設備或外部的週邊設備的其中一個 5-8
訊號說明 • DREQ[1:0]: • 當需要DMA傳輸請求時,外部輔助晶片會產生DREQ[1:0]訊號 • PREQ[37:0]: • 為晶片內部週邊的主動高位內部訊息 5-9
DREQ[1:0]訊號 • DREQ[1:0]訊號必須維持觸發狀態4個MEMCLK之久,以允許DMA辨別0至1的轉換。 • DREQ[1:0]訊號反觸發時,它們必須維持反觸發狀態至少4個MEMCLK之久。 • DMAC紀錄從0至1的轉換來辨別是否是一個新的要求。 • 除非前面的DMA資料開始傳送,否則外部輔助晶片不可觸發另一個DREQ。 5-10
DMA_IRQ • 應用處理器具有16個IRQ訊號,每一個DMA通道都對應一個 • 每個DMA_IRQ都可在DMA中斷暫存器DINT內被讀取 • 使用者可遮蔽通道的DMA命令暫存器DCMD的一些位元來引發通道的中斷,例如:結束中斷致能位元ENDIRQEN、啟動中斷致能位元STARTIRQEN與停止中斷致能位元STOPIRQEN 5-11
DMA通道優先權排程 • 允許需要大頻寬的週邊比需要較小頻寬的週邊有較多機會得到服務 • DMA通道內部分為4個組,每個組包含4個通道,在一個組中,每個通道會循環(round-robin)取得優先權 • 將DMA通道的4個組設定為0、1、2、3來排列優先順序,在一次循環中的服務順序為:0→1→0→2→0→1→0→3 5-12
所有通道同時執行時的通道優先權 5-13
非所有通道同時執行時的通道優先權 • 狀態器之狀態在重置時為0 • 每當有一個通道被服務時,狀態器之狀態增加1 • 當狀態器的狀態為7時,下一個狀態回到0 所有通道同時執行時的執行順序 5-14
通道優先權方法的範例 5-15
DMA敘述元 • DMAC有兩種不同的操作模式: • 敘述元抓取模式(Descriptor Fetch Mode) • 非敘述元抓取模式 (No-Descriptor Fetch Mode) • 設定DMA通道控制/狀態暫存器DCSRx[NODESCFETCH]位元來決定使用哪種模式 • 此兩種模式可同時在不同通道上使用,即當有些DMA通道在一個模式執行時,其他通道可在另一個模式執行 • 通道必須先停止執行,才可從一種模式換成另一種模式 5-16
DMA敘述元(cont.) • 非敘述元抓取模式: • 在非敘述元抓取模式,敘述元位址暫存器DDADRx是保留的 • 軟體不可對DMA敘述元位址暫存器DDADRx做寫入,而且必須載入DMA來源位址暫存器DSADRx、DMA目的位址暫存器DTADRx與DMA命令暫存器DCMDx • 當設定執行位元時,DMAC立刻開始傳輸資料,並且執行非敘述元抓取 • 敘述元抓取模式: • 在此模式中,DMAC暫存器由主記憶體裡的DMA敘述元來載入 • 允許DMA通道傳輸資料至一些不連續的位置 5-17
DMA通道狀態 • 未初始化:重置之後通道為未初始化狀態 • 有效敘述元,非執行: • 在敘述元抓取模式裡,軟體載入敘述元到通道的DDADR中 • 在非敘述元抓取模式裡,程式化DSADR、DTADR與DCMD數值 • 敘述元抓取,執行:從記憶體抓取敘述元 • 等待請求:在通道開始傳送資料之前,它會先等待請求 • 傳送資料:通道正在傳送資料 • 通道錯誤:通道發生錯誤,它會維持停止狀態直到軟體清除錯誤條件與重新初始化通道 • 停止:通道已停止 5-18
非敘述元抓取模式通道狀態 5-19
敘述元抓取模式通道狀態 5-20
讀取與寫入順序 • DMAC確保資料不會保留在敘述元之間的通道緩衝區內 • 當一個敘述元被處理完成,通道內緩衝的讀取資料會被丟棄,而寫入資料會送至記憶體 • 直到敘述元被完全處理後,才會發佈DMA中斷 5-21
位元組傳送順序 • DCMD[ENDIAN]位元指示當資料從記憶體內讀取或寫入至記憶體時字組內的位元組順序 • DCMD[ENDIAN]位元設定為0:Little Endian傳輸 5-22
Little Endian傳送 5-23
尾端位元組處理 • 一般DMA傳輸的位元組大小和由DCMD[SIZE]所指定的處理大小相同 • 當敘述元處理資料的尾端時,在DCMD[LENGTH]區域裡的尾端位元組的數目也許會小於傳輸的位元組大小 • 若DCMD[FLOWSRC]和DCMD[FLOWTRG]位元都是0(均為立即開始傳輸),或是從內部週邊或輔助晶片接收到對應的要求,則DMA可以傳輸確切的尾端位元組數 5-24
尾端位元組處理需考慮的案例 • DMA傳輸的位元組數目大小等於DCMD[LENGTH]或DCMD[SIZE]的最小值 • 記憶體至記憶體移動 • 輔助晶片相關傳輸 • 輔助晶片需提出要求 • 記憶體對內部週邊傳輸 • 大部分的週邊會傳送一個尾端位元組的傳送要求 • 內部週邊至記憶體傳輸 • 若週邊傳送出一個要求時 • 注意:大部分的周邊並不對尾端的位元組傳送出要求 5-25
尾端位元組處理需考慮的案例(cont.) • 使用程式化I/O來處理尾端位元組 • 內部週邊至記憶體傳輸 • 週邊不傳送要求給尾端位元組時 • 必須依照以下的操作順序 • 將0寫入至DCSR[RUN]位元來停止DMA通道 • 等待直到通道停止 • 讀取通道的暫存器來檢查通道的狀態 • 執行程式化I/O傳送到週邊(非透過DMA) • 設定DCSR[RUN]位元為1並重置DMA通道使得DMA通道能準備好以便進行未來的資料傳送 5-26
傳送資料 • 傳送資料說明 • 服務內部週邊 • 內部週邊DMA快速參考表 • 使用Flow-Through DMA讀取週期來服務內部週邊 • 使用Flow-Through DMA寫入週期來服務內部週邊 • 服務輔助晶片和外部週邊 • 使用Flow-Through DMA讀取週期來服務外部週邊 • 使用flow-through DMA寫入來服務外部週邊 • 記憶體至記憶體移動 5-27
傳送資料說明 • 內部週邊與DMAC經由週邊匯流排連接,並使用Flow-through資料傳輸方式 • DMAC可使用Flow-through傳輸模式來傳輸資料到任何記憶體位址,也可執行資料從記憶體至記憶體的移動 • 除了寫入至快閃記憶體之外,主記憶體包含應用處理器所支援的任何記憶體 • 不支援寫入資料到快閃記憶體中,若寫入快閃記憶體,會引起一個匯流排錯誤 5-28
服務內部週邊 • DMAC提供DMA要求給DMA要求通道對應暫存器(DMA Request Channel Map Register)(DRCMRx) • DMA要求通道對應暫存器包含4個用來指定通道號碼的位元 • 內部週邊可被對應到16個可使用的通道的任何一個 • 內部週邊經由週邊要求匯流排(PREQ)來觸發要求位元 • 有任何一個PREQ訊號不為0,則根據DRCMRx對應的位元執行一個查詢的動作 • 內部週邊位址若在DSADR內,則DCMDx[FLOWSRC]位元必須設定為1。允許應用處理器在開始傳送之前等待要求 • 內部週邊位址若在DTADR裡,則DCMDx[FLOWTRG]位元必須設定為1 • 若DCMD[IRQEN]被設定為1,假如傳輸中的一個位元組導致DCMDx[LENGTH]減少為0,在該位元組傳輸的最後一個週期結束時會要求一個DMA中斷 5-29
內部週邊DMA快速參考表 5-30
內部週邊DMA快速參考表 (cont.) 5-31
內部週邊DMA快速參考表 (cont.) 5-32
內部週邊DMA快速參考表 (cont.) 5-33
使用Flow-Through DMA讀取週期來服務內部週邊 • 當內部週邊經PREQ匯流排傳送一個要求給DMAC通道,而DMAC正在執行且設定組態為flow-through讀取時,內部週邊的flow-through DMA讀取就會開始執行。 • 傳輸的位元組數目由DCMDx[SIZE]指定 • 當要求為最高優先權的要求時,開始進行以下的過程: • DMAC送出一個要求給記憶體控制器,將由DSADRx[31:0]定址的位元的數目讀取至DMAC內部的一個32位元組的臨時緩衝區。 • DMAC傳送資料給定址在DTADRx[31:0]的I/O設備。DCMD[WIDTH]指定內部週邊資料傳輸的寬度。 • 傳輸的最後,DSADRx值會增加,增加的值即為DCMDx[LENGTH]和DCMD[SIZE]的兩者中的較小值。DCMDx[LENGTH]也會減少相同的值。 5-34
使用Flow-Through DMA讀取週期來服務內部週邊 (cont.) • 在此模式下,DMAC暫存器位元的內容設定為 • DSADR[SRCADDR] = 外部記憶體位址 • DTADR[TRGADDR] = 內部週邊位址 • DCMD[INCSRCADDR] = 1 • DCMD[FLOWSRC] = 0 • DCMD[FLOWTRG] = 1 5-35
使用Flow-Through DMA寫入週期來服務內部週邊 • 當內部週邊經PREQ匯流排傳送一個要求給DMAC通道,而DMAC正在執行且設定組態為flow-through寫入時,內部週邊的flow-through DMA讀取就會開始執行 • 傳輸的位元組數目由DCMDx[SIZE]指定 • 當要求為最高優先權的要求時,會開始進行以下的過程: • DMAC從DSADRx[31:0]所定址的I/O設備傳送所需要的位元組數到DMAC寫入緩衝區。 • DMAC經由內部匯流排傳送資料給記憶體控制器。DCMD[WIDTH]指定內部週邊資料傳輸的速度。 • 在傳輸的最後,DTADRx值會增加,增加的值即為DCMDx[LENGTH]和DCMD[SIZE]的兩者中的較小值。DCMDx[LENGTH]也會減少相同的值。 5-36
使用Flow-Through DMA寫入週期來服務內部週邊 (cont.) • 在此模式下,DMAC暫存器位元的內容設定為 • DSADR[SRCADDR] = 內部週邊位址 • DTADR[TRGADDR] = 外部記憶體位址 • DCMD[INCTRGADDR] = 1 • DCMD[FLOWSRC] = 1 • DCMD[FLOWTRG] = 0 5-37
服務輔助晶片和外部週邊 • 輔助晶片的要求為DREQ[1:0]。DREQ訊號可對應到16個可使用的通道之一。 • 若有任何DREQ訊號測試結果不為0,則會檢查DRCMRx裡對應的位元。 • 若外部週邊位址是在DSADR或DTADR內,則DCMDx[FLOWSRC]位址必須設定為1。這允許應用處理器在開始傳輸之前先等待要求。 • 若DCMDx[IRQEN]設定為1,在最後一個週期的尾端,會要求一個DMA中斷。最後週期是和可使DCMDx[ENGTH] 減少為0的位元組有關。 5-38
使用Flow-Through DMA讀取週期來服務外部週邊 • 當外部週邊經DREQ[1:0]匯流排傳送一個要求給DMAC通道,而DMAC正在執行且設定組態為flow-through讀取時,外部週邊的flow-through DMA讀取就會開始執行 • 傳輸的位元組數目由DCMDx[SIZE]指定 • 當要求為最高優先權的要求時,會開始進行以下的過程: • DMAC送出一個要求給記憶體控制器,將由DSADRx[31:0]定址的位元的數目讀取至DMAC內部的一個32位元組的臨時緩衝區。 • DMAC傳輸緩衝區內的資料給定址在DTADRx[31:0]的外部設備。 • 傳輸的最後,DTADRx值會增加,增加的值即為DCMDx[LENGTH]和DCMD[SIZE]的兩者中的較小值。DCMDx[LENGTH]也會減少相同的值。 5-39
使用Flow-Through DMA讀取週期來服務外部週邊(cont.) • 在此模式下,DMAC暫存器位元的內容設定為 • DSADR[SRCADDR] = 外部記憶體位址 • DTADR[TRGADDR] = 輔助晶片位址 • DCMD[INCSRCADDR] = 1 • DCMA[INCTRGADDR] = 0 • DCMD[FLOWSRC] = 0 • DCMD[FLOWTRG] = 1 5-40
使用flow-through DMA寫入來服務外部週邊 • 當外部週邊經DREQ[1:0]匯流排傳送一個要求給DMAC通道,而DMAC正在執行且設定組態為flow-through讀取時,外部週邊的flow-through DMA讀取就會開始執行 • 傳輸的位元組數目由DCMDx[SIZE]指定 • 當要求為最高優先權的要求時,會開始進行以下的過程: • DMAC從DSADRx[31:0]所定址的I/O設備傳送所需要的位元組數到DMAC寫入緩衝區。 • DMAC經內部匯流排傳送資料給記憶體控制器。 • 在傳輸的最後,DTADRx值會增加,增加的值即為DCMDx[LENGTH]和DCMD[SIZE]的兩者中的較小值。DCMDx[LENGTH]也會減少相同的值。 5-41
使用flow-through DMA寫入來服務外部週邊(cont.) • 在此模式下,DMAC暫存器位元的內容設定為 • DSADR[SRCADDR] = 輔助晶片位址 • DTADR[TRGADDR] = 外部記憶體位址 • DCMD[INCSRCADDR] = 0 • DCMD[INCTRGADDR] = 1 • DCMD[FLOWSRC] = 1 • DCMD[FLOWTRG] = 0 5-42
記憶體至記憶體移動 • 處理器寫入至DCSR[RUN]位元,並且設定一個通道做記憶體至記憶體移動。DCMDx[FLOWSRC]與DCMD[FLOWTRG]位元必須設定為0。 • 若DCMD[IRQEN]被設定為1,在最後一個週期會引發一個DMA要求,而此週期與引起DCMDx[LENGTH]從1減少為0的位元組有關。 • 下列為一個flow-through DMA記憶體至記憶體讀取與寫入之步驟: • 處理器寫入至DCSR[RUN]暫存器位元,並且開始做記憶體至記憶體的移動。 • 若應用處理器為敘述元抓取模式,通道會設定組態來抓取4字組的敘述元。通道傳送資料不會等待PREQ與DREQ被觸發。DCMDx[SIZE]與DCMDx[LENGTH]兩者中較小的值即為被傳送的位元組數目。 • DMAC傳送要求至記憶體控制器,將由DSADRx[31:0]定址的位元的數目讀取至DMAC內部的一個32位元組的臨時緩衝區。 • DMAC產生一個寫入週期至DTADRx[31:0]內定址的位置。 • 在傳送的最後,DSADRx與DTADRx會增加,而增加的值即為DCMD[SIZE]與DCMDx[LENGTH]兩者中較小的值。 5-43
DMAC暫存器 • DMAC含有下列暫存器: • DMA中斷暫存器(DINT) • DMA通道控制/狀態暫存器(DCSR) • DMA請求至通道映象暫存器(DRCMR) • DMA敘述元位址暫存器(DDADR) • DMA來源位址暫存器(DSADR) • DMA目標位址暫存器(DTADR) • DMA命令暫存器(DCMD) 5-44
DMA中斷暫存器(DINT) • DINT記錄每一個通道的中斷 5-45
DMA通道控制/狀態暫存器(DCSR) • DCSR包含每個通道的控制與狀態位元 • 讀取此暫存器可找出中斷的來源 • 將讀取的值寫回暫存器可清除中斷 5-46
DMA請求至通道映象暫存器(DRCMR) • 對DRCMRx之讀取/寫入請求會將每個DMA請求對應至通道 5-47
DMA敘述元位址暫存器(DDADR) • DDADR包含特定通道的下一個敘述元的記憶體位址 • 在啟動電源時,此暫存器內的位元是未定義的 • DDADR不包含任何其他內部週邊暫存器或DMA暫存器的位址 • 若通道為非敘述元抓取模式,則DDADR為保留的 5-48
DMA來源位址暫存器(DSADR) • 在敘述元抓取模式,DSADR只可讀取 • 在非敘述元抓取模式,DSADR可讀取及寫入 • DSADR包括特定通道目前的敘述元來源位址 • 在啟動電源時,此暫存器的位元是未定義的 • DSADR不包括任何其他內部DMA、LCD或MEMC暫存器的位址 5-49
DMA目標位址暫存器(DTADR) • 在敘述元抓取模式,DTADR只可讀取 • 在非敘述元抓取模式,DTADR可讀取及寫入 • 包含目前通道內的敘述元的目標位址(內部週邊或記憶體位置的位址) • 在啟動電源時,暫存器內的位元是未定義的 • DTADR不包含任何內部DMA、LCD或MEMC暫存器的位址 • DTADR不包含快閃記憶體的位址,因為不支援從DMAC寫入至快閃記憶體 5-50