UART0初始化:
板子LPC1788
UART0初始化步驟:
1. 初始化引腳。
*(INT32U*) IOCON_P0_02 = 0X00000021;
*(INT32U*) IOCON_P0_03 = 0X00000021;
2. 一些相關寄存器的賦值。
*(INT32U*) PCONP |= PCUART0;//UART0 power on
*(INT32U*) U0LCR = WLS_8|SBS_1|PE_Dis|DLAB_En;//8位數據,1位停止位,無奇偶校驗,DLAB=1
*(INT32U*) U0DLL = 0x20;//設置波特率
*(INT32U*) U0DLM = 0;
*(INT32U*) U0FCR = 0x00000087;//enable FIFO,Rx.Tx FIFO Reset,Rx Trigger Level 2(8 bytes)
*(INT32U*) U0LCR = WLS_8|SBS_1|PE_Dis|DLAB_Dis;//DLAB=0
*(INT32U*) U0IER = 0x00000007;//RDA,THRE,LSR中斷
程序對于發送和接收采用中斷方式,另外還有查詢方式。
發送功能實現程序:
for(i = 0; i < len; i++)
{
*(INT8U*) U0THR = (str[i] & 0xFF);//給發送保持寄存器賦值
while(!(*(INT32U*) U0IIR & 0x00000002));//檢查是否產生THR中斷
// while(!(*(INT32U*)U0LSR)&(1<<5));
}
*(INT8U*) U0THR = 0x0a;//在這一串字符的末尾,輸出回車符
接收功能實現程序:
while(!(*(INT32U*) U0IIR & 0x01))
{
switch(*(INT8U*) U0IIR & 0x0F)
{
case 0x04: //RDA
*buffer_addr ++ = *(INT8U*) U0RBR;
break;
case 0x0C: //CTI
*buffer_addr ++ = *(INT8U*) U0RBR;
break;
case 0x06:
che = *(INT8U*) U0LSR;//LSR
break;
default:
break;
}