一.dma常識.
1.作用:實現(xiàn)片內(nèi)數(shù)據(jù)之間的高速傳輸。即是能夠不占用cpu實現(xiàn)數(shù)據(jù)傳輸。
2.模式:外設(shè)到存儲器傳輸、存儲器到外設(shè)傳輸和存儲器到存儲器傳輸三種傳輸模式。
3.stm32中的dma支持外設(shè)通道選擇,并且可以用仲裁器配置adc對數(shù)據(jù)流的處理順序。
4.dma帶有一個被稱為fifo的東西,主要配置fifo來實現(xiàn)對傳輸雙方要求字長不匹配的調(diào)整。即所謂
FIFO 對于要求源地址和目標(biāo)地址數(shù)據(jù)寬度不同時非常有用,比如源數(shù)據(jù)是源源不斷的字節(jié)數(shù)據(jù),而目標(biāo)地址要求輸出字寬度的數(shù)據(jù),即在實現(xiàn)數(shù)據(jù)傳輸時同時把原來 4 個 8 位字節(jié)的數(shù)據(jù)拼湊成一個 32 位字數(shù)據(jù)。此時使用 FIFO 功能先把數(shù)據(jù)緩存起來,分別根據(jù)需要輸出數(shù)據(jù)
5.dma1不能實現(xiàn)儲存器到儲存器。
6.dma還擁有流控制器,它能夠?qū)崿F(xiàn)的是可以傳輸一定數(shù)目的數(shù)據(jù)。對于不知道數(shù)據(jù)數(shù)量的,唯一的外設(shè)sdio是可以自己發(fā)出停止傳輸?shù)男盘柕摹?nbsp;
7.dma傳輸有兩種類型。一是單次傳輸,一是突發(fā)傳輸。后者必須使用fifo,并且要求 FIFO 閾值一定要是內(nèi)存突發(fā)傳輸數(shù)據(jù)量的整數(shù)倍。但是疑問是單次傳輸有什么好處呢?
8.直接模式在每個外設(shè)請求都立即啟動對存儲器傳輸?shù)膯未蝹鬏?。直接模式要求源地址和目?biāo)地址的數(shù)據(jù)寬度必須一致。
二.stm32f429中dma的具體配置方式。
1.DMA_Channel:配置dma請求發(fā)出的通道。
2.DMA_PeripheralBaseAddr:配置外設(shè)地址。
3.DMA_Memory0BaseAddr:配置存儲器零的地址。
4.DMA_DIR:傳輸方向配置。
5.DMA_BufferSize:設(shè)定待傳輸?shù)臄?shù)據(jù)數(shù)目。
6.DMA_PeripheralInc:能控制外設(shè)地址是否遞增。
7.DMA_MemoryInc:能使存儲器地址自動遞增功能。常用。
8.DMA_PeripheralDataSize: 外設(shè)數(shù)據(jù)寬度,可選字節(jié)(8 位)、半字(16 位)和字(32位)跟相應(yīng)的外設(shè)有關(guān)系??赐庠O(shè)多少位數(shù)據(jù)有效。
9.DMA_MemoryDataSize:存儲器數(shù)據(jù)寬度
10.DMA_Mode : DMA 傳 輸 模 式 選 擇 , 可 選 一 次 傳 輸 或 者 循 環(huán) 傳 輸。
11DMA_Priority:軟件設(shè)置數(shù)據(jù)流的優(yōu)先級.
12DMA_FIFOMode: FIFO 模式使能.
13.DMA_FIFOThreshold: FIFO 閾值選擇。
14.DMA_MemoryBurst:存儲器突發(fā)模式選擇,可選單次模式、 4 節(jié)拍的增量突發(fā)模式、 8 節(jié)拍的增量突發(fā)模式或 16 節(jié)拍的增量突發(fā)模式。
15.DMA_PeripheralBurst:外設(shè)突發(fā)模式選擇,可選單次模式、 4 節(jié)拍的增量突發(fā)模式、 8 節(jié)拍的增量突發(fā)模式或 16 節(jié)拍的增量突發(fā)模式。