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

📄 uart_ini.h

📁 3个串口接收
💻 H
字号:
#include	"com_cfg.h"
#include	"config.h"
#include	"UART_IRQ.h"

#define		UARTBAUD	4800				// 未考虑小数分频器,所预期得到的波特率
#define		UART0BAUD	38400				// 未考虑小数分频器,所预期得到的波特率


#define		FDR			0 					// 若该宏为0则不会启用小数分频器

/*********************************************************************************************************
** 函数名称 :ClrRcvFIFO
** 函数功能 :读空接收FIFO
** 入口参数 :无
** 出口参数 :无
*********************************************************************************************************/
void ClrU0RcvFIFO(void)
{
	volatile uint32 i, temp = 0;

	for (i = 0; i < 8; i++)	
	{
		if ((U0LSR & 0x01) == 0x01)
		{
			temp = U0RBR;					// 读空接收FIFO
		}
		else
		{
			break;
		}
	}		
}

void ClrU1RcvFIFO(void)
{
	volatile uint32 i, temp = 0;

	for (i = 0; i < 8; i++)	
	{
		if ((U1LSR & 0x01) == 0x01)
		{
			temp = U1RBR;					// 读空接收FIFO
		}
		else
		{
			break;
		}
	}		
}	

void ClrU2RcvFIFO(void)
{
	volatile uint32 i, temp = 0;

	for (i = 0; i < 8; i++)	
	{
		if ((U2LSR & 0x01) == 0x01)
		{
			temp = U2RBR;					// 读空接收FIFO
		}
		else
		{
			break;
		}
	}		
}	

void ClrU3RcvFIFO(void)
{
	volatile uint32 i, temp = 0;

	for (i = 0; i < 8; i++)	
	{
		if ((U3LSR & 0x01) == 0x01)
		{
			temp = U3RBR;					// 读空接收FIFO
		}
		else
		{
			break;
		}
	}		
}	

/*********************************************************************************************************
** 函数名称:BaudGet
** 函数功能:计算当前的实际波特率
** 入口参数:无 
** 出口参数:RealBaud	当前的实际波特率
**********************************************************************************************************/
/*
uint32	BaudGet(void)
{
	uint16 dll, dlm;	
	uint32 Realbaud, div, mul;	
	
	// 读取除数锁存器和小数波特率发生器的值 
	U0LCR = 0x83;							// DLAB=1
	dlm   = U0DLM;
	dll   = U0DLL;
	div   = U0FDR & 0x0F;
	mul   = (U0FDR >> 4) & 0x0F;
	U0LCR = 0x03;
	
	// 考虑进小数分频寄存器,计算实际波特率 
	Realbaud = mul * Fpclk / ( 16 * (256 * dlm + dll) * (mul + div) );
	
	return (Realbaud);	
}
*/

/*********************************************************************************************************
** 函数名称:UART0_Ini
** 函数功能:按默认值初始化串口0的引脚和通讯参数。设置为8位数据位,1位停止位,无奇偶校验,波特率。
** 入口参数:无 
** 出口参数:无
**********************************************************************************************************/

void UART0_Ini(void)
{
	uint32 	Fdiv = 0;
//	uint32 bak = 0;

	/* 在PCONP里启用UART0 */
	PCONP 	|= 1 << 3;						// 使能UART0
		
	/* 初始化引脚 */
	PINSEL0  |= (0x01 << 4) | (0x01 << 6);	// 设置P0.2和P0.3连接到UART0

	/* 初始化串口通讯参数 */
	U0LCR 	 = 0x83;						// 设置为8位数据位,1位停止位,无奇偶校验,DLAB=1, 允许设置波特率
	Fdiv 	 = (Fpclk / 16) / UART0BAUD;		// 设置波特率

	U0DLM 	 = Fdiv / 256;
	U0DLL 	 = Fdiv % 256;
	U0LCR 	 = 0x03;						// 令DLAB位为0

	/* 设置FIFO */
   	U0FCR  	 = 0x05;					    // 使能FIFO,并设置FIFO触发深度大小为1个字节
	
	/* 清除接收FIFO内的数据 */
	ClrU0RcvFIFO();
	
	/* 初始化UART0 VIC 中断接口 */
    VICIntEnClr  |= 1 << UART0_INT;	
    	
	VICVectPri6   = 0x05;					
	VICVectAddr6  = (uint32)IRQ_UART0Recv;	
//	VICVectAddr6  = (uint32)IRQ_UART0Send;	
	
	VICIntEnable |= 1 << UART0_INT;		
	IRQEnable();

		/*	以下语句设置小数分频系数为0.5	*/
#if		FDR
  	U0FDR  = (1 << 0) |						// DIVADDVAL=1
			 (1 << 4);						// MULVAL=1	
#endif
}

/*********************************************************************************************************
** 函数名称:UART1_IniDft
** 函数功能:按默认值初始化串口1的引脚和通讯参数。设置为8位数据位,1位停止位,无奇偶校验,波特率。
** 入口参数:无 
** 出口参数:无
**********************************************************************************************************/
void UART1_Ini(void)
{
	uint32 	Fdiv = 0;
	PCONP |= (1 << 4);						// 打开UART1

	/* 初始化相关的I/O口 */
//	PINSEL4 = (0x02 << 0) | (0x02 << 2);	// 设置P2.0和P2.1管脚连接到UART1
	PINSEL0 |= 0x01 << 30;					// 设置P0.15和P0.16管脚连接到UART1
	PINSEL1 |= 0x01 << 0;
	
	/* 初始化串口通讯参数 */
	U1LCR 	= 0x83;							// 设置为8位数据位,1位停止位,无奇偶校验,DLAB=1,允许设置波特率
	Fdiv 	= (Fpclk / 16) / UARTBAUD;		// 设置波特率
	U1DLM 	= Fdiv / 256;
	U1DLL 	= Fdiv % 256;
	U1LCR 	= 0x03;							// 令DLAB位为0

	/* 设置FIFO */
    U1FCR  	 = 0x05;					    // 使能FIFO,并设置FIFO触发深度大小为1个字节
//	U1FCR  	 = 0x85;					    // 使能FIFO,并设置FIFO触发深度大小为8个字节
//	U1FCR  	 = 0x04;					    // 禁能FIFO,

	/* 清除接收FIFO内的数据 */
	ClrU1RcvFIFO();
	
	/* 初始化UART1 VIC 中断接口 */
    VICIntEnClr  |= 1 << UART1_INT;	
    	
	VICVectPri7   = 0x06;					
	VICVectAddr7  = (uint32)IRQ_UART1Recv;	
//	VICVectAddr7  = (uint32)IRQ_UART1Send;	
	
	VICIntEnable |= 1 << UART1_INT;		
	IRQEnable();

//	U1FCR 	&= ~0x07;						// 禁用FIFO
//  U1IER 	&= ~0x07;						// 禁止UART产生中断

	/*	以下语句设置小数分频系数为0.5	*/
#if		FDR
  	U1FDR  = (1 << 0) |						// DIVADDVAL=1
			 (1 << 4);						// MULVAL=1	
#endif

}

/*********************************************************************************************************
** 函数名称:UART2_IniDft
** 函数功能:按默认值初始化串口2的引脚和通讯参数。设置为8位数据位,1位停止位,无奇偶校验,波特率
** 入口参数:无 
** 出口参数:无
**********************************************************************************************************/
void UART2_Ini(void)
{
	uint32 	Fdiv = 0;
	PCONP |= (1 << 24);						// 打开UART2

	/* 初始化相关的I/O口 */
//	PINSEL0 |= (0x01 << 20) | (0x01 << 22);	// 设置P0.10和P0.11管脚连接到UART2
	PINSEL0 = (PINSEL0 & 0xFF0FFFFF) | (0x05 << 20);
	
	/* 初始化串口通讯参数 */
	U2LCR 	= 0x83;							// 设置为8位数据位,1位停止位,无奇偶校验,DLAB=1,允许设置波特率
	Fdiv 	= (Fpclk / 16) / UARTBAUD;		// 设置波特率
	U2DLM 	= Fdiv / 256;
	U2DLL 	= Fdiv % 256;
	U2LCR 	= 0x03;							// 令DLAB位为0

	/* 设置FIFO */
//   	U2FCR  	 = 0x05;					    // 使能FIFO,并设置FIFO触发深度大小为1个字节
	U2FCR  	 = 0x04;					    // 使能FIFO,并设置FIFO触发深度大小为1个字节
	
	/* 清除接收FIFO内的数据 */
	ClrU2RcvFIFO();
	
	/* 初始化UART1 VIC 中断接口 */
    VICIntEnClr  |= 1 << UART2_INT;	
    	
	VICVectPri28   = 0x06;					
	VICVectAddr28  = (uint32)IRQ_UART2Recv;	
//	VICVectAddr28  = (uint32)IRQ_UART2Send;	
	
	VICIntEnable |= 1 << UART2_INT;		
	IRQEnable();

//	U1FCR 	&= ~0x07;						// 禁用FIFO
//  U1IER 	&= ~0x07;						// 禁止UART产生中断

	/*	以下语句设置小数分频系数为0.5	*/
#if		FDR
  	U2FDR  = (1 << 0) |						// DIVADDVAL=1
			 (1 << 4);						// MULVAL=1	
#endif

}

/*
void UART2_IniDft(void)
{
	uint32 	Fdiv = 0;
	
	PCONP  |= 1 << 24;						// 打开UART2
	// 初始化相关的I/O口 
	PINSEL0 = (0x01 << 20) | (0x01 << 22);	// 设置P0.10和P0.11管脚连接到UART2	
	
	// 初始化串口通讯参数 
	U2LCR 	= 0x83;							// 设置为8位数据位,1位停止位,无奇偶校验,DLAB=1,允许设置波特率
	Fdiv 	= (Fpclk / 16) / UARTBAUD;		// 设置波特率
	U2DLM 	= Fdiv / 256;
	U2DLL 	= Fdiv % 256;
	U2LCR 	= 0x03;							// 令DLAB位为0

	U2FCR  &= ~0x07;						// 禁用FIFO
    U2IER  &= ~0x07;						// 禁止UART产生中断

	//	以下语句设置小数分频系数为0.5	
#if		FDR
  	U2FDR  = (1 << 0) |						// DIVADDVAL=1
			 (1 << 4);						// MULVAL=1	
#endif
}
*/
/*********************************************************************************************************
** 函数名称:UART3_IniDft
** 函数功能:按默认值初始化串口3的引脚和通讯参数。设置为8位数据位,1位停止位,无奇偶校验,波特率
** 入口参数:无 
** 出口参数:无
**********************************************************************************************************/
void UART3_Ini(void)
{
	uint32 	Fdiv = 0;
	PCONP  |= 1 << 25;						// 打开UART3

	/* 初始化相关的I/O口 */
//	PINSEL0 = (0x02 << 0) | (0x02 << 2);		// 设置P0.0和P0.1连接到UART3
	PINSEL0 = (PINSEL0 & 0xFFFFFFF0) | (0x0A << 0);
	
	/* 初始化串口通讯参数 */
	U3LCR 	= 0x83;							// 设置为8位数据位,1位停止位,无奇偶校验,DLAB=1,允许设置波特率
	Fdiv 	= (Fpclk / 16) / UARTBAUD;		// 设置波特率
	U3DLM 	= Fdiv / 256;
	U3DLL 	= Fdiv % 256;
	U3LCR 	= 0x03;							// 令DLAB位为0

	/* 设置FIFO */
//   	U3FCR  	 = 0x05;					    // 使能FIFO,并设置FIFO触发深度大小为1个字节
	U3FCR  	 = 0x04;					    // 使能FIFO,并设置FIFO触发深度大小为1个字节
	
	/* 清除接收FIFO内的数据 */
	ClrU3RcvFIFO();
	
	/* 初始化UART1 VIC 中断接口 */
    VICIntEnClr  |= 1 << UART3_INT;	
    	
	VICVectPri29   = 0x06;					
	VICVectAddr29  = (uint32)IRQ_UART3Recv;	
//	VICVectAddr29  = (uint32)IRQ_UART3Send;	
	
	VICIntEnable |= 1 << UART3_INT;		
	IRQEnable();

//	U1FCR 	&= ~0x07;						// 禁用FIFO
//  U1IER 	&= ~0x07;						// 禁止UART产生中断

	/*	以下语句设置小数分频系数为0.5	*/
#if		FDR
  	U3FDR  = (1 << 0) |						// DIVADDVAL=1
			 (1 << 4);						// MULVAL=1	
#endif

}
/*
void UART3_IniDft(void)
{
	uint32 	Fdiv = 0;
	PCONP  |= 1 << 25;						// 打开UART3
	
	// 初始化相关的IO 
	//PINSEL9 = (0x03 << 24) | (0x03 << 26);	// 设置P4.28和P4.29连接到UART3
	PINSEL0 = (0x02 << 0) | (0x02 << 2);		// 设置P0.0和P0.1连接到UART3
	
	// 初始化串口通讯参数 
	U3LCR 	= 0x83;							// 设置为8位数据位,1位停止位,无奇偶校验,DLAB=1,允许设置波特率
	Fdiv 	= (Fpclk / 16) / UARTBAUD;		// 设置波特率
	U3DLM 	= Fdiv / 256;
	U3DLL 	= Fdiv % 256;
	U3LCR 	= 0x03;							// 令DLAB位为0

	U3FCR  &= ~0x07;						// 禁用FIFO
    U3IER  &= ~0x07;						// 禁止UART产生中断

	//	以下语句设置小数分频系数为0.5	
#if		FDR
  	U3FDR  = (1 << 0) |						// DIVADDVAL=1
			 (1 << 4);						// MULVAL=1	
#endif
}
*/

⌨️ 快捷键说明

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