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