📄 uart.c
字号:
/*****************************************************************************
* uart.c: UART API file for NXP LPC23xx/24xx Family Microprocessors
*
* *********** DEVELOPED BY RAVINDRANATH G *************
*
* History
* 2008.22.12 ver 1.00 Prelimnary version, first Release
*
******************************************************************************/
#define _AEABI_PORTABILITY_LEVEL 1
#include "LPC23xx.h" /* LPC23xx/24xx definitions */
#include "type.h"
#include "uart.h"
#include "display.h"
#include "string.h"
#include "KeyBoard.h"
//void init_uart()
//{
// U0LCR = 0X00000083;
// U0DLL = 0X00000010;
// U0DLM = 0X00000000;
// U0LCR = 0X00000003;
// U0FCR = 0x00000001;
//}
//void serial_send(char uart_temp)
//{
// while(!(U0LSR & 0X20));
// U0THR = uart_temp;
//}
//char serial_rx(void)
//{
// while(!(U0LSR & 0X01));
// return(U0RBR);
//}
/*****************GSM Enable***************************/
void gsm_enable(void)
{
FIO2SET = (0x01 << 9);//0x80000000; //(0x01 << 31)
}
void gsm_disable(void)
{
FIO2CLR = (0x01 << 9);//0x80000000; //(0x01 << 31) (0x01 << 30)
}
/**************** IrDA Functions **********************/
void init_IrDA(void)
{
U3ICR = 0x00000001;
}
void exit_IrDA(void)
{
U3ICR = 0x00000000;
}
void IrDA_send(BYTE uart_char)
{
U3THR = uart_char;
while(!(U3LSR&0x20));
}
BYTE IrDA_receive(void)
{
while(!(U3LSR&0x01));
return(U3RBR);
}
/********************************************************/
void serial_open(BYTE uart_num, unsigned int brate)
{
switch(brate)
{
case 1200 : if(uart_num==0){
U0LCR = 0x83;
U0DLL = 0xDC;
U0DLM = 0x05;
U0LCR = 0x03;
U0FCR = 0x07;}
else if(uart_num==1){
U1LCR = 0X83;
U1MCR = 0X00;
U1DLL = 0XDC;
U1DLM = 0X05;
U1LCR = 0X03;
U1FCR = 0x07;}
else if(uart_num==2){
U2LCR = 0x83;
U2DLL = 0xDC;
U2DLM = 0x05;
U2LCR = 0x03;
U2FCR = 0x07;}
else if(uart_num==3){
U3LCR = 0x83;
U3DLL = 0xDC;
U3DLM = 0x05;
U3LCR = 0x03;
U3FCR = 0x07;}
break;
case 2400 : if(uart_num==0){
U0LCR = 0x83;
U0DLL = 0xEE;
U0DLM = 0x02;
U0LCR = 0x03;
U0FCR = 0x07;}
else if(uart_num==1){
U1LCR = 0X83;
U1MCR = 0X00;
U1DLL = 0XEE;
U1DLM = 0X02;
U1LCR = 0X03;
U1FCR = 0x07;}
else if(uart_num==2){
U2LCR = 0x83;
U2DLL = 0xEE;
U2DLM = 0x02;
U2LCR = 0x03;
U2FCR = 0x07;}
else if(uart_num==3){
U3LCR = 0x83;
U3DLL = 0xEE;
U3DLM = 0x02;
U3LCR = 0x03;
U3FCR = 0x07;}
break;
case 4800 : if(uart_num==0){
U0LCR = 0x83;
U0DLL = 0x77;
U0DLM = 0x01;
U0LCR = 0x03;
U0FCR = 0x07;}
else if(uart_num==1){
U1LCR = 0x83;
U1MCR = 0X00;
U1DLL = 0x77;
U1DLM = 0x01;
U1LCR = 0x03;
U1FCR = 0x07;}
else if(uart_num==2){
U2LCR = 0x83;
U2DLL = 0x77;
U2DLM = 0x01;
U2LCR = 0x03;
U2FCR = 0x07;}
else if(uart_num==3){
U3LCR = 0x83;
U3DLL = 0x77;
U3DLM = 0x01;
U3LCR = 0x03;
U3FCR = 0x07;}
break;
case 9600 :
if(uart_num==0){
U0LCR = 0x83;
U0DLL = 0xBC;
U0DLM = 0x00;
U0LCR = 0x03;
U0FCR = 0x07;}
else if(uart_num==1){
U1LCR = 0x83;
U1MCR = 0X00;
U1DLL = 0xBC;
U1DLM = 0x00;
U1LCR = 0x03;
U1FCR = 0x07;}
else if(uart_num==2){
U2LCR = 0x83;
U2DLL = 0xBC;
U2DLM = 0x00;
U2LCR = 0x03;
U2FCR = 0x07;}
else if(uart_num==3){
U3LCR = 0x83;
U3DLL = 0xBC;
U3DLM = 0x00;
U3LCR = 0x03;
U3FCR = 0x07;}
break;
case 19200 : if(uart_num==0){
U0LCR = 0x83;
U0DLL = 0x5E;
U0DLM = 0x00;
U0LCR = 0x03;
U0FCR = 0x07;}
else if(uart_num==1){
U1LCR = 0x83;
U1MCR = 0X00;
U1DLL = 0x5E;
U1DLM = 0x00;
U1LCR = 0x03;
U1FCR = 0x07;}
else if(uart_num==2){
U2LCR = 0x83;
U2DLL = 0x5E;
U2DLM = 0x00;
U2LCR = 0x03;
U2FCR = 0x07;}
else if(uart_num==3){
U3LCR = 0x83;
U3DLL = 0x5E;
U3DLM = 0x00;
U3LCR = 0x03;
U3FCR = 0x07;}
break;
case 38400 : if(uart_num==0){
U0LCR = 0x83;
U0DLL = 0x2F;
U0DLM = 0x00;
U0LCR = 0x03;
U0FCR = 0x07;}
else if(uart_num==1){
U1LCR = 0x83;
U1MCR = 0X00;
U1DLL = 0x2F;
U1DLM = 0x00;
U1LCR = 0x03;
U1FCR = 0x07;}
else if(uart_num==2){
U2LCR = 0x83;
U2DLL = 0x2F;
U2DLM = 0x00;
U2LCR = 0x03;
U2FCR = 0x07;}
else if(uart_num==3){
U3LCR = 0x83;
U3DLL = 0x2F;
U3DLM = 0x00;
U3LCR = 0x03;
U3FCR = 0x07;}
break;
case 57600 : if(uart_num==0){
U0LCR = 0x83;
U0DLL = 0x1F;
U0DLM = 0x00;
U0LCR = 0x03;
U0FCR = 0x07;}
else if(uart_num==1){
U1LCR = 0x83;
U1MCR = 0X00;
U1DLL = 0x1F;
U1DLM = 0x00;
U1LCR = 0x03;
U1FCR = 0x07;}
else if(uart_num==2){
U2LCR = 0x83;
U2DLL = 0x1F;
U2DLM = 0x00;
U2LCR = 0x03;
U2FCR = 0x07;}
else if(uart_num==3){
U3LCR = 0x83;
U3DLL = 0x1F;
U3DLM = 0x00;
U3LCR = 0x03;
U3FCR = 0x07;}
break;
case 115200 :
if(uart_num==0){
U0LCR = 0x83;
U1MCR = 0X00;
U0DLL = 0x10;
U0DLM = 0x00;
U0LCR = 0x03;
U0FCR = 0x07;}
else if(uart_num==1){
U1LCR = 0x83;
U1DLL = 0x10;
U1DLM = 0x00;
U1LCR = 0x03;
U1FCR = 0x07;}
else if(uart_num==2){
U2LCR = 0x83;
U2DLL = 0x10;
U2DLM = 0x00;
U2LCR = 0x03;
U2FCR = 0x07;}
else if(uart_num==3){
U3LCR = 0x83;
U3DLL = 0x10;
U3DLM = 0x00;
U3LCR = 0x03;
U3FCR = 0x07;}
break;
default:
break;
}
}
void serial_send(BYTE uart_num, BYTE uart_char)
{
if(uart_num == 0)
{
U0THR = uart_char;
while(!(U0LSR & 0X20));
}
else if(uart_num == 1)
{
U1THR = uart_char;
while(!(U1LSR & 0X20));
}
else if(uart_num == 2)
{
U2THR = uart_char;
while(!(U2LSR & 0X20));
}
else if(uart_num == 3)
{
U3THR = uart_char;
while(!(U3LSR & 0X20));
}
}
//unsigned char serial_receive(BYTE uart_num )
//{
// if(uart_num == 0)
// {
// while(!(U0LSR & 0X01));return(U0RBR);
// }
// else if(uart_num == 1)
// {
// while(!(U1LSR & 0X01));return(U1RBR);
// }
// else if(uart_num == 2)
// {
// while(!(U2LSR & 0X01));return(U2RBR);
// }
// else if(uart_num == 3)
// {
// while(!(U3LSR & 0X01));return(U3RBR);
// }
// else
// return 0;
//}
unsigned char serial_receive(BYTE uart_num, BYTE timeout)
{
int flag=0;
DWORD tout,count=0;
tout = (timeout*7000000);//7200000
if(uart_num == 0)
{
while(!(U0LSR & 0X01))//;return(U0RBR);
{
if(count > tout)
{flag=1;break;}
if(tout)count++;
}
if(flag) return(NULL);
else return(U0RBR);
}
else if(uart_num == 1)
{
while(!(U1LSR & 0X01))//;return(U1RBR);
{
if(count > tout)
{flag=1;break;}
if(tout)count++;
}
if(flag) return(NULL);
else return(U1RBR);
}
else if(uart_num == 2)
{
while(!(U2LSR & 0X01))//;return(U2RBR);
{
if(count > tout)
{flag=1;break;}
if(tout)count++;
}
if(flag) return(NULL);
else return(U2RBR);
}
else if(uart_num == 3)
{
while(!(U3LSR & 0X01))//;return(U3RBR);
{
if(count > tout)
{flag=1;break;}
if(tout)count++;
}
if(flag) return(NULL);
else return(U3RBR);
}
else
return 0;
}
void serial_send_string(BYTE uart_num, BYTE *buf)
{
int i,Length = 0;
do
{
Length++;
} while((*(buf+Length)) != '\0');
if(uart_num == 0)
{
for ( i = 0; i < Length; i++ )
{
U0THR = *buf;
while(!(U0LSR & 0X20));
buf++;
}
}
else if(uart_num == 1)
{
for ( i = 0; i < Length; i++ )
{
U1THR = *buf;
while(!(U1LSR & 0X20));
buf++;
}
}
else if(uart_num == 2)
{
for ( i = 0; i < Length; i++ )
{
U2THR = *buf;
while(!(U2LSR & 0X20));
buf++;
}
}
else if(uart_num == 3)
{
for ( i = 0; i < Length; i++ )
{
U3THR = *buf;
while(!(U3LSR & 0X20));
buf++;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -