soc 中沒有 dma 模塊
soc 中 其餘模塊 不少 都和 dma 有 直接關係
爲 cpu 減負
內存A地址數據(源)到內存B地址(目的)的直接(without cpu)傳輸
內存A地址數據(源)到設備B地址(目的)的直接(without cpu)傳輸
設備A地址數據(源)到內存B地址(目的)的直接(without cpu)傳輸
dma控制器
數據流
通道(請求)
仲裁器
1個控制器 及1個仲裁器(根據數據流的優先級仲裁)
8個數據流 (有優先級)
8個通道可選,只能設置1個通道
雖然1個數據流有8個通道,可是同一時間只有1個通道能夠鏈接到該數據流,進而鏈接到控制器
初始化時只能設置1個通道鏈接到該數據流,且固定位該通道
數據流之間有優先級
dma請求的觸發
軟件觸發
外設觸發
一次dma請求包括什麼
源地址
目標地址
數據項的長度(1-65535)
源和目的的傳輸寬度不一樣(8bit,16bit,32bit),怎麼處理
dma的FIFO模式自動封裝、解封必要的傳輸數據來優化帶寬
增量運算
dma 事件
dma半傳輸
dma傳輸完成
dma傳輸錯誤
dma fifo 錯誤
直接模式錯誤
數據流配置
單緩衝類型事務
雙緩衝類型事務
發送模式
遞增模式
循環模式
1. 關閉數據流
清0 DMA_SxCR 的 EN 位 .讀若爲0,則第二步
2. 設置源地址,目標地址(DMA_SxPAR DMA_SxM0AR)
3. 設置存儲方向
4. 配置一次傳輸數據數目.
5. 將通道掛載到數據流 DMA_SxCR[2:0]
6. 配置數據流的優先級 PL[1:0]
7. 配置fifo使用狀況(禁止 或 使能和接收閾值)
8. 配置 外設和存儲器增量/固定模式 單獨或突發事務 外設和存儲器數據寬度 循環模式 雙緩衝區模式 和 中斷標誌位的使能
9. 激活數據流
置位 DMA_SxCR[1]
9步以後,外設發出了dma請求,便可響應(數據搬運)。若是使能了標誌位,還會來中斷
源 目的
外設->存儲器 DMA_SxPAR DMA_SxM0AR
存儲器->外設 DMA_SxM0AR DMA_SxPAR
存儲器->存儲器 DMA_SxPAR DMA_SxM0AR