日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 嵌入式 > 嵌入式教程
[導讀]散列DMA設計的高速串口驅動技術

1  概  述

由于串口在電報通信、工控和數(shù)據采集等領域有著廣泛的應用,絕大多數(shù)嵌入式處理器都內置了通用異步收發(fā)器(UART)。UART數(shù)據傳輸主要通過中斷或DMA的方式實現(xiàn)。

中斷方式是在接收到數(shù)據或需要發(fā)送數(shù)據時產生中斷,在中斷服務程序中讀寫UART的緩沖區(qū)(FIFO)實現(xiàn)數(shù)據傳輸。由于串口通信速率一般比較低(典型值不超過115 200 bps),大多數(shù)嵌入式系統(tǒng)都采用中斷方式來傳輸串口數(shù)據。然而,中斷服務程序需要占用CPU的時間,而串口速度的提升也必將導致CPU更頻繁地響應UART中斷,這勢必會造成嵌入式系統(tǒng)的性能下降。

DMA數(shù)據傳輸無需CPU的參與,是一種更加高效的數(shù)據傳輸方式?,F(xiàn)有的DMA數(shù)據傳輸方案都是基于DMA塊傳輸方式(即Block DMA)。這種方式下每次傳輸完一個數(shù)據塊后產生一個DMA中斷,在高速串口通信中,頻繁的DMA中斷仍然會影響系統(tǒng)的性能。本文基于散列DMA(seatter DMA)的傳輸方式提出了一套完整的工業(yè)級高速串口驅動設計方案,實現(xiàn)了波特率高達12 Mbps的UART數(shù)據傳輸。

2  DMA數(shù)據傳輸?shù)奶攸c

DMA(Direct Memory Access,直接存儲器訪問),是指數(shù)據在內存與I/O設備間的直接傳輸,數(shù)據操作由DMA控制器(DMAC)完成而不需要CPU的參與,大大提高了CPU的利用率。因此,DMA是高速數(shù)據傳輸?shù)睦硐敕绞健@肈MA進行數(shù)據傳輸時應注意以下幾點:

①DMA傳輸需要占用系統(tǒng)總線,在此期間CPU不能使用總線。如果外設在進行數(shù)據傳輸時不能有任何的間斷,就必須保證傳輸期間DMAC對系統(tǒng)總線的獨占,這可能會影響其他需要使用總線進行數(shù)據傳輸?shù)脑O備。所以,系統(tǒng)總線在DMA傳輸期間是否可被搶占,要依據嵌入式系統(tǒng)的特定環(huán)境來決定。

②DMA傳輸存在緩存一致性(cache coherency)問題。如圖1所示,DMAC和CPU是兩個平行的單元,CPU總是通過數(shù)據緩存來訪問內存中的數(shù)據,而DMAC則直接訪問內存。如果內存中的數(shù)據被DMAC更新,而數(shù)據緩存中的數(shù)據尚未被更新,CPU獲得的某些地址的值可能并不是內存中的真實值。為了避免這個問題,可在DMAC更新完內存數(shù)據后或CPU讀取被更新過的數(shù)據前刷新數(shù)據緩存,或是使用不被數(shù)據緩存映射的非緩存(non-cacheable)內存區(qū)域。



DMA數(shù)據傳輸可分為塊傳輸和散列傳輸兩種方式。在DMA傳輸數(shù)據的過程中,要求源物理地址和目標物理地址必須是連續(xù)的。但是在某些計算機體系中(如IA架構),連續(xù)的存儲器地址在物理上不一定是連續(xù)的,所以DMA傳輸要分成多次完成。傳輸完一塊物理上連續(xù)的數(shù)據后引發(fā)一次中斷,然后進行下一塊物理上連續(xù)的數(shù)據傳輸,這就是DMA塊傳輸方式(Block DMA)。散列傳輸是在塊傳輸方式上發(fā)展起來的,它與一個傳輸鏈表相關,如圖2所示。該鏈表可以是單向結構或環(huán)形結構??刂谱种邪瑪?shù)據位寬、數(shù)據塊大小、當前塊傳輸結束是否引發(fā)中斷等控制信息。DMA塊傳輸可看作是只含有一個節(jié)點,且下一節(jié)點指針總是指向當前節(jié)點的散列傳輸。采用散列DMA方式能更靈活、高效地傳輸數(shù)據。



3  在SPEAR300平臺上實現(xiàn)高速串口

3.1  硬件平臺

SPEAR300是ST公司在ARM926EJ-S核的基礎上開發(fā)的高性能嵌入式處理器。其最高工作頻率為333MHz,有8個獨立的DMA通道,支持散列DMA;UART支持DMA傳輸,發(fā)送和接收FIFO大小均為16字節(jié),在192 MHz的外設總線(APB)頻率下支持的最高波特率為12 Mbps,如果提高APB的頻率還可以獲得更高的波特率。本文的硬件平臺是以SPEAR300為核心的人機界面產品,主要外設包括觸摸屏、液晶顯示模組、網口和串口(串口要支持最高波特率為12 Mbps的西門子MPI通信協(xié)議)。[!--empirenews.page--]

3.2  驅動程序設計

串口驅動程序的核心是實現(xiàn)數(shù)據高效穩(wěn)定的收發(fā)。為了實現(xiàn)UART的高速數(shù)據傳輸,UART中斷設置為最高優(yōu)先級;同時在操作系統(tǒng)中允許中斷嵌套,打開UART接收超時中斷RTI并使能UART的DMA傳輸。這樣,當UART的發(fā)送FIFO數(shù)據減少到設定的參考值(FIFOLevel)時,發(fā)送DMA傳輸就會被觸發(fā)。同樣,當接收FIFO的數(shù)據增長到設定值時,接收DMA傳輸就會被觸發(fā)。為了減少DMA傳輸被觸發(fā)的次數(shù)同時保證數(shù)據被及時傳輸,發(fā)送FIFO Level設定為2字節(jié),而接收FIFOLevel設定為14字節(jié),將發(fā)送和接收的FIFO Level分別設定為0和16字節(jié)是有很大風險的。MPI協(xié)議要求傳輸?shù)囊粠瑪?shù)據不能有間斷,所以在使用DMA傳輸UART數(shù)據時DMAC必須獨占系統(tǒng)總線。為了避免產生緩存一致性問題,使用2塊非緩存內存區(qū)域存放待發(fā)送的數(shù)據和已接收到的數(shù)據。

發(fā)送數(shù)據時,待發(fā)送的數(shù)據量總是已知的。先構造一個傳輸節(jié)點,數(shù)據源地址為數(shù)據包的首地址,目的地址為UART寄存器,數(shù)據位寬為8,下一節(jié)點指針(PTR_NEXT)為空。當前數(shù)據包發(fā)送結束前,如果PTR_NEXT被更新,則下一個數(shù)據包的傳輸自動開始。當前數(shù)據包是否發(fā)送完畢,可通過讀取DMAC寄存器DMACCnControl的TransferSize字段得知。整個發(fā)送數(shù)據的過程無需觸發(fā)任何中斷,流程圖如圖3所示。如果采用DMA塊傳輸方式,就需要在每次傳輸完畢后產生DMA中斷,重新裝載數(shù)據到內存中的發(fā)送數(shù)據區(qū)以發(fā)送下一個數(shù)據包。



接收數(shù)據時,對方發(fā)過來的數(shù)據量一般是未知的。構造含有100個節(jié)點的循環(huán)鏈表結構,每個節(jié)點對應的傳輸塊大小為接收FIFO Level。數(shù)據源地址為UART數(shù)據寄存器的地址,首節(jié)點的目的地址為接收數(shù)據內存區(qū)域的首地址,此后節(jié)點的目的地址每次向后偏移(FIFO Level×2)個字節(jié),數(shù)據位寬為16(8個數(shù)據位,4個狀態(tài)位,4個保留位)。當接收到的數(shù)據達到接收內存區(qū)域的80%(RECV_TH)時,需要通知數(shù)據發(fā)送方停止數(shù)據傳輸,在第80個節(jié)點處設置DMA中斷,該節(jié)點為閾值節(jié)點。采用本文的設計方案接收1幀不超過RECV_TH大小的數(shù)據,最多產生一次RTI中斷。當接收到的數(shù)據量少于FIFOLevel時不會觸發(fā)DMA接收,在RTI中斷中把UART接收FIFO中的數(shù)據復制到內存中的數(shù)據接收區(qū),同時使DMA接收節(jié)點的目的地址向后偏移相應的長度并更新閾值節(jié)點的位置。接收數(shù)據流程如圖4所示。如果采用DMA塊傳輸方式,就必須額外使用一個環(huán)形數(shù)據緩沖區(qū)(Ring Buffer),每次接收到指定大小的數(shù)據塊后產生DMA中斷,在中斷服務程序中將接收到的數(shù)據復制到環(huán)形數(shù)據緩沖區(qū)中。



3.3 驅動測試

本文的設計方案直接應用于工業(yè)級的HMI產品,必須經過嚴格的測試。利用3臺西門子S7系列PLC和1臺產品樣機搭建令牌網,使用西門子MPI協(xié)議進行測試,并利用數(shù)據分析工具ProfiTrace監(jiān)測通信過程。測試結果表明,2 400 bps~12 Mbps的各個波特率下都能進行穩(wěn)定的數(shù)據通信。

4  結  語

本文詳細介紹了DMA數(shù)據傳輸?shù)奶攸c和散列DMA的工作方式。在此基礎上,提出了一套基于散列DMA的高速串口驅動設計方案,發(fā)送數(shù)據完全由DMAC完成,無需觸發(fā)任何中斷,接收1幀不超過接收區(qū)閾值的數(shù)據最多產生1次RTI中斷。和現(xiàn)有的各種利用DMA塊傳輸進行串口數(shù)據通信的方案相比,中斷次數(shù)大幅減少,大大提高了數(shù)據傳輸?shù)男省T趹昧吮痉桨傅娜藱C界面產品上,實現(xiàn)了波特率高達12 Mbps的穩(wěn)定數(shù)據傳輸。對于在其他平臺上設計實現(xiàn)高速串口,本方案是一個很好的參考。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

高盛集團(Goldman Sachs Group)周二證實了一項全面重組計劃,這是該公司歷史上最大的改革舉措之一。高盛將把其交易和投行業(yè)務合并為一個部門,使該行從四個部門縮減至三個部門,縮減進軍零售銀行業(yè)務的努力,專注于...

關鍵字: DMA GROUP GO AN

SWM32S單片機有1個SDIO接口,支持多媒體卡(MMC)、SD 存儲卡、SDIO 卡等設備,可以使用軟件方法或者 DMA 方法(SDIO 模塊內部 DMA,與芯片 DMA 模塊無關)進行數(shù)據傳輸。

關鍵字: SWM32S單片機 SDIO DMA

標普500指數(shù)今年迄今為止下跌22.7%,但高盛(Goldman Sachs)策略師認為估值依然太高。摩根士丹利旗下的Morgan Stanley Wealth Management稱,面對高通脹環(huán)境下的利率大幅上升,股...

關鍵字: DMA MANAGEMENT 高通 ST

高盛集團(Goldman Sachs Group)計劃將其最大的業(yè)務合并為三個部門,進行該華爾街公司歷史上最大的一次業(yè)務重組。高盛將把其旗艦投行業(yè)務和交易業(yè)務合并為一個部門,同時將資產管理和財富管理業(yè)務合并為另一個部門。...

關鍵字: APPLE DMA GENERAL GREEN

當使用導線連接外部設備或芯片時,導線不可過長,一般控制在 20CM 以內,IIC、SPI、UART 等數(shù)字接口數(shù)據線驅動能力有限,過長的導線會導致通訊波形遲緩。當導線確實無法縮短時,可通過降低通訊速率的方法來解決、緩解通...

關鍵字: 可編程USB UART I2C SMBusS SPI

芯片選擇下拉框內列出的每一個備選芯片的驅動文件和數(shù)據手冊位于S2STool 工具文件夾中的chips 文件夾內,每一個芯片需要 1 個驅動文件和 1 個數(shù)據手冊文件,用戶可自行打開編輯,或者創(chuàng)建新的芯片驅動文件。

關鍵字: 可編程USB UART I2C SMBusS SPI

S2STool 是為 S2S 固件開發(fā)的測試工具,運行于 Windows 平臺,內置串口調試助手和 S2S 參數(shù)配置工具,支持動態(tài)解析自定義的芯片驅動,用戶可自行編寫、修改、增加任何芯片的驅動程序, 方便對芯片進行測試和...

關鍵字: 可編程USB UART I2C SMBusS SPI

DS1302 是實時時鐘芯片,SPI 接口,可以對年、月、日、周、時、分、秒進行計時,且具有閏年補償?shù)榷喾N功能。DS1302 內部有一個 31×8 的用于臨時性存放數(shù)據的 RAM 寄存器。

關鍵字: 可編程USB UART I2C SMBusS SPI

GD25Qxx 是四線SPI 接口的 FLASH 芯片,最大容量可達 16Mbytes。板上集成有 GD25Q64 芯片, 每頁 256 字節(jié),每扇區(qū) 16 頁(4k 字節(jié)),每塊區(qū) 256 頁(64k),寫入前必須先擦...

關鍵字: 可編程USB UART I2C SMBusS SPI CAN USB2S

VM501/511振弦采集模塊 是穩(wěn)控科技生產的振弦傳感器測量模塊,具有IIC 接口和 UART 接口。IIC 地址可通過UART 任意設置,假設其地址為 0xB0。

關鍵字: 可編程USB UART I2C SMBusS SPI

嵌入式教程

6897 篇文章

關注

發(fā)布文章

編輯精選

技術子站

關閉