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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 三 ARM9(S3C2440)的串口UART——程序?qū)嵗v解

          三 ARM9(S3C2440)的串口UART——程序?qū)嵗v解

          作者: 時間:2016-11-27 來源:網(wǎng)絡 收藏

          下面是利用中斷的串口通信程序


          #include"2440addr.h"
          void __irq UART0RX_isr()
          {
          char buf,i;
          rINTMSK=0xffffffff;
          ClearPending(BIT_UART0);

          if(rUTRSTAT0 & 0X01)//接收是否完畢 =1結束
          {
          ClearSubPending(BIT_SUB_RXD0);
          buf=rURXH0;//讀取數(shù)據(jù)
          while(!(rUTRSTAT0 & 0X04));//是否允許發(fā)送 =1允許

          rUTXH0=buf;
          if(buf==1)
          i=1;
          else if(buf==2)
          i=2;
          else if(buf==3)
          i=3;
          else if(buf==4)
          i=4;
          switch(i){

          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;
          }

          }
          EnableIrq(BIT_UART0);
          EnableSubIrq(BIT_SUB_RXD0);
          EnableIrq(BIT_EINT0|BIT_EINT2|BIT_EINT3|BIT_EINT4_7);
          }
          static void __irq Key_ISR()
          {
          char key;//用來標識是哪一個按鍵按下

          //EnterCritical(&r);
          rINTMSK=0xffffffff;
          if(rINTPND==BIT_EINT0) {
          ClearPending(BIT_EINT0);
          key=1;
          }
          else if(rINTPND==BIT_EINT2) {
          ClearPending(BIT_EINT2);
          key=2;
          }
          else if(rINTPND==BIT_EINT3) {
          ClearPending(BIT_EINT3);
          key=3;
          }
          else if(rINTPND==BIT_EINT4_7){
          rEINTPEND=(1<<4);
          ClearPending(BIT_EINT4_7);
          key=4;
          }
          switch(key){
          case 1:
          rGPBDAT^=(1<<5);
          break;
          case 2:
          rGPBDAT^=(1<<6);
          break;
          case 3:
          rGPBDAT^=(1<<8);
          break;
          case 4:
          rGPBDAT^=(1<<10);
          break;
          }

          //ExitCritical(&r);
          EnableIrq(BIT_EINT0|BIT_EINT2|BIT_EINT3|BIT_EINT4_7);
          EnableIrq(BIT_UART0);
          EnableSubIrq(BIT_SUB_RXD0);



          }
          int TSmain()
          {


          rULCON0 &=0XFFFFFF00;
          rULCON0 |=0X03;//1位起始位,8位數(shù)據(jù)位
          rUCON0=0x05;//0X0805;//串口時鐘PCLK,查詢方式 東:PCLK為50M
          rUBRDIV0 =325;//0X1A;//波特率115200****325時設置為9600
          rGPHUP=0x1ff;//H口上拉禁止
          rGPHCON&=0x3c0000;
          rGPHCON|=0x2faaa;
          rGPBCON = 0x1dd7fc;//GPB5,6,8,10設置為輸出
          rGPBDAT|=0x560;//4個LED全滅
          rGPFCON &=~((3<<0)|(3<<4)|(3<<6)|(3<<8)) ;
          rGPFCON |= ((2<<0)|(2<<4)|(2<<6)|(2<<8)) ;//GPF0,GPF2,GPF3,GPF4工作在第二功能狀態(tài),即中斷
          rEINTPEND=(1<<4);
          ClearPending(BIT_EINT0|BIT_EINT2|BIT_EINT3|BIT_EINT4_7);
          ClearSubPending(BIT_SUB_RXD0);
          ClearPending(BIT_UART0);
          pISR_EINT0= pISR_EINT2 =pISR_EINT3 = pISR_EINT4_7=(int)Key_ISR;
          EnableIrq(BIT_EINT0|BIT_EINT2|BIT_EINT3|BIT_EINT4_7);
          EnableIrq(BIT_UART0);
          EnableSubIrq(BIT_SUB_RXD0);
          rEINTMASK=~(1<<4);
          pISR_UART0=(unsigned) UART0RX_isr;

          while(1)
          {

          }

          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); })();