歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

嵌入式學習之UART編程實例

嵌入式學習之UART編程實例

#include "s3c24xx.h"
#include "serial.h"

#define TXD0READY  (1<<2)
#define RXD0READY  (1)

#define PCLK            50000000    // init.c中的clock_init函數設置PCLK為50MHz
#define UART_CLK        PCLK        //  UART0的時鐘源設為PCLK
#define UART_BAUD_RATE  115200      // 波特率
#define UART_BRD        ((UART_CLK  / (UART_BAUD_RATE * 16)) - 1)

/*
 * 初始化UART0
 * 115200,8N1,無流控
 */
void uart0_init(void)
{
    GPHCON  |= 0xa0;    // GPH2,GPH3用作TXD0,RXD0
    GPHUP  = 0x0c;    // GPH2,GPH3內部上拉

    ULCON0  = 0x03;    // 8N1(8個數據位,無較驗,1個停止位)
    UCON0  = 0x05;    // 查詢方式,UART時鐘源為PCLK
    UFCON0  = 0x00;    // 不使用FIFO
    UMCON0  = 0x00;    // 不使用流控
    UBRDIV0 = UART_BRD; // 波特率為115200
}

/*
 * 發送一個字符
 */
void putc(unsigned char c)
{
    /* 等待,直到發送緩沖區中的數據已經全部發送出去 */
    while (!(UTRSTAT0 & TXD0READY));
   
    /* 向UTXH0寄存器中寫入數據,UART即自動將它發送出去 */
    UTXH0 = c;
}

/*
 * 接收字符
 */
unsigned char getc(void)
{
    /* 等待,直到接收緩沖區中的有數據 */
    while (!(UTRSTAT0 & RXD0READY));
   
    /* 直接讀取URXH0寄存器,即可獲得接收到的數據 */
    return URXH0;
}

/*
 * 判斷一個字符是否數字
 */
int isDigit(unsigned char c)
{
    if (c >= '0' && c <= '9')
        return 1;
    else
        return 0;     
}

/*
 * 判斷一個字符是否英文字母
 */
int isLetter(unsigned char c)
{
    if (c >= 'a' && c <= 'z')
        return 1;
    else if (c >= 'A' && c <= 'Z')
        return 1;     
    else
        return 0;
}

 

#include "serial.h"

int main()
{
    unsigned char c;
    uart0_init();  // 波特率115200,8N1(8個數據位,無校驗位,1個停止位)

    while(1)
    {
        // 從串口接收數據後,判斷其是否數字或子母,若是則加1後輸出
        c = getc();
        if (isDigit(c) || isLetter(c))
            putc(c+1);
    }

    return 0;
}

Copyright © Linux教程網 All Rights Reserved