DMA驅動開發 4,資料參考

2022-08-10 01:27:14 字數 3333 閱讀 5102

**自

雜湊dma設計的高速串列埠驅動技術s

1 概 述

由於串列埠在電報通訊、工控和資料採集等領域有著廣泛的應用,絕大多數嵌入式

處理器都內建了通用非同步收發器(uart)。uart資料傳輸主要通過中斷或dma的方式實現。

中斷方式是在接收到資料或需要傳送資料時產生中斷,在中斷服務程式中讀寫uart的緩衝區(fifo)實現資料傳輸。由於串列埠通訊速率一般比較低(典型值不超過115 200 bps),大多數嵌入式系統都採用中斷方式來傳輸串列埠資料。然而,中斷服務程式需要占用cpu的時間,而串列埠速度的提公升也必將導致cpu更頻繁地響應uart中斷,這勢必會造成嵌入式系統的效能下降。

dma資料傳輸無需cpu的參與,是一種更加高效的資料傳輸方式。現有的dma資料傳輸方案都是基於dma塊傳輸方式(即block dma)。這種方式下每次傳輸完乙個資料塊後產生乙個dma中斷,在高速串列埠通訊中,頻繁的dma中斷仍然會影響系統的效能。本文基於雜湊dma(seatter dma)的傳輸方式提出了一套完整的工業級高速串列埠驅動設計方案,實現了波特率高達12 mbps的uart資料傳輸。

2 dma資料傳輸的特點

dma(direct memory access,直接儲存器訪問),是指資料在記憶體與i/o裝置間的直接傳輸,資料操作由dma控制器(dmac)完成而不需要cpu的參與,大大提高了cpu的利用率。因此,dma是高速資料傳輸的理想方式。利用dma進行資料傳輸時應注意以下幾點:

①dma傳輸需要占用系統匯流排,在此期間cpu不能使用匯流排。如果外設在進行資料傳輸時不能有任何的間斷,就必須保證傳輸期間dmac對系統匯流排的獨佔,這可能會影響其他需要使用匯流排進行資料傳輸的裝置。所以,系統匯流排在dma傳輸期間是否可被搶占,要依據嵌入式系統的特定環境來決定。

②dma傳輸存在快取一致性(cache coherency)問題。如圖1所示,dmac和cpu是兩個平行的單元,cpu總是通過資料快取來訪問記憶體中的資料,而dmac則直接訪問記憶體。如果記憶體中的資料被dmac更新,而資料快取中的資料尚未被更新,cpu獲得的某些位址的值可能並不是記憶體中的真實值。為了避免這個問題,可在dmac更新完記憶體資料後或cpu讀取被更新過的資料前重新整理資料快取,或是使用不被資料快取對映的非快取(non-cacheable)記憶體區域。

dma資料傳輸可分為塊傳輸和雜湊傳輸兩種方式。在dma傳輸資料的過程中,要求源實體地址和目標實體地址必須是連續的。但是在某些計算機體系中(如ia架構),連續的儲存器位址在物理上不一定是連續的,所以dma傳輸要分成多次完成。傳輸完一塊物理上連續的資料後引發一次中斷,然後進行下一塊物理上連續的資料傳輸,這就是dma塊傳輸方式(block dma)。雜湊傳輸是在塊傳輸方式上發展起來的,它與乙個傳輸鍊錶相關,如圖2所示。該鍊錶可以是單向結構或環形結構。控制字中包含資料位寬、資料塊大小、當前塊傳輸結束是否引發中斷等控制資訊。dma塊傳輸可看作是只含有乙個節點,且下一節點指標總是指向當前節點的雜湊傳輸。採用雜湊dma方式能更靈活、高效地傳輸資料。

3 在spear300平台上實現高速串列埠

3.1 硬體平台

spear300是st公司在arm926ej-s核的基礎上開發的高效能嵌入式處理器。其最高工作頻率為333mhz,有8個獨立的dma通道,支援雜湊dma;uart支援dma傳輸,傳送和接收fifo大小均為16位元組,在192 mhz的外設匯流排(apb)頻率下支援的最高波特率為12 mbps,如果提高apb的頻率還可以獲得更高的波特率。本文的硬體平台是以spear300為核心的人機介面產品,主要外設包括觸控螢幕、液晶顯示模組、網口和串列埠(串列埠要支援最高波特率為12 mbps的西門子mpi通訊協議)。

3.2 驅動程式設計

串列埠驅動程式的核心是實現資料高效穩定的收發。為了實現uart的高速資料傳輸,uart中斷設定為最高優先順序;同時在作業系統中允許中斷巢狀,開啟uart接收超時中斷rti並使能uart的dma傳輸。這樣,當uart的傳送fifo資料減少到設定的參考值(fifolevel)時,傳送dma傳輸就會被觸發。同樣,當接收fifo的資料增長到設定值時,接收dma傳輸就會被觸發。為了減少dma傳輸被觸發的次數同時保證資料被及時傳輸,傳送fifo level設定為2位元組,而接收fifolevel設定為14位元組,將傳送和接收的fifo level分別設定為0和16位元組是有很大風險的。mpi協議要求傳輸的一幀資料不能有間斷,所以在使用dma傳輸uart資料時dmac必須獨佔系統匯流排。為了避免產生快取一致性問題,使用2塊非快取記憶體區域存放待傳送的資料和已接收到的資料。

傳送資料時,待傳送的資料量總是已知的。先構造乙個傳輸節點,資料源位址為資料報的首位址,目的位址為uart暫存器,資料位寬為8,下一節點指標(ptr_next)為空。當前資料報傳送結束前,如果ptr_next被更新,則下乙個資料報的傳輸自動開始。當前資料報是否傳送完畢,可通過讀取dmac暫存器dmaccncontrol的transfersize欄位得知。整個傳送資料的過程無需觸發任何中斷,流程圖如圖3所示。如果採用dma塊傳輸方式,就需要在每次傳輸完畢後產生dma中斷,重新裝載資料到記憶體中的傳送資料區以傳送下乙個資料報。

接收資料時,對方發過來的資料量一般是未知的。構造含有100個節點的迴圈鍊錶結構,每個節點對應的傳輸塊大小為接收fifo level。資料源位址為uart資料暫存器的位址,首節點的目的位址為接收資料記憶體區域的首位址,此後節點的目的位址每次向後偏移(fifo level×2)個位元組,資料位寬為16(8個資料位,4個狀態位,4個保留位)。當接收到的資料達到接收記憶體區域的80%(recv_th)時,需要通知資料傳送方停止資料傳輸,在第80個節點處設定dma中斷,該節點為閾值節點。採用本文的設計方案接收1幀不超過recv_th大小的資料,最多產生一次rti中斷。當接收到的資料量少於fifolevel時不會觸發dma接收,在rti中斷中把uart接收fifo中的資料複製到記憶體中的資料接收區,同時使dma接收節點的目的位址向後偏移相應的長度並更新閾值節點的位置。接收資料流程如圖4所示。如果採用dma塊傳輸方式,就必須額外使用乙個環形資料緩衝區(ring buffer),每次接收到指定大小的資料塊後產生dma中斷,在中斷服務程式中將接收到的資料複製到環形資料緩衝區中。

3.3 驅動測試

本文的設計方案直接應用於工業級的hmi產品,必須經過嚴格的測試。利用3臺西門子s7系列plc和1臺產品樣機搭建令牌網,使用西門子mpi協議進行測試,並利用資料分析工具profitrace監測通訊過程。測試結果表明,2 400 bps~12 mbps的各個波特率下都能進行穩定的資料通訊。

4 結 語

本文詳細介紹了dma資料傳輸的特點和雜湊dma的工作方式。在此基礎上,提出了一套基於雜湊dma的高速串列埠驅動設計方案,傳送資料完全由dmac完成,無需觸發任何中斷,接收1幀不超過接收區閾值的資料最多產生1次rti中斷。和現有的各種利用dma塊傳輸進行串列埠資料通訊的方案相比,中斷次數大幅減少,大大提高了資料傳輸的效率。在應用了本方案的人機介面產品上,實現了波特率高達12 mbps的穩定資料傳輸。對於在其他平台上設計實現高速串列埠,本方案是乙個很好的參考。

c WebBrowser開發參考資料

原文 c webbrowser開發參考資料 那麼找出該按鈕並為之新增event handler的 如下 htmldocument htmldoc webbrowser.document htmlelement btnelement htmldoc.all btnclose if btnelement...

驅動開發4 平台裝置驅動

一 平台匯流排 1 真實的計算機系統中,通常各種常見匯流排的 都編寫好,一般不需要我們去建立,比如i2c,pci,usb這些匯流排 2 pc中,多數外設都沒有直接連到cpu的前端匯流排上 但是在嵌入式領域,有很多簡單的外設是直接連到cpu的 前端 匯流排上的 3 為了表示這種和cpu直接相連的前端匯...

資料驅動開發

留個記號,從這段時間的設計 開發 測試,認為 資料驅動系統開發好象要更好 需求調研,了解使用者業務流程,了解業務流程中涉及到的物件,使用者期望達到的目標 資料展示 需求分析,分析業務流程及業務物件及資料關係 系統設計,根據業務流程中資料的流轉進行系統資料流轉設計,資料採集 資料驗證 資料處理 資料儲...