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;
}
~~~