⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart.c

📁 lpc2368 source files
💻 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 + -