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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 三 ARM9(S3C2440)的串口UART——程序實例講解

          三 ARM9(S3C2440)的串口UART——程序實例講解

          作者: 時間:2016-11-27 來源:網絡 收藏
          串口通信程序編寫步驟

          UART通信程序可以采用查詢、中斷和DMA模式。我們通過使用較多的中斷方式來介UART通信程序的編寫。簡單做法是,UART通信程序的編寫參照例子程序。

          本文引用地址:http://www.ex-cimer.com/article/201611/322168.htm

          選通道,通過函數(shù)Uart_Select();選UART0~UART2;

          選波特率和波特率發(fā)生器時鐘,選波特率通過函數(shù)Uart_Pclk_En(int ch, int baud)或Uart_Pclk_En(int ch, int baud)來進行。時鐘選UCLK ,rUCON0|=0x400;時鐘選PCLK ,rUCON0&=0x3ff。

          通信協(xié)議(rULCON0)設定,如果正常通信,一位停止位,8位數(shù)據(jù)位,無奇偶效驗: rULCON0=(0<<6)|(0<<3)|(0<<2)|(3);

          通信控制字(rUCON0)設定,如時鐘選ULK做波特率發(fā)生器;Tx中斷脈沖觸發(fā),Rx中斷脈沖觸發(fā);接收超時中斷允許;產生接收錯誤中斷;正常模式發(fā)送:

          rUCON0|=(TX_INTTYPE<<9)|(RX_INTTYPE<<8)|(0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1);

          I/O口初始化,因為UART通信使用H口的第二功能,所以H口要上拉禁止:rGPHUP|=0x1ff。H口控制寄存器nRTS1,nCTS1功能使能,rGPHCON&=0x3c0000,rGPHCON|=0x2faaa;

          設中斷服務函數(shù)入口地址,把中斷服務函數(shù)入口地址賦函數(shù)指針PISR_UARTn, 注意,接收中斷服務函數(shù)入口地址和發(fā)送中斷服務函數(shù)入口地址是一個,在中斷服務函數(shù)中根據(jù)

          UTRSTATn [1]和UTRSTATn [0]狀態(tài)決定是發(fā)送中斷還是接收中斷。

          打開總中斷屏蔽和子中斷屏蔽等待中斷:

          rINTMSK=~(BIT_UART0);

          rINTSUBMSK=~(BIT_SUB_TXD0);

          進入中斷后,先屏蔽發(fā)送和接收中斷,防止新來中斷干擾我們的正常發(fā)送和接收,正常發(fā)送和接收結束后,清中斷掛起和中斷源掛起寄存器:ClearPending(BIT_UART0),rSUBSRCPND=(BIT_SUB_TXD0(發(fā)送),rSUBSRCPND=(BIT_SUB_RXD0|BIT_SUB_ERR0)(接收);

          取消中斷屏蔽,等下一次中斷。

          下面是利用查詢方式的串口通信程序(FL2440開發(fā)板)

          #include"2440addr.h"http://該程序是PC機通過串口工具向開發(fā)板發(fā)送1234這四個數(shù)字來控制四個LED的亮滅

          int TSmain()
          {
          char buf,i;

          rULCON0 &=0XFFFFFF00;
          rULCON0 |=0X03;//1位起始位,8位數(shù)據(jù)位
          rUCON0=0x05;//0X0805;//串口時鐘PCLK,查詢方式 東:PCLK為50M
          rUBRDIV0 =325;//0X1A;//波特率115200****325時設置為9600
          rGPBCON = 0x1dd7fc;//GPB5,6,8,10設置為輸出
          rGPBDAT|=0x560;//4個LED全滅
          while(1)
          {
          if(rUTRSTAT0 & 0X01)//接收是否完畢 =1結束
          {

          buf=rURXH0;//讀取數(shù)據(jù)
          while(!(rUTRSTAT0 & 0X04));//是否允許發(fā)送 =1允許

          rUTXH0=buf;
          if(buf==1)//判斷接收到的是哪一個數(shù)字
          i=1;
          else if(buf==2)
          i=2;
          else if(buf==3)
          i=3;
          else if(buf==4)
          i=4;
          switch(i){//使相應的LED亮滅

          case 1:
          rGPBDAT^=(1<<5);
          i=0;//將i清零防止下次收到其他數(shù)據(jù)時干擾
          break;
          case 2:
          rGPBDAT^=(1<<6);
          i=0;
          break;
          case 3:
          rGPBDAT^=(1<<8);
          i=0;
          break;
          case 4:
          rGPBDAT^=(1<<10);
          i=0;
          break;
          default:break;
          }

          }
          }

          return 0;
          }


          上一頁 1 2 下一頁

          關鍵詞: ARM9S3C2440串口UAR

          評論


          技術專區(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); })();