<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ò ) 收藏

2.2 鏈表項緩存區的
建立N個(gè)x的鏈表內容結構體的緩存區x_LINK_LIST_INFOR_INDEX(i)(i=1,2,3,...N-1),稱(chēng)作x_LINK_LIST_INFOR_CACHE(i)(i=1,2,...N-1)。其中DMAx_LINK_LIST_INFOR_CACHE(i)的地址為4字節對齊,必須為最低2位是0的位置。
2.3 空鏈表項地址隊列的
建立DMAx的可用空緩存FIFO隊列,稱(chēng)作DMAx_LINK_LIST_FREE_TABLE,用于存儲N個(gè)鏈表中的空緩存區地址。當執行出隊操作時(shí),返回一個(gè)非NULL空緩存區地址,若取回值為NULL則說(shuō)明沒(méi)有可用緩存區;而執行入隊操作時(shí),會(huì )將一個(gè)非NULL空緩存區的地址加入FIFO隊列中,執行讀取隊列長(cháng)度操作時(shí),返回隊列中可用空緩存地址的數量。
2.4 已占用鏈表項地址隊列的
建立DMAx的鏈表地址FIFO隊列,記作DMAx_LINK_LIST_FILL_TABLE,用來(lái)放置占用并填充了鏈表內容的結構體緩存區地址。當執行出隊操作時(shí),返回一個(gè)非NULL已占用緩存區地址,若取回值為NULL則說(shuō)明沒(méi)有可用的已占用緩存區地址;而執行入隊操作時(shí),會(huì )將一個(gè)非NULL已占用緩存區的地址加入FIFO隊列中,執行讀取隊列長(cháng)度操作時(shí),返回隊列中可用的已占用緩存地址數量。
2.5 發(fā)送用緩存地址保存隊列的設計
建立n TX的地址保存FIFO隊列_LINK_LIST_STORE_TABLE,用于保存一次DMA發(fā)送的時(shí)所用到的DMAxLINK_LIST_INFOR_CACHE地址。隊列容量可與DMAx_LINK_LIST_FILL_TABLE的容量相同,或根據需求設置成更小。

3 程實(shí)現
3.1 關(guān)鍵寄存器設置
1)使能外設時(shí)鐘,將PCONP寄存器中的PCGPDAM位置1。此位在復位時(shí)為0,即默認DMA被禁止,所以在應用DMA前須先將其使能。
2)使能UnFCR中的第3位。該位為的DMA功能使能位,置1時(shí)使能DMA,清0后禁用DMA功能;只有在該位使能后,UART的發(fā)送和接收過(guò)程才能由DMA控制完成。
3)將寄存器DMAReqSel的相應位清零。比如第0位,因為DMA的UART0 TX與定時(shí)器0匹配0復用,所以需先選擇到UART0 TX上。第0位為0時(shí)DMA選擇UARTX,為1時(shí)DMA選擇MAT0.0;其它串口也需做類(lèi)似選擇。
3.2 數據發(fā)送過(guò)程實(shí)現
UARTn的DMA數據發(fā)送過(guò)程如下:
1)輪詢(xún)檢測是否有數據需要UARTn的發(fā)送,如果有則從UARTn_BUF_FREE_TABLE隊列中取出一個(gè)UARTn_BUF緩存,填充欲發(fā)送的數據,然后從DMAx_LINK_LIST_FREE_TABLE隊列中取出一個(gè)DMAx_LINK_LIST_INFOR_CACHE,將UARTn_BUF的地址賦給DMAx_LINK_LIST_INFOR_CACHE的Link List_SrcAddress,并設置其LinkList_DstAddress為UnTHR的地址LinkList_NextListAddress暫為0、LinkList_Control Value為UARTn_BUF中數據大小、源和目的BURST SIZE為0、源和目的傳輸寬度的1字節、源地址自增、目標地址不自增和Terminal Count中斷使能。最后將該DMAx_ LINK_LISTINFOR_CACHE值入隊到DMAx_LINK_LIST_FILL_TABLE隊列中。流程如圖1所示。

本文引用地址:http://dyxdggzs.com/article/160710.htm

b.JPG



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