?? serial.c
字號:
#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;}/* * 接收字符,若有數據直接返回,否則等待規定的時間 * 輸入參數: * timeout: 等待的最大循環次數,0表示不等待 * 返回值: * 0 : 無數據,超時退出 * 其他值:串口接收到的數據 */unsigned char awaitkey(unsigned long timeout){ while (!(UTRSTAT0 & RXD0READY)) { if (timeout > 0) timeout--; else return 0; // 超時,返回0 } 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;}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -