導航:首頁 > 黃金交易 > 新DMA指標源碼

新DMA指標源碼

發布時間:2021-01-03 21:39:02

❶ dma windows驅動源碼嗎

在《深入理解內核》中的第545頁介紹了DMA的相關操作。說道DMA,那就不得不提到Cache(高速緩存)的問題。書中引用了如下一段例子來描述了Cache一致性問題:
逗假設設備驅動程序把一些數據填充到內存緩沖區中,然後立刻命令硬體設備利用DMA傳送方式讀取該數據。如果DMA訪問這些物理RAM內存單元,而相應的硬體高速緩存行的內容還沒有寫入RAM中,那麼硬體設備所讀取的至就是內存緩沖區中的舊值。地
現在有兩種方法來處理DMA緩沖區:
一致性DMA映射:
書上講的比較抽象,通俗地所就是任何對DMA緩沖區的改寫都會直接更新到內存中,也稱之為逗同步的地或者逗一致的地。
流式DMA映射:
根據個人的理解,這里的流即輸入輸出流,我們需要事先指定DMA緩沖區的方向,比如是地讀緩沖區地還是逗寫緩沖區地。也稱之為逗非同步的地或逗非一致性的地,詳細的內容請看下文。
由於x86體系結構中,硬體設備驅動程序本身會逗窺探地所訪問的硬體告訴緩存,因此x86體系結構中不存在DMA一致性問題。而對於其他一些架構如MIPS,SPARC以及POWERPC(包括ARM在內)需要在軟體上保證其DMA一致性。
對於以上兩者如何選擇,書中有一個合適的建議,如果CPU和DMA處理器以不可預知的方式去訪問一個緩沖區,那麼必須強制使用一致性DMA映射方式(這里我對不可預知的理解是,不能確定在何時它們訪問緩沖區),其他情形下,流式DMA映射方式更可取,因為在一些體系結構中處理一致性DMA映射是很麻煩的,並且可能導致更低的系統性能。
這里詳細介紹流式DMA:
需要訪問的緩沖區需要在數據傳送之前被映射(這里的映射也就是需要調用一些函數告知內核,該緩沖區進行流式映射),在傳送之後被取消映射。
啟動一次流式DMA數據傳輸分為如下步驟:
1. 分配DMA緩沖區。
在DMA設備不採用S/G(分散/聚集)模式的情況下,必須保證緩沖區是物理上連續的,linux內核有兩個函數用來分配連續的內存:kmalloc()和__get_free_pages()。這兩個函數都有分配連續內存的最大值,kmalloc以分配位元組為單位,最大約為64KB,__get_free_pages()以分配頁為單位,最大能分配2^order數目的頁,order參數的最大值由include/linux/Mmzone.h文件中的MAX_ORDER宏決定(在默認的2.6.18內核版本中,該宏定義為10。也就是說在理論上__get_free_pages函數一次最多能申請1<<10 * 4KB也就是4MB的連續物理內存,在Xilinx Zynq Linux內核中,該宏定義為11)。
2. 建立流式映射。
在對DMA沖區進行讀寫訪問之後,且在啟動DMA設備傳輸之前,啟用dma_map_single()函數建立流式DMA映射,這兩個函數接受緩沖區的線性地址作為其參數並返回相應的匯流排地址。
3. 釋放流式映射。
當DMA傳輸結束之後我們需要釋放該映射,這時調用dma_unmap_single()函數。
注意:
(1). 為了避免高速緩存一致性問題,驅動程序在開始從RAM到設備的DMA數據傳輸之前,如果有必要,應該調用dma_sync_single_for_device()函數刷新與DMA緩沖區對應的高速緩存行。
(2). 從設備到RAM的一次DMA數據傳送完成之前設備驅動程序是不可以訪問內存緩沖區的,但如果有必要的話,驅動程序在讀緩沖區之前,應該調用dma_sync_single_for_cpu()函數使相應的硬體高速緩存行無效。
(3). 雖然kmalloc底層也是用__get_free_pages實現的,不過kmalloc對應的釋放緩沖區函數為kfree,而__get_free_pages對應的釋放緩沖區函數為free_pages。具體與__get_free_pages有關系的幾個申請與釋放函數如下:
申請函數:
alloc_pages(gfp_mask,order)返回第一個所分配頁框描述符的地址,或者如果分配失敗則返回NULL。__get_free_pages(gfp_mask,order)類似於alloc_pages(),但它返回第一個所分配頁的線性地址。如果需要獲得線性地址對應的頁框號,那麼需要調用virt_to_page(addr)宏產生線性地址。釋放函數:__free_pages(page,order)這里主要強調page是要釋放緩沖區的線性首地址所在的頁框號free_pages(page,order)這個函數類似於__free_pages(page,order),但是它接收的參數為要釋放的第一個頁框的線性地址addr

❷ 利用TIM2觸發ADC順序多通道采樣50Hz交流電壓電流,利用DMA搬運數據到內存中如何實現,求源代碼一份

檢查寄存器配置;檢查采樣源是否上電;另外,這種問題最好還是要有程序的,不然別人只能用猜的來解決你的問題了

閱讀全文

與新DMA指標源碼相關的資料

熱點內容
城投etf買入價格 瀏覽:305
10000元工資怎麼理財 瀏覽:29
90年代中國外匯管制 瀏覽:405
理財公司旅遊騙局揭秘 瀏覽:152
外匯延期付款申請 瀏覽:901
外匯副圖有什麼用 瀏覽:28
理財進階 瀏覽:466
山西焦化對外投資 瀏覽:829
基金519995今日凈 瀏覽:8
基金廣發行業領先成長 瀏覽:989
軟銀賽富基金規模 瀏覽:655
准畢業生貸款app 瀏覽:318
恆豐銀行貴金屬賬號銷戶 瀏覽:929
火焰山股票 瀏覽:819
貸款遲遲不放款怎麼辦 瀏覽:373
工商銀行貴金屬賬戶是怎樣的 瀏覽:150
湖北廣電股票 瀏覽:412
請問美爾雅期貨軟體交易收費嗎 瀏覽:459
關注小微企業貸款量增價漲 瀏覽:636
外匯交易有沒有騙人的 瀏覽:948