在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            S3C2440的UART詳解

            作者: 時間:2016-11-26 來源:網(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個數(shù)據(jù)位,無校驗,1個停止位)
            UCON0 = 0x245;

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

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

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

            void Uart_SendByte(char data)

            {

            if(data==)

            {

            while(!(rUTRSTAT0 & 0x2));

            取出rUTRSTAT0(UART0發(fā)送/接收寄存器)寄存器中的第2位,含義為Transmit buffer是否為空,為1時表示空。在發(fā)送緩沖器為空時,再發(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語言的可變參數(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ù)時,返回URXH的數(shù)據(jù)。當(dāng)URXH沒有數(shù)據(jù)時,總是等待,直到有數(shù)據(jù)。

            char Uart_Getch(void)

            {

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

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

            }

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

            char Uart_GetKey(void)

            {

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

            return RdURXH0();

            else

            return 0;

            }

            //==這個函數(shù)用于從終端得到一個字符串,并儲存到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(" ");//因為backspace,所以刪除最后一個顯示的字符

            string--;

            }

            }

            else

            {

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

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

            }

            }

            *string=