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

📄 sys_uart.c.svn-base

📁 lwip协议在arm7+uCos系统上的移植
💻 SVN-BASE
字号:
/****************************************************************************
		Copyright (c) 深圳市民德电子科技有限公司  http://www.szminde.cn

  文件名称:sys_UART.c
  版本号:	1.0
  日期:	2005-05-25
  说明:	此文件包含对ES-TAD7100开发板上的UART模块操作的函数。
  调用列表:--
  修改历史:--
****************************************************************************/

#include "44b.h"
#include "sys_UART.h"


#include <stdarg.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

/*延时函数*/
extern void Delay(int time);

/*UART通道选择参数*/
static int whichUart=0;


/****************************************************************************
  函数名称:UART_Init()
  说明:	用指定时钟与波特率初始化UART。
  调用函数:无
  输入参数:mclk 时钟,为0时用默认时钟
  			baud 波特率
  输出参数:无
****************************************************************************/
void UART_Init(int mclk,int baud)
{
    if(mclk==0)
		mclk=MCLK;
		
    rUFCON0=0x0;     // FIFO disable
    rUFCON1=0x0;
    rUMCON0=0x0;
    rUMCON1=0x0;
    
    rULCON0=0x3;	// UART0
    rUCON0=0x245;
    rUBRDIV0=( (int)(mclk/16./baud + 0.5) -1 ); 
   
    rULCON1=0x3;	// UART1
    rUCON1=0x245;
    rUBRDIV1=( (int)(mclk/16./baud + 0.5) -1 );

	Delay(10);
}


/****************************************************************************
  函数名称:UART_Select()
  说明:	选择UART通道。
  调用函数:无
  输入参数:ch 要选择的通道,可为0或1
  输出参数:无
****************************************************************************/
void UART_Select(int ch)
{
    whichUart=ch;
}


/****************************************************************************
  函数名称:UART_Select()
  说明:	等待UART传输缓冲清空。
  调用函数:无
  输入参数:ch 要等待清空的通道,可为0或1
  输出参数:无
****************************************************************************/
void UART_TxEmpty(int ch)
{
    if(ch==0)
		while(!(rUTRSTAT0 & 0x4));	// 等待直到Tx0移位寄存器为空
    else
    	while(!(rUTRSTAT1 & 0x4));	// 等待直到Tx1移位寄存器为空
}


/****************************************************************************
  函数名称:UART_Getch()
  说明:	从UART接收一个字节的数据,未收到就一直等待。
  调用函数:无
  输入参数:无
  输出参数:返回接收到的数据
****************************************************************************/
char UART_Getch(void)
{
    if(whichUart==0)
    {	    
		while(!(rUTRSTAT0 & 0x1));	// 等待直到Rx0缓冲寄存器有接收数据
		return rURXH0;
    }
    else
    {
		while(!(rUTRSTAT1 & 0x1));	// 等待直到Rx1缓冲寄存器有接收数据
		return	rURXH1;
    }
}


/****************************************************************************
  函数名称:UART_GetKey()
  说明:	从UART接收一个字节的数据,收到就返回接收到的数据,未收到就返回0。
  调用函数:无
  输入参数:无
  输出参数:返回接收到的数据或0
****************************************************************************/
char UART_GetKey(void)
{
    if(whichUart==0)
    {	    
		if(rUTRSTAT0 & 0x1)
 			return rURXH0;
		else
		    return 0;
    }
    else
    {
		if(rUTRSTAT1 & 0x1)
		    return rURXH1;
		else
		    return 0;
    }
}


/****************************************************************************
  函数名称:UART_GetString()
  说明:	从UART接收一个字符串,并通过UART转发,直到收到回车符。
  调用函数:UART_Getch()
  			UART_Printf()
  			UART_SendByte()
  输入参数:*string 存放该字符串的指针
  输出参数:无
****************************************************************************/
void UART_GetString(char *string)
{
    char *string2=string;
    char c;
    while((c=UART_Getch())!='\r')
    {
		if(c=='\b')
		{
		    if(	(int)string2 < (int)string )
		    {
				UART_Printf("\b \b");
				string--;
		    }
		}
		else 
		{
		    *string++=c;
		    UART_SendByte(c);
		}
    }
    *string='\0';
    UART_SendByte('\n');
}


/****************************************************************************
  函数名称:UART_GetIntNum()
  说明:	从UART接收一个整型数(ASCII码到数字的转换)。
  调用函数:UART_GetString()
  			atoi()
  输入参数:无
  输出参数:返回该整型数
****************************************************************************/
int UART_GetIntNum(void)
{
    char str[30];
    char *string=str;
    int base=10;
    int minus=0;
    int lastIndex;
    int result=0;
    int i;
    
    UART_GetString(string);
    
    if(string[0]=='-')
    {
        minus=1;
        string++;
    }
    
    if(string[0]=='0' && (string[1]=='x' || string[1]=='X'))
    {
		base=16;
		string+=2;
    }
    
    lastIndex=strlen(string)-1;
    if( string[lastIndex]=='h' || string[lastIndex]=='H' )
    {
		base=16;
		string[lastIndex]=0;
		lastIndex--;
    }

    if(base==10)
    {
		result=atoi(string);
		result=minus ? (-1*result):result;
    }
    else
    {
		for(i=0;i<=lastIndex;i++)
		{
    	    if(isalpha(string[i]))
			{
				if(isupper(string[i]))
					result=(result<<4)+string[i]-'A'+10;
				else
				    result=(result<<4)+string[i]-'a'+10;
			}
			else
			{
				result=(result<<4)+string[i]-'0';
			}
		}
		result=minus ? (-1*result):result;
    }
    return result;
}


/****************************************************************************
  函数名称:UART_SendByte()
  说明:	通过UART发送一个字节的数据。
  调用函数:无
  输入参数:data 要发送的数据
  输出参数:无
****************************************************************************/
void UART_SendByte(int data)
{
	if(whichUart==0)
    {
		if(data=='\n')
		{
			rUTXH0='\r';
		    while(!(rUTRSTAT0 & 0x2));
		}
		
		rUTXH0=data;
		while(!(rUTRSTAT0 & 0x2)); // 等待直至 THR0 为空
   	}
	else
    {
		if(data=='\n')
		{
		rUTXH1='\r';
		while(!(rUTRSTAT1 & 0x2));
		}
	
		rUTXH1=data;
		while(!(rUTRSTAT1 & 0x2));  // 等待直至 THR1 为空
    }	
}		


/****************************************************************************
  函数名称:UART_SendString()
  说明:	通过UART发送一个字符串。
  调用函数:UART_SendByte()
  输入参数:*pt 要发送字符串的指针
  输出参数:无
****************************************************************************/
void UART_SendString(char *pt)
{
    while(*pt)
	UART_SendByte(*pt++);
}


/****************************************************************************
  函数名称:UART_Printf()
  说明:	UART的格式化输出。
  调用函数:va_start()
		    vsprintf()
		    UART_SendString()
		    va_end()
  输入参数:*fmt 要输出字符串的指针
  输出参数:无
****************************************************************************/
void UART_Printf(char *fmt,...)
{
    va_list ap;
    char string[256];

    va_start(ap,fmt);
    vsprintf(string,fmt,ap);
    UART_SendString(string);
    va_end(ap);
}

⌨️ 快捷键说明

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