?? rs232.c
字號:
//rs232.c
#include "rs232.h"
/**** UART0 ****/
void UART0Initialize(unsigned int baud) {
unsigned int divisor = GetPclk() / (16 * baud);
// 設置行控制寄存器
U0LCR_bit.WLS = 0x3; // 8位數據
U0LCR_bit.SBS = 0x0; // 1位停止位
U0LCR_bit.PE = 0x0; // 無校驗
U0LCR_bit.DLAB = 0x1; // 允許DLAB
// 除法因子
U0DLL = divisor & 0xFF;
U0DLM = (divisor >> 8) & 0xFF;
U0LCR &= ~0x80;
//配置引腳功能: port0.0 -> TX0, port0.1 -> RXD0
PINSEL0_bit.P0_0 = 0x1;
PINSEL0_bit.P0_1 = 0x1;
}
void UART0WriteChar(unsigned char ch0) {
//當 U0LSR_bit.THRE = 0 時, U0THR 包含有效數據
while (U0LSR_bit.THRE == 0);
U0THR = ch0;
}
unsigned char UART0ReadChar(void) {
//當 U0LSR_bit.DR = 1 時, U0RBR 包含有效數據
while (U0LSR_bit.DR == 0);
return U0RBR;
}
unsigned char UART0ReadChar_nostop(void) {
//當 U0LSR_bit.DR = 1 時, U0RBR 包含有效數據
if(U0LSR_bit.DR == 1) return U0RBR;
else return 0;
}
void UART0WriteChar_nostop(unsigned char ch0) {
//當 U0LSR_bit.THRE = 0 時, U0THR 包含有效數據
if(U0LSR_bit.THRE == 1) U0THR = ch0;
}
/**** UART1 ****/
void UART1Initialize(unsigned int baud) {
unsigned int divisor = GetPclk() / (16 * baud);
// 設置行控制寄存器
U1LCR_bit.WLS = 0x3; // 8位數據
U1LCR_bit.SBS = 0x0; // 1位停止位
U1LCR_bit.PE = 0x0; // 無校驗
U1LCR_bit.DLAB = 0x1; // 允許DLAB
// 除法因子
U1DLL = divisor & 0xFF;
U1DLM = (divisor >> 8) & 0xFF;
U1LCR &= ~0x80;
//配置引腳功能: port0.8 -> TX1, port0.9 -> RXD1
PINSEL0_bit.P0_8 = 0x1;
PINSEL0_bit.P0_9 = 0x1;
}
void UART1WriteChar(unsigned char ch0) {
//當 U1LSR_bit.THRE = 0 時, U1THR 包含有效數據
while (U1LSR_bit.THRE == 0);
U1THR = ch0;
}
unsigned char UART1ReadChar(void) {
//當 U1LSR_bit.THRE = 0 時, U1RBR 包含有效數據
while (U1LSR_bit.DR == 0);
return U1RBR;
}
unsigned char UART1ReadChar_nostop(void) {
//當 U1LSR_bit.DR = 1 時, U1RBR 包含有效數據
if(U1LSR_bit.DR == 1) return U1RBR;
else return 0;
}
void UART1WriteChar_nostop(unsigned char ch0) {
//當 U1LSR_bit.THRE = 0 時, U1THR 包含有效數據
if(U1LSR_bit.THRE == 1) U1THR = ch0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -