牛骨文教育服务平台(让学习变的简单)

UART裸机驱动设计主要在于配置各寄存器的值;

开发板型号: TX2440;

UART 使能: 使能UART0;

传 输 参 数: 8位数据位,1位停止位,无奇偶校验,波特率115200;

时 钟 参 数: UART使用系统的 PCLK.

/*******************************************************************
*版权所有(C)2015,ZJU
*
*文件名称:uart.c
*内容摘要:关于UART的配置
*其它说明:开发板型号:TX2440	 
*	   UART0:RXD0 -- GPH3 , TXD0 -- GPH2
*当前版本:V1.0
*作    者:Frank
*完成日期:2015.12.14
*
*******************************************************************/

#define  GPHCON		(*(volatile unsigned long *)0x56000070)	//Configures the pins of port H
#define  ULCON0		(*(volatile unsigned long *)0x50000000) //UART channel 0 line control register
#define  UCON0		(*(volatile unsigned long *)0x50000004) //UART channel 0 control register
#define  UTRSTAT0	(*(volatile unsigned long *)0x50000010) //UART channel 0 Tx/Rx status register
#define  UTXH0		(*(volatile unsigned long *)0x50000020) //UART channel 0 transmit buffer register
#define  URXH0		(*(volatile unsigned long *)0x50000024)	//UART channel 0 receive buffer register
#define  UBRDIV0	(*(volatile unsigned long *)0x50000028) //Baud rate divisior register 0

#define	 PCLK	50000000  //PCLK=50M (start.S中设置了 FCLK:HCLK:PCLK = 1:4:8, FCLK=400M)
#define  BAUD	115200

/*******************************************************************
*函数名称:Uart_Init()
*功能描述:UART初始化函数
*其他说明:
*创建日期:2015.12.14
*******************************************************************/
void Uart_Init(void)
{
	/*配置引脚功能*/
	GPHCON &= (~(0xf << 4));	
	GPHCON |= (0xa << 4);		//GPH2设为TXD0,GPH3设为RXD0
	
	/*设置数据格式*/
	ULCON0 = 0b11;			//8位数据位,1位停止位,无奇偶校验
	
	/*设置工作模式*/
	UCON0 = 0b0101;			//发送和接收均采用轮询方式
	
	/*设置波特率*/
	UBRDIV0 = (int)(PCLK/(BAUD*16) - 1);	//波特率设置为115200
}

/*******************************************************************
*函数名称:Puts()
*功能描述:字符发送函数
*输入形参:ch
*返 回 值:无
*其他说明:ch为需要发送的字符
*创建日期:2015.12.14
*******************************************************************/
void Puts(unsigned char ch)
{
	while (!(UTRSTAT0 & (1 << 2)));
	UTXH0 = ch;	
}

/*******************************************************************
*函数名称:Gets()
*功能描述:字符接收函数
*输入形参:无
*返 回 值:ch
*其他说明:ch为接收到的字符
*创建日期:2015.12.14
*******************************************************************/
unsigned char Gets(void)
{
	char ch;
	
	while (!(UTRSTAT0 & (1 << 0)));
	ch = URXH0;
	
	return ch;	
}