?? uart.c
字號:
/*------------------------------------------------------
FILE NAME : uart.c
DESCRIPTION : lpc2132 uart driver.
VERSION : 0.0.0 (C)aureole
AUTHOR : Aureole
CREATE DATE : 4.5.2006
MODIFY DATE : ---
LOGS :-\
1. First create for hardware test. 4.5.2006
--------------------------------------------------------*/
//---------------Include files--------------------------//
#include "..\include\uart.h"
#include "..\include\common.h"
#include <string.h>
//----------------variable -----------------------------//
char receive_buffer[BUFFER_SIZE];
unsigned char uart0_receive_count=0;
unsigned char uart0_receive_ok_flag=0;
//---------------Function-------------------------------//
/*--------------------------------------------------------
NAME : receive
ENTRY TYPE: unsigned char *
RETURN TYPE: void
PURPOSE : ---
VERSION : 0.1
DESCRIPTION:
CREATE DATE: 4.5.2006
LOGS : 1.first create;
---------------------------------------------------------*/
void irq_uart0(void) __irq
{
// LED_ON
if((U0IIR & 0x0F) == 0x04){
receive_buffer[uart0_receive_count++]=U0RBR;
if(receive_buffer[uart0_receive_count-2]=='\r'&&
receive_buffer[uart0_receive_count-1]=='\n'){
uart0_receive_count=0;
uart0_receive_ok_flag=TRUE;
}
VICVectAddr = 0x00; // 中斷處理結束
}
/// LED_OFF
}
/*--------------------------------------------------------
NAME : initialize_uart0
ENTRY TYPE: void
RETURN TYPE: void
PURPOSE : ---
VERSION : 0.1
DESCRIPTION:
CREATE DATE: 4.5.2006
LOGS : 1.first create;
---------------------------------------------------------*/
void initialize_uart0(void)
{
unsigned short Fdiv;
PINSEL0 |= 0x00000005;
U0LCR = 0x83; // DLAB=1,允許設置波特率
Fdiv = (Fpclk / 16 ) / UART0_BPS; // 設置波特率 Fdiv= (VPB/(16*bps));
U0DLM = Fdiv / 256;
U0DLL = Fdiv % 256;
U0LCR = 0x03;
U0FCR = 0x01; // 使能FIFO,并設置觸發點為1字節
U0IER = 0x01; // 允許RBR中斷,即接收中斷
// 使能IRQ中斷
VICIntSelect = 0x00000000; // 設置所有的通道為IRQ中斷
VICVectCntl0 = 0x20 | 0x06; // UART0分配到IRQ slot0,即最高優先級
VICVectAddr0 = (unsigned long int)irq_uart0; // 設置UART0向量地址
VICIntEnable |= 1 << 0x06; // 使能UART0中斷
}
#ifdef DEBUG_FROM_UART1
/*--------------------------------------------------------
NAME : initialize_uart1
ENTRY TYPE: void
RETURN TYPE: void
PURPOSE : ---
VERSION : 0.1
DESCRIPTION:
CREATE DATE: 4.12.2006
LOGS : 1.first create;
---------------------------------------------------------*/
void initialize_uart1(void)
{
unsigned short Fdiv;
PINSEL0 |= 0x00050000;
U1LCR = 0x83; // DLAB=1,允許設置波特率
Fdiv = (Fpclk / 16) / UART1_BPS; // 設置波特率
U1DLM = Fdiv / 256;
U1DLL = Fdiv % 256;
U1LCR = 0x03;
U1FCR = 0x01; // 使能FIFO,并設置觸發點為1字節
U1IER = 0x0; // 禁止中斷
}
/*--------------------------------------------------------
NAME : send_string_to_uart1
ENTRY TYPE: unsigned char *
RETURN TYPE: void
PURPOSE : ---
VERSION : 0.1
DESCRIPTION:
CREATE DATE: 4.5.2006
LOGS : 1.first create;
---------------------------------------------------------*/
void send_string_to_uart1(char * str)
{
while(*str!='\0'){
U1THR=(*str++);
while(!(U1LSR&0X40));
}
}
#endif //DEBUG_FROM_UART1
/*--------------------------------------------------------
NAME : send_string_to_uart0
ENTRY TYPE: unsigned char *
RETURN TYPE: void
PURPOSE : ---
VERSION : 0.1
DESCRIPTION:
CREATE DATE: 4.5.2006
LOGS : 1.first create;
---------------------------------------------------------*/
void send_string_to_uart0(char * str)
{
// LED_ON
while(*str!='\0'){
U0THR=(*str++);
while(!(U0LSR&0X40));
}
// LED_OFF
}
/*--------------------------------------------------------
NAME : clear_receive_buffer
ENTRY TYPE: void
RETURN TYPE: void
PURPOSE : ---
VERSION : 0.1
DESCRIPTION:
CREATE DATE: 4.8.2006
LOGS : 1.first create;
---------------------------------------------------------*/
void clear_receive_buffer(void)
{
memset(receive_buffer,0,sizeof(receive_buffer));
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -