在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > SAM4E單片機之旅——21、DMAC之USART回顯

            SAM4E單片機之旅——21、DMAC之USART回顯

            作者: 時間:2017-04-26 來源:網(wǎng)絡(luò) 收藏

              DMAC也可以和外設(shè)進行數(shù)據(jù)交互。之前我們曾使用PDC進行的數(shù)據(jù)回顯,這次就使用DMAC完成相同的工作。而且由于DMAC有內(nèi)部的緩沖區(qū),實現(xiàn)起來更為簡單。

            本文引用地址:http://www.biyoush.com/article/201704/358452.htm

              一、 設(shè)置

              因為之前已經(jīng)做過相關(guān)的實驗,這里不再重復(fù)。需要注意的是,要注意JP11的跳線,以選擇正確的協(xié)議(RS232)。另外,如果使用硬件握手協(xié)議的話,注意設(shè)置PC端串口通信軟件的線路控制信號。

              另外,由于不再使用手動的緩沖區(qū)和PDC,所以不需要進行相關(guān)的設(shè)置。同時,也不用再使用的接收超時功能。

              二、 DMAC設(shè)置

              本次使用的通道依然為通道0:

              1#define DMAC_CH 0

              啟用DMAC:

              1// 代碼略...

              設(shè)置DSCR為0,以進行單次傳輸:

              1DMAC->DMAC_CH_NUM[DMAC_CH].DMAC_DSCR = 0;

              設(shè)置SADDR以及DADDR。

              因為數(shù)據(jù)都在US_RHR和US_THR的低位上,所以將源地址和目標地址分別設(shè)為這兩個寄存器的地址即可。

              DMAC->DMAC_CH_NUM[DMAC_CH].DMAC_SADDR =

              &(USART1->US_RHR);

              DMAC->DMAC_CH_NUM[DMAC_CH].DMAC_DADDR =

              &(USART1->US_THR);

              設(shè)置CTRLA和CTRLB。

              在USART數(shù)據(jù)位為8位時,一次傳輸一個字節(jié)即可。

              DMAC->DMAC_CH_NUM[DMAC_CH].DMAC_CTRLA =

              DMAC_CTRLA_BTSIZE(16) // 進行16次傳輸

              | DMAC_CTRLA_SRC_WIDTH_BYTE // 一次傳輸一個字節(jié)

              | DMAC_CTRLA_DST_WIDTH_BYTE // 同上

              ;

              DMAC->DMAC_CH_NUM[DMAC_CH].DMAC_CTRLB =

              DMAC_CTRLB_FC_PER2PER_DMA_FC //外設(shè)至外設(shè)的傳輸

              | DMAC_CTRLB_SRC_INCR_FIXED // 傳輸時源地址固定

              | DMAC_CTRLB_DST_INCR_FIXED // 傳輸時目標地址固定

              ;

              設(shè)置CFG寄存器。

              因為DMAC和USART1之間有硬件握手接口,所以這里使用硬件握手接口即可(否則需要使用軟件握手接口手動觸發(fā)傳輸)。USART1的發(fā)送接口號為5,接收接口號為6:

            clip_image002

              由于需要盡快將DMAC內(nèi)部緩沖區(qū)的內(nèi)容傳輸出去,所以一旦其數(shù)據(jù)量可以發(fā)送,就發(fā)送出去。

              DMAC->DMAC_CH_NUM[DMAC_CH].DMAC_CFG =

              DMAC_CFG_SRC_H2SEL_HW // 使用硬件握手

              | DMAC_CFG_DST_H2SEL_HW

              | DMAC_CFG_SRC_PER(6) // 接口號

              | DMAC_CFG_DST_PER(5)

              | DMAC_CFG_SOD_DISABLE

              | DMAC_CFG_FIFOCFG_ASAP_CFG // 盡快發(fā)送數(shù)據(jù)

              ;

              啟用中斷。

              在傳輸任務(wù)完成后,需要重新啟用通道,以重新開始任務(wù)。

              1

              2DMAC->DMAC_CHER = DMAC_CHER_ENA0 << DMAC_CH;

              // NVIC中斷設(shè)置的代碼略...

              中斷處理。

              在中斷中重新設(shè)置CTRLA寄存器的BTSIZE字段,再啟用通道即可。

              void DMAC_Handler(void)

              {

              uint32_t status = DMAC->DMAC_EBCISR;

              // 判斷是否為指定中斷

              if (status & (DMAC_EBCISR_CBTC0 << DMAC_CH))

              {

              // 設(shè)置 CTRLA

              DMAC->DMAC_CH_NUM[DMAC_CH].DMAC_CTRLA &=

              ~(uint32_t)DMAC_CTRLA_BTSIZE_Msk;

              DMAC->DMAC_CH_NUM[DMAC_CH].DMAC_CTRLA |=

              DMAC_CTRLA_BTSIZE(16);

              // 再次啟用通道

              DMAC->DMAC_CHER = DMAC_CHER_ENA0 << DMAC_CH;

              }

              }



            關(guān)鍵詞: SAM4E USART

            評論


            相關(guān)推薦

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

            關(guān)閉