<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于散列DMA的高速串口驅(qū)動方案設(shè)計

          基于散列DMA的高速串口驅(qū)動方案設(shè)計

          作者: 時間:2012-03-06 來源:網(wǎng)絡(luò) 收藏

          1 概 述

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

          數(shù)據(jù)傳輸無需CPU的參與,是一種更加高效的數(shù)據(jù)傳輸方式?,F(xiàn)有的數(shù)據(jù)傳輸方案都是DMA塊傳輸方式(即Block DMA)。這種方式下每次傳輸完一個數(shù)據(jù)塊后產(chǎn)生一個DMA中斷,在串口通信中,頻繁的DMA中斷仍然會影響系統(tǒng)的性能。本文散列DMA(seatter DMA)的傳輸方式提出了一套完整的工業(yè)級串口設(shè)計方案,實現(xiàn)了波特率高達(dá)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進(jìn)行數(shù)據(jù)傳輸時應(yīng)注意以下幾點:

          ①DMA傳輸需要占用系統(tǒng)總線,在此期間CPU不能使用總線。如果外設(shè)在進(jìn)行數(shù)據(jù)傳輸時不能有任何的間斷,就必須保證傳輸期間DMAC對系統(tǒng)總線的獨占,這可能會影響其他需要使用總線進(jìn)行數(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ù)的過程中,要求源物理地址和目標(biāo)物理地址必須是連續(xù)的。但是在某些計算機體系中(如IA架構(gòu)),連續(xù)的存儲器地址在物理上不一定是連續(xù)的,所以DMA傳輸要分成多次完成。傳輸完一塊物理上連續(xù)的數(shù)據(jù)后引發(fā)一次中斷,然后進(jìn)行下一塊物理上連續(xù)的數(shù)據(jù)傳輸,這就是DMA塊傳輸方式(Block DMA)。散列傳輸是在塊傳輸方式上發(fā)展起來的,它與一個傳輸鏈表相關(guān),如圖2所示。該鏈表可以是單向結(jié)構(gòu)或環(huán)形結(jié)構(gòu)??刂谱种邪瑪?shù)據(jù)位寬、數(shù)據(jù)塊大小、當(dāng)前塊傳輸結(jié)束是否引發(fā)中斷等控制信息。DMA塊傳輸可看作是只含有一個節(jié)點,且下一節(jié)點指針總是指向當(dāng)前節(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é)議)。


          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();