<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>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > 基于DMA控制器的UART串行通信設計

基于DMA控制器的UART串行通信設計

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

摘要:針對大數據量的串口間,在常規的數據的基礎上,結合Cortex-M3微的作用,實(shí)現控制的串口數據包收發(fā)。鏈表項緩存,最終實(shí)現的分散/聚集模式的數據傳輸過(guò)程,主要是發(fā)送過(guò)程。提高了數據過(guò)程的MCU獨立性和MCU利用的效率。
關(guān)鍵詞:DMA;;鏈表項;分散/聚集

常規下,UART的數據收發(fā)可由MCU控制UART的內部FIFO來(lái)完成。但具體不論是以中斷還是以查詢(xún)的形式,過(guò)程中總是會(huì )占用到MCU的時(shí)間,即便在其FIFO的最大有效利用時(shí)。這樣,在實(shí)際應用中,當串口數據包量較大時(shí),UART的發(fā)送過(guò)程會(huì )占用MCU很長(cháng)時(shí)間,其中大多數時(shí)間可能是在一次等待數據傳輸的完成。為了節省這段時(shí)間,提高M(jìn)CU的使用效率,以完成更多的數據處理,將會(huì )用到DMA。DMA意思是直接內存訪(fǎng)問(wèn),是指不經(jīng)由CPU而直接從內存中存取數據的數據交換模式。當UART的使用DMA控制器控制發(fā)送過(guò)程時(shí),MCU會(huì )將發(fā)送的控制權交給DMA硬件控制器,從而在數據發(fā)送的時(shí)間中去處理其它的事務(wù)。
本文將結合ARM的Cortex-M3內核處理器來(lái)UART的DMA控制過(guò)程。Cortex-M3內核的處理器,是ARM公司最新一代的ARMv7架構的32位處理器。其LPC176X系列的MCU處理器內部帶有8通道的DMA控制器。下面將使用這些DMA控制器通道來(lái)實(shí)現UART的數據收發(fā)過(guò)程。

1 系統結構及原理
1. 1 UART控制器
LPC176X有4路UART控制器,通過(guò)設置其波特率、停止位、數據長(cháng)度等參數來(lái)完成2個(gè)UART口的通信,當然外部通過(guò)電平轉換可實(shí)現為RS232或RS485等接口類(lèi)型,這里只系統地用內的部UART接口。
硬件的連線(xiàn)上采用交叉互連,即一個(gè)UART接口的TX接到另一個(gè)接口的RX。軟件上傳輸的數據報文格式可由不同應用不同設定,這里只籠統的稱(chēng)做數據包。
1.2 DMA控制器
LPC176X的DMA控制器允許外設到存儲器,存儲器到外設,外設到外設和存儲器到存儲器之間的傳輸。每個(gè)DMA流都可以為單個(gè)源和目的提供單向串行DMA傳輸。
1.3 鏈表項及其標識
DMA控制器使用鏈表項(LLI)來(lái)支持分散/聚集(Scatter-gather),分散/聚集是指DMA單次傳輸可以使用不必連續的內存空間,它的效果相當于若干個(gè)簡(jiǎn)單DMA過(guò)程的串連。在分散/聚集模式下,源和目標數據區由一連串的鏈表來(lái)定義,每個(gè)鏈表項控制著(zhù)一個(gè)數據塊的傳輸,將這個(gè)數據塊傳輸完畢后,選擇并裝載另一個(gè)鏈表項來(lái)繼續DMA操作或停止DMA流。第一個(gè)鏈表項需要被編程到DMA控制器的對應通道。鏈表項所描述的傳輸數據包通常需要進(jìn)行一次或多次DMA突發(fā)傳輸到設定的源或目標。如不需要鏈表項分散/聚集,那么鏈表地址寄存器須設置為零。一個(gè)鏈表的最后一個(gè)鏈表項也須設置為零。
一個(gè)鏈表項的內容由4個(gè)字組成,依次為源地址、目標地址、下個(gè)鏈表項地址及控制字。為了方便記錄DMA鏈表內容,并定義一個(gè)鏈表內容結構體標識,標識名稱(chēng)記作stDMALinkListInfor,定義如下:
a.JPG

2 緩存區的設計
2.1 串行數據緩存區的設計
建立UARTn的接口數據緩存區,記作UARTn_BUF(n),用來(lái)存儲UART串口數據包。為數據緩存區設置空緩存地址的FIFO隊列UARTn_BUF_FR EE_TABLE,用來(lái)存放未被數據填充占用的空數據緩存分區地址;設置已占用緩存地址的FIFO隊列UARTn_BUF_FILL_TABLE,用來(lái)存放已經(jīng)被數據填充占用的數據緩存分區地址。


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

關(guān)鍵詞: 通信 設計 串行 UART DMA 控制器 基于

評論


相關(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>