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

📄 serial.c

📁 深圳优龙LPC22xx开发板bios源码仅供参考
💻 C
字号:
#include "def.h"
#include "config.h"
#include "board.h"
#include "utils.h"
#include "option.h"

static U16 SerialPortSel;

U16 SerialSwitch( U16 port )
{
#ifdef	SERIAL_PORTS_SWITCH
	SerialPortSel = port ? 1 : 0;
#else
	SerialPortSel = 0;
#endif
	return SerialPortSel;
}

void SerialChgBaud( U32 mclk , U32 baud )
{
	U32 Fdiv;

	//	U32 mclk =  GetMasterClock();

	U0LCR = 0x80;   							/* 允许访问分频因子寄存器 */
	Fdiv = ( Fpclk / 16 ) / baud ;  				/* 设置波特率 */
	U0DLM = Fdiv / 256;							
	U0DLL = Fdiv % 256;						
	U0LCR = 0x03;   							/* 禁止访问分频因子寄存器 */
	/* 且设置为8,1,n */
	U0IER = 0x00;   							/* 禁止接收和发送中断 */
	U0FCR = 0x00;   							/* 初始化FIFO */
	//**********************************************************************
	U1LCR = 0x80;   							/* 允许访问分频因子寄存器 */
	U1DLM = Fdiv / 256;							
	U1DLL = Fdiv % 256;						
	U1LCR = 0x03;   							/* 禁止访问分频因子寄存器 */
	/* 且设置为8,1,n */
	U1IER = 0x00;   							/* 禁止接收和发送中断 */
	U1FCR = 0x00;   							/* 初始化FIFO */
}

void SerialTxEmpty( void )
{
	if ( SerialPortSel )
		while ( !( U1LSR & 0x20 ) );		//还有数据未发送完,等待
	else
		while ( !( U0LSR & 0x20 ) );		//还有数据未发送完,等待
}

void SerialTxChar( char data )
{
	//U16 m ;
	if ( SerialPortSel )
	{
		if ( data == '\n' )
		{
			while ( !( U1LSR & 0x20 ) );		//还有数据未发送完,等待
			//for( m = 0; m < 100;  )  m++ ;		//短暂延时防止超级终端来不及响应
			U1THR = '\r' ;
		}
		while ( !( U1LSR & 0x20 ) );		//还有数据未发送完,等待
		//for( m = 0; m < 100;  )  m++ ;		//短暂延时防止超级终端来不及响应
		U1THR = data;					// 发送数据
	}
	else
	{
		if ( data == '\n' )
		{
			while ( !( U0LSR & 0x20 ) );		//还有数据未发送完,等待
			//for( m = 0; m < 100;  )  m++ ;		//短暂延时防止超级终端来不及响应
			U0THR = '\r' ;
		}
		while ( !( U0LSR & 0x20 ) );		//还有数据未发送完,等待
		//for( m = 0; m < 100;  )  m++ ;		//短暂延时防止超级终端来不及响应
		U0THR = data;					// 发送数据
	}
}

void SerialTxString( char* s )
{
	while ( *s )
		SerialTxChar( *s++ );
}

int SerialRxReady( void )
{
	if ( SerialPortSel )
		return ( U1LSR & 0x01 );	//Receive data ready
	else
		return ( U0LSR & 0x01 );	//Receive data ready
}

char SerialRxKey( void )
{
	if ( SerialPortSel )
	{
		if ( U1LSR & 0x01 ) //Receive data ready
			return U1RBR ;
	}
	else
	{
		if ( U0LSR & 0x01 ) //Receive data ready
			return U0RBR ;
	}

	return 0;
}

char SerialRxChar( void )
{
	if ( SerialPortSel )
	{
		while ( ( U1LSR & 0x01 ) == 0 );		//没有收到数据
		return U1RBR ;
	}
	else
	{
		while ( ( U0LSR & 0x01 ) == 0 );		//没有收到数据
		return U0RBR ;
	}

	return 0 ;
}

int SerialRxToBuf( char* b )
{
	if ( SerialPortSel )
	{
		if ( U1LSR & 0x01 )    //Receive data ready
			*b = U1RBR ;
		else
			return 0;
	}
	else
	{
		if ( U0LSR & 0x01 )    //Receive data ready
			*b = U0RBR ;
		else
			return 0;
	}

	return 1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -