1. EDMA3概述
基於C66x的內核處理器主要具有兩種DMA傳輸:IDMA、EDMA3。
IDMA:只提供核內部(L1P、L1D、L2、CFG)的數據移動服務。
EDMA3:實現器件上兩個存儲器映射的從終端(Slave Endpoint)之間的數據傳輸(如DDR3、MSM SRAM、L2)。
EDMA3控制器由用戶設定,服務於器件上兩個存儲器映射的從終端之間的數據傳輸;服務於軟件驅動的頁傳輸(例如,在外部存儲器和內部存儲器之間),執行分解或子幀取出多種數據結構,服務事件驅動的外圍設備並減輕器件CPU數據傳輸任務。
2. EDMA3淺析
2.1 EDMA3構成
C6678處理器中,IDMA具有兩個通道,EDMA具有三個通道控制器(CC0、CC1、CC2)和10個傳輸控制器(CC0TC0、CC0TC1,CC1TC0、CC1TC1、CC1TC2、CC1TC3,CC2TC0、CC2TC1、CC2TC2、CC2TC3)。
如圖2-1所示,CC0有16個DMA通道,8個QDMA通道,16箇中斷通道,2個事件隊列,2個傳輸控制TC;CC1有64個DMA通道,8個QDMA通道,64箇中斷通道,4個事件隊列,4個傳輸控制TC;CC2有64個DMA通道,8個QDMA通道,64箇中斷通道,4個事件隊列,4個傳輸控制TC。
圖2-1 EDMA3 CC資源圖
每個TC的資源情況如圖2-2所示。
圖2-2 EDMA3 TC資源圖
2.2 功能用法
CC0被優化用於內部MSMC(Multicore Shared Memory Controller)和DDR3子系統之間的數據傳輸,CC1、CC2被用作系統外圍設備和在系統存儲器間移動數據等其他傳輸。
每個CC有兩種通道類型:DMA通道和QDMA通道。每個通道與一個給定的事件隊列、傳輸控制器相關,並與一個給定的PaRAM參數集相關。
DMA通道和QDMA通道的主要區別在於傳輸是如何被系統觸發的。
DMA通道傳輸必需一個觸發事件。QDMA通道傳輸只需設定好觸發字即可自動觸發。
每個事件隊列深度是16,同一時刻最多支持16個傳輸事件。
每個DMA、QDMA通道分配到的事件隊列是可編程的。
如果在不同的通道上,事件同時被檢測,事件隊列會基於一個固定優先級仲裁機制仲裁。DMA通道具有比QDMA通道更高的優先級。最小編號的通道最有最高優先級。
每個事件在事件隊列中按照FIFO順序被處理。
DMA、QDMA的channel可以統一一起連續編號,TI就是如此處理的。
Global Region和Shadow Region的區別:當使用Global Region配置EDMA時,所有內核都會響應;當使用Shadow Region時,通過DRAE/DRAEH(對於DMA)和QRAE/QRAEH(對於QDMA)寄存器將不想觸發的事件屏蔽,這樣即使系統中的事件觸發了,Shadow Region中對應的事件也不會觸發。當使用global region配置EDMA時,所有的core都會響應,這樣就存在某些core不想使用的event也會被觸發,如果使用shadow region,通過DRE/DREH將不想觸發的event屏蔽,這樣即便系統中對應的event觸發了,shadow region中的event也不會觸發。