《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 基于散列DMA的高速串口驅(qū)動設(shè)計
基于散列DMA的高速串口驅(qū)動設(shè)計
邢麗華,高志鵬,袁德殿
摘要: 基于散列DMA的高速串口驅(qū)動設(shè)計 ,1 概 述由于串口在電報通信、工控和數(shù)據(jù)采集等領(lǐng)域有著廣泛的應(yīng)用,絕大多數(shù)嵌入式處理器都內(nèi)置了通用異步收發(fā)器(UART)。UART數(shù)據(jù)傳輸主要通過中斷或DMA的方式實現(xiàn)。中斷方式是在接收到數(shù)據(jù)或需要發(fā)送數(shù)據(jù)時產(chǎn)生中
Abstract:
Key words :

1  概  述

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

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

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

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

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

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

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

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

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

3.1  硬件平臺

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

3.2  驅(qū)動程序設(shè)計

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

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

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

3.3 驅(qū)動測試

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

結(jié)  語

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

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
99精品欧美一区二区三区| 国产精品久久久久影院色老大 | 久久全球大尺度高清视频| 99精品久久| 美腿丝袜亚洲色图| 欧美亚洲免费| 国产精品久久久99| 在线亚洲国产精品网站| 激情欧美亚洲| 久久久久久亚洲精品中文字幕| 亚洲无限av看| 国产精品成人国产乱一区| 亚洲九九精品| 影音先锋久久资源网| 欧美在线视频观看免费网站| 亚洲天堂av电影| 国产精品久久久久毛片软件| 在线视频欧美一区| 亚洲另类自拍| 欧美视频免费在线| 亚洲视频axxx| 亚洲小说欧美另类社区| 国产精品美女久久久久久2018 | 亚洲免费激情| 欧美日韩中国免费专区在线看| 宅男精品视频| 99国产精品| 国产精品一区二区久激情瑜伽| 久久激情视频久久| 久久成人综合视频| 亚洲大胆美女视频| 欧美日韩成人一区| 性久久久久久| 亚洲高清不卡在线| 亚洲人永久免费| 国产精品毛片| 久久综合导航| 亚洲视频一区| 久久都是精品| 亚洲精品一区在线观看| 国产伦精品一区二区三区高清 | 久久国产一区二区| 亚洲精品久久久久久下一站 | 亚洲午夜未删减在线观看| 性欧美暴力猛交69hd| 亚洲国产一区二区视频| 国产精品麻豆成人av电影艾秋| 久久综合九九| 亚洲一区二区综合| 久久精品国产综合精品| 日韩午夜av电影| 韩国美女久久| 国产精品久久久久av| 猛干欧美女孩| 久久精品国产2020观看福利| av72成人在线| 亚洲区一区二| 国产精品试看| 欧美日韩午夜激情| 美女图片一区二区| 欧美影院精品一区| 亚洲已满18点击进入久久| 亚洲卡通欧美制服中文| 性伦欧美刺激片在线观看| 亚洲婷婷综合久久一本伊一区| 亚洲激情欧美| 亚洲国产你懂的| 亚洲第一精品夜夜躁人人躁| 国内欧美视频一区二区| 国产精品中文字幕欧美| 国产精品久久久999| 欧美三级视频| 欧美日韩在线播放| 欧美日韩国产一区二区三区地区 | 欧美另类69精品久久久久9999| 久久综合久久综合久久综合| 久久精品色图| 久久深夜福利免费观看| 久久婷婷影院| 免费成人黄色| 欧美少妇一区二区| 美女主播一区| 欧美激情第4页| 欧美精品日韩www.p站| 欧美日韩精品免费观看视一区二区| 欧美精品高清视频| 欧美日韩八区| 国产精品揄拍500视频| 国产在线精品成人一区二区三区 | 久久精精品视频| 亚洲国产日韩欧美在线动漫| 亚洲精品久久久久久久久久久久久| 亚洲美女av在线播放| 在线视频中文亚洲| 欧美一二区视频| 欧美va亚洲va日韩∨a综合色| 欧美日韩国产一区| 国产伦精品一区二区三| 狠狠综合久久av一区二区老牛| 在线日韩欧美| 亚洲午夜成aⅴ人片| 欧美在线视频观看免费网站| 亚洲精选视频免费看| 欧美一区二区三区的| 久久亚洲综合色| 欧美一区二区三区精品| 久久成人精品无人区| 在线视频日韩精品| 久久男人资源视频| 国产精品v欧美精品∨日韩| 国户精品久久久久久久久久久不卡 | 亚洲性感美女99在线| 久久女同精品一区二区| 欧美无砖砖区免费| 在线日韩一区二区| 欧美在线中文字幕| 亚洲一区二区三区中文字幕在线 | 影音先锋日韩有码| 午夜精品国产更新| 亚洲一区二区3| 欧美日本国产视频| 狠狠色伊人亚洲综合成人| 亚洲专区在线视频| 亚洲伊人第一页| 欧美激情一区二区三区蜜桃视频| 国内精品伊人久久久久av影院 | 一区二区欧美国产| 99re6热只有精品免费观看| 久久久精品久久久久| 国产欧美日韩综合精品二区| 欧美电影免费观看大全| 国语精品一区| 久久国产精品99精品国产| 欧美一区二区精美| 国产精品久久久久久模特| 99re亚洲国产精品| 亚洲在线观看免费| 国产精品电影网站| 亚洲一区二区三区高清不卡| 亚洲在线观看视频| 国产精品日韩欧美| 午夜视频一区在线观看| 久久精品国产久精国产思思| 国产一区二区av| 亚洲国产一区在线| 欧美精品色网| 亚洲深夜影院| 久久精品国产一区二区三区| 激情欧美国产欧美| 一本色道久久综合亚洲精品婷婷| 欧美日韩一区二区在线| 亚洲一区二区视频在线| 久久国产日韩| 亚洲激情视频| 亚洲欧美日本伦理| 国产曰批免费观看久久久| 亚洲人久久久| 国产精品成人观看视频免费| 欧美一区二区啪啪| 欧美片第1页综合| 亚洲女性裸体视频| 免费人成网站在线观看欧美高清 | 欧美精品在线观看播放| 亚洲综合视频在线| 欧美激情成人在线| 午夜精品久久一牛影视| 欧美激情四色| 欧美亚洲综合在线| 欧美日韩1234| 亚洲黑丝在线| 国产欧美日韩激情| 宅男噜噜噜66一区二区| 精品成人乱色一区二区| 亚洲欧美国产视频| 亚洲欧洲日本mm| 久久亚洲精选| 欧美一区二区三区四区在线观看| 欧美日韩精品一区二区在线播放| 久久国产精品一区二区| 国产精品日韩电影| 亚洲视频久久| 亚洲人成精品久久久久| 噜噜噜91成人网| 久久精品一区二区国产| 国产精品入口夜色视频大尺度| 中日韩在线视频| 亚洲日本中文字幕区| 欧美aⅴ99久久黑人专区| 欧美在线播放| 国产一区二区三区最好精华液| 午夜久久久久久| 亚洲视频免费在线| 国产精品扒开腿做爽爽爽视频| 99精品国产热久久91蜜凸| 亚洲风情在线资源站| 久久香蕉国产线看观看av| 欧美一级日韩一级| 国内免费精品永久在线视频| 久久精品国产精品亚洲精品| 欧美在线亚洲一区|