<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 散列DMA設計的高速串口驅動(dòng)技術(shù)

散列DMA設計的高速串口驅動(dòng)技術(shù)

作者: 時(shí)間:2010-06-06 來(lái)源:網(wǎng)絡(luò ) 收藏

1 概 述

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

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

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

2 DMA數據傳輸的特點(diǎn)

DMA(Direct Memory Access,直接存儲器訪(fǎng)問(wèn)),是指數據在內存與I/O設備間的直接傳輸,數據操作由DMA控制器(DMAC)完成而不需要CPU的參與,大大提高了CPU的利用率。因此,DMA是數據傳輸的理想方式。利用DMA進(jìn)行數據傳輸時(shí)應注意以下幾點(diǎn):

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

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



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



3 在SPEAR300平臺上實(shí)現高速串口

3.1 硬件平臺

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


上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>