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

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

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

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

      2. 新聞中心

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

        SAM4E單片機(jī)之旅——21、DMAC之USART回顯

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

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

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

          一、 設(shè)置

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

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

          二、 DMAC設(shè)置

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

          1#define DMAC_CH 0

          啟用DMAC:

          1// 代碼略...

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

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

          設(shè)置SADDR以及DADDR。

          因?yàn)閿?shù)據(jù)都在US_RHR和US_THR的低位上,所以將源地址和目標(biāo)地址分別設(shè)為這兩個(gè)寄存器的地址即可。

          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位時(shí),一次傳輸一個(gè)字節(jié)即可。

          DMAC->DMAC_CH_NUM[DMAC_CH].DMAC_CTRLA =

          DMAC_CTRLA_BTSIZE(16) // 進(jìn)行16次傳輸

          | DMAC_CTRLA_SRC_WIDTH_BYTE // 一次傳輸一個(gè)字節(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 // 傳輸時(shí)源地址固定

          | DMAC_CTRLB_DST_INCR_FIXED // 傳輸時(shí)目標(biāo)地址固定

          ;

          設(shè)置CFG寄存器。

          因?yàn)镈MAC和USART1之間有硬件握手接口,所以這里使用硬件握手接口即可(否則需要使用軟件握手接口手動(dòng)觸發(fā)傳輸)。USART1的發(fā)送接口號(hào)為5,接收接口號(hào)為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) // 接口號(hào)

          | 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

        評(píng)論


        相關(guān)推薦

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

        關(guān)閉