<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > ARM入門筆記(7)

          ARM入門筆記(7)

          作者: 時間:2016-12-02 來源:網(wǎng)絡 收藏
          串口DMA控制實驗

          一.背景

          DMA是Direct Memory Access的縮寫,即“存儲器直接訪問”。它是指一種高速的數(shù)據(jù)傳輸操作,允許在外部設備和存儲器之間直接讀寫數(shù)據(jù),即不通過CPU,也不需要CPU干預。整個數(shù)據(jù)傳輸操作在一個稱為“DMA控制器”的控制下進行的。CPU除了在數(shù)據(jù)傳輸開始和結束時作一點處理外,在傳輸過程中CPU可以進行其它的工作。這樣,在大部分時間里,CPU和輸入輸出都處在并行操作。因此,使整個計算機系統(tǒng)的效率大大提高。

          AT91SAM7S64串口外圍DAM控制器的工作過程:將要發(fā)送的數(shù)據(jù)緩沖區(qū)的起始地址賦給串口DMA控制器的發(fā)送指針寄存器,再將要發(fā)送的字節(jié)個數(shù)賦給PDC的發(fā)送計數(shù)寄存器,然后無須 CPU的干預,DMA自動起動串口發(fā)送操作,發(fā)送完這些數(shù)據(jù)后又自動停止;同理,只要將接收數(shù)據(jù)緩沖區(qū)的起始地址賦給串口DMA控制器的接收指針寄存器,再將要接收的字節(jié)個數(shù)賦給PCD的接收計數(shù)值,DMA將自動啟動串口接收數(shù)據(jù),接收完這些數(shù)據(jù)后,再通知CPU。

          二.實驗目的

          驗證上述所描述的串口DMA控制器的工作過程,可用串口調試軟件進行驗證。

          三.實驗程序和參數(shù)設置

          1>連接器選項設置和啟動代碼都與上個實驗相同
          2>C語言的代碼

          #i nclude "AT91SAM7S64.h"
          #i nclude "Board.h"
          unsigned char RxBuff[256],TxBuff[256];
          int main(void)
          {
          unsigned int i;
          *AT91C_CKGR_MOR = 0x701; //使能主振蕩器和設置起振時間
          *AT91C_PMC_MCKR = 0x01;//選擇Mster Clock is main clock, divided by 0
          *AT91C_PMC_SCER = AT91C_CKGR_MOSCEN;//使能系統(tǒng)時鐘寄存器的處理器時鐘
          *AT91C_PMC_PCER = AT91C_ID_US0; //使能USART0時鐘
          *AT91C_PIOA_PDR = US_RXD_PIN | US_TXD_PIN;//禁止該兩個管腳的I/O口功能
          *AT91C_PIOA_ASR= US_RXD_PIN | US_TXD_PIN;//將該兩個I/O口分配給外圍A
          *AT91C_US0_CR = 0x1ac;//復位接收器和發(fā)送器,使能接收與發(fā)送,復位狀態(tài)位
          *AT91C_US1_MR =0x8c0;//正常模式,時鐘為MCK,8位長度,無校驗,1位停止位,
          *AT91C_US0_IDR= 0xf3fff; //禁止所有UART相關的中斷
          *AT91C_US0_BRGR = 30;//設置波特率為38400Hz,AT91C_US0_BRGR為CD值
          *AT91C_US0_CR = 0x50; //使能發(fā)送與接收
          *AT91C_US0_PTCR = AT91C_PDC_TXTEN | AT91C_PDC_RXTEN;//使能US0的PDC 發(fā)送與接收
          for (i = 0; i //給發(fā)送緩沖區(qū)覆值
          TxBuff = i;
          } //下面可用單步執(zhí)行,來觀察現(xiàn)象
          *AT91C_US0_TPR = (unsigned int)TxBuff;//覆發(fā)送緩沖區(qū)起始地址
          *AT91C_US0_TCR = 256; //起動PDC發(fā)送256個字節(jié)
          *AT91C_US0_RPR = (unsigned int)RxBuff;//覆接收緩沖區(qū)起始地址
          *AT91C_US0_RCR = 256; //開始PDC接收
          while (1);
          }

          四.總結

          我們在用51等單片機的串口進行收發(fā)數(shù)據(jù)時,因為發(fā)送與接收共用一個Buffer,所以在發(fā)送一字節(jié)數(shù)據(jù)后,通常都要加“while(!TI);”語句,來等待數(shù)據(jù)發(fā)送完畢;在接收數(shù)據(jù)時都要使用中斷來處理,每當接收到一個字節(jié)數(shù)據(jù)后都要中斷一次CPU。有了DMA這個功能,就不用這樣浪費CPU的時間,可大大的提高CPU的實時性能。


          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();