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

          新聞中心

          S3C2440的UART詳解

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

          void uart0_init(void)
          {
          GPHCON |= 0xaa; // GPH0,GPH1,GPH2,GPH3分別nCTS0,nRTS0,TXD0,RXD0
          GPHUP = 0x7ff; //內(nèi)部上拉被禁止

          UFCON0 = 0x00; // 不使用FIFO
          UMCON0 = 0x00; // 不使用流控


          ULCON0 = 0x03; // 8N1(8個(gè)數(shù)據(jù)位,無(wú)校驗(yàn),1個(gè)停止位)
          UCON0 = 0x245;

          // 查詢方式,UART時(shí)鐘源為PCLK,中斷請(qǐng)求方式為Tx-電平,Rx-脈沖
          rUBRDIV0=( (int)(pclk/16./baud+0.5) -1 ); //設(shè)置波特率
          }

          接下來(lái)幾個(gè)是進(jìn)行數(shù)據(jù)的發(fā)送和接收的函數(shù)

          //======此函數(shù)的作用是向UART發(fā)送一個(gè)字符,不用FIFO,直接用UART發(fā)送

          void Uart_SendByte(char data)

          {

          if(data==)

          {

          while(!(rUTRSTAT0 & 0x2));

          取出rUTRSTAT0(UART0發(fā)送/接收寄存器)寄存器中的第2位,含義為Transmit buffer是否為空,為1時(shí)表示空。在發(fā)送緩沖器為空時(shí),再發(fā)送

          // Delay(1); //because the slow response of hyper_terminal

          WrUTXH0(); //將數(shù)據(jù)寫入到UART0發(fā)送緩沖器中

          }

          while(!(rUTRSTAT0 & 0x2)); //Wait until THR is empty.

          // Delay(1);

          WrUTXH0(data);

          }

          //========發(fā)送字符串的函數(shù)

          void Uart_SendString(char *pt)

          {

          while(*pt)

          Uart_SendByte(*pt++);

          }

          //C語(yǔ)言的可變參數(shù),為了達(dá)到printf的功能

          //例如:Uart_Printf(“my name is %s”a[10]);就相當(dāng)于Uart_SendString(“my name is XX”);XX是a[10]的內(nèi)容

          void Uart_Printf(char *fmt,...)

          {

          va_list ap;

          char string[256];

          va_start(ap,fmt);

          vsprintf(string,fmt,ap);

          Uart_SendString(string);

          va_end(ap);

          }

          //==等待,直到UART的發(fā)送器為空,就是發(fā)送完畢

          void Uart0_TxEmpty()

          {

          while(!(rUTRSTAT0 & 0x4)); //Wait until Tx shifter is empty.

          }

          //===從終端上獲取敲入的字符,返回值為char類型。RdURXH0有數(shù)據(jù)時(shí),返回URXH的數(shù)據(jù)。當(dāng)URXH沒(méi)有數(shù)據(jù)時(shí),總是等待,直到有數(shù)據(jù)。

          char Uart_Getch(void)

          {

          while(!(rUTRSTAT0 & 0x1)); //接收緩沖器接收到有效數(shù)據(jù)

          return RdURXH0(); //從UART0接收緩沖器(URXH0)接收數(shù)據(jù)

          }

          //===Uart_GetKey 這個(gè)與Uart_Getch 不同的是,當(dāng)URXH沒(méi)有數(shù)據(jù)時(shí)返回0。有數(shù)據(jù)時(shí),返回?cái)?shù)據(jù),這個(gè)函數(shù)可以用來(lái)查看當(dāng)前URXH中的值。

          char Uart_GetKey(void)

          {

          if(rUTRSTAT0 & 0x1) //Receive data ready

          return RdURXH0();

          else

          return 0;

          }

          //==這個(gè)函數(shù)用于從終端得到一個(gè)字符串,并儲(chǔ)存到string中

          void Uart_GetString(char *string)

          {

          char *string2 = string;

          char c;

          while((c = Uart_Getch())!=)//’’是回車鍵

          {

          if(c==)//’’是backspace按鍵

          {

          if( (int)string2 < (int)string )

          {

          Uart_Printf(" ");//因?yàn)閎ackspace,所以刪除最后一個(gè)顯示的字符

          string--;

          }

          }

          else

          {

          *string++ = c; //不是回車和退格鍵,則儲(chǔ)存到string中

          Uart_SendByte(c); //每輸入一個(gè)字符,都將它輸出到終端中

          }

          }

          *string=看屁屁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); })();