中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 關(guān) 閉

        新聞中心

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

        基于DMA控制器的UART串行通信設(shè)計(jì)

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

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

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

        本文引用地址:http://www.antipu.com.cn/article/160710.htm

        b.JPG



        評(píng)論


        相關(guān)推薦

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

        關(guān)閉