📄 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 + -