dma(direct memory access,直接儲存器訪問)。什麼提高cpu效率,什麼工作原理都不管,高速傳輸也不說。
只說兩個案例,儲存器到儲存器的模式 + 儲存器到外設的模式 。
從dma框圖上來說,dma由以下組成:首先是資料流,f429有0~7這8條資料流;接著是通道選擇,每條資料流對應0~7這8個通道,資料流與通道選擇形成乙個**,具體外設對應固定的流和通道,由查參考手冊中的錶可得;然後是仲裁器,當外設dma請求衝突時,由仲裁器規則決定執行物件,這個仲裁器好比分兩個層次,先是軟體設定優先順序(有4個優先順序),當兩個請求優先順序相同時,由硬體決定——編號低的資料流優先於編號高的資料流;最後是fifo(first in first out,(這不就是隊嘛)。。。),這是32位先進先出的儲存器緩衝區。
說下fifo的模式:直接模式和fifo模式。直接模式是禁止fifo模式下的預設模式,在這種模式下,初始化dma之後,源的資料直接進入fifo緩衝區,dma請求一來就開始傳輸資料。在這種模式下,源與目標資料寬度必須相同,而且資料流只能生成單次傳輸,手冊中說由硬體強制配置。(這邊得提一下乙個問題,中文參考手冊在儲存器到儲存器的模式下有乙個注意點:使用儲存器到儲存器的模式時,不允許迴圈模式和直接模式。但是,在flash到sram的例項中,直接模式是行得通的,fifo模式倒是沒有嘗試。)
fifo模式,源與目標的資料寬度可以不同,通過設定fifo閾值來限制或者是擴充套件資料寬度,實現突發。fifo我是真的不是很清楚,在下面的儲存器到外設的例項有所嘗試。
dma的初始化就簡單點說:1、開啟時鐘,兩個dma都掛載到ahb1上 2、呼叫dma_deinit()復位資料流暫存器,通過dma_getcmdstatus()判斷復位是否完成
3、初始化結構體,配置各種引數4、dma_cmd()使能dma,並通過dma_getcmdstatus()等待資料裡有效 5、傳送dma請求
在儲存器到儲存器的例項中,在flash中定義一段陣列const uint32_t asrc_const_buffer[buffer_size],因為在dma中傳送資料項數是一定得知道的,除了sdio外設。定義乙個相同大小的變數陣列,存放在sram內。儲存器到儲存器的模式中不需要dma請求,在使能dma之後開始傳輸資料。這邊的初始化結構體應該不需要說明。位址都是陣列名,資料項數是buffer_size,得使能外設和儲存器的位址自增功能。最後需要寫乙個校驗函式來檢驗傳輸是否正確,即比較兩個陣列是否相等。
在儲存器到外設的例項中,定義乙個儲存器中的陣列,將這段資料通過usart1,再通過usb傳輸顯示到pc上的串列埠除錯工具。
先是用了直接模式,定義了乙個8位的陣列,只需要在初始化中關閉外設位址自增功能(外設資料暫存器位址唯一),在main函式中請求dma傳送就可以接收。這邊有一點小貓膩,以為usart是8位串列埠傳輸的,正好陣列是8位的,所以傳輸結果正確。我也沒去試試16位的直接模式,明天試試吧。
然後因為對fifo模式的不理解,嘗試了下。說下菜鳥的嘗試過程:決定還是定義8位陣列,但是目的資料寬度設定為半字,使能fifo,設定閾值為1/4滿,1/4滿是1個字,我定義陣列為;(在fifo模式下如果設定目標資料寬度為位元組,結果正確。)
結果顯示為ac,16位進製顯示結果為41 43 00 00;
之後陣列定義為;,這回顯示結果為abcd,16進製制顯示結果為41 42 43 44 00 00 00 00。
然後大概明白是因為usart是8位傳輸的原因,但是後面的4個00 是什麼原因也是不明白。
有沒有大神給我講講突發模式中的節拍增量是什麼意思?手冊看不懂勒。
STM32F429除錯記錄(一)
stm32f429的晶元有兩路can介面 四路串列埠 內部乙太網以及內部dsp處理器等硬體,硬體的豐富程度可見一斑,而且主頻達到180mhz,雖然比a8 a9架構的arm晶元還是差一大截,但是在工業控制上的應用還是比較多的。在程式編寫方面stm32f4系列不管在mdk還是庫函式都有挺大改動,剛著手除...
STM32F429 如何使用SDRAM
關於stm32f429 控制sdram fmc 擴充套件外部sdram 1 原理介紹 為什麼是fmc 不是 fsmc 區別在那裡!stm32f429使用fmc外設來管理擴充套件的儲存器,fmc是flexible memory controller的縮寫,譯為可變儲存控制器。它可以用於驅動包括sram...
STM32F429 如何使用NAND Flash
1 原理介紹 flash即是儲存晶元的一種,其結合了rom和ram的特點,既具備電可擦除程式設計的效能,又可以快速讀取資料,資料不會因斷電丟失。目前市面上flash主要有nor flash和nand flash。nor flash具有隨機訪問和隨位元組執行寫操作的能力,即可以訪問到儲存器內部的任意乙...