新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > S3C2440的UART詳解

        S3C2440的UART詳解

        作者: 時間:2016-11-26 來源:網絡 收藏

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

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


        ULCON0 = 0x03; // 8N1(8個數據位,無校驗,1個停止位)
        UCON0 = 0x245;

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

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

        //======此函數的作用是向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(); //將數據寫入到UART0發(fā)送緩沖器中

        }

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

        // Delay(1);

        WrUTXH0(data);

        }

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

        void Uart_SendString(char *pt)

        {

        while(*pt)

        Uart_SendByte(*pt++);

        }

        //C語言的可變參數,為了達到printf的功能

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

        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有數據時,返回URXH的數據。當URXH沒有數據時,總是等待,直到有數據。

        char Uart_Getch(void)

        {

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

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

        }

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

        char Uart_GetKey(void)

        {

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

        return RdURXH0();

        else

        return 0;

        }

        //==這個函數用于從終端得到一個字符串,并儲存到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=

        主站蜘蛛池模板: 濮阳市| 垦利县| 宜川县| 池州市| 页游| 溆浦县| 通城县| 永仁县| 伽师县| 龙胜| 和硕县| 乌拉特中旗| 甘孜县| 桓仁| 台南市| 彩票| 蒲城县| 葵青区| 乳源| 潮州市| 永安市| 凤阳县| 灌南县| 乐东| 罗田县| 安泽县| 腾冲县| 高安市| 曲松县| 保德县| 上高县| 吴旗县| 中西区| 双峰县| 凤冈县| 科尔| 和静县| 吉林省| 炉霍县| 长沙市| 利川市|