【转载】关于串口的初始化Uart_Init(0, 115200)
2014-02-22 18:49阅读:
[转载自]http://blog.csdn.net/heqiuya/article/details/8029306
void Uart_Init(int pclk,int
baud)
{
int i;
if(pclk == 0)
因为Main.c中定义了GLOBAL_CLK=1,所以PCLK在option.h中定义
在Main.c中的设置,FCLK:HCLK:PCLK=1:4:8,所以PCLK=3200MHz
pclk =
PCLK;
在UART模块中,包含三个UART
FIFO控制寄存器。
三个FIFO控制器,都设置成FIFO
disable
rUF
CON0 = 0x0;
rUFCON1 = 0x0;
rUFCON2 = 0x0;
在UART模块中,包含两个UMCON
因为UART2不支持AFC功能,因为没有nRTS2、nCTS2
两个UMCON,都设置成AFC
disable
rUMCON0 = 0x0;
rUMCON1 = 0x0;
//UART0
设置UART0中的ULCON
每帧长度8位。
每帧one stop
bit。
no parity。
normal mode(not IR
mode)
rULCON0 = 0x3;
设置UART0的UCON
Receive mode:interrupt
request或polling
request
transmit mode:interrupt
request或polling
request
normal transmit(don’t
sent break signal)
normal operation(don’t
enter loopback)
generate receive error status
interrupt
receive time out disable
receive interrupt type:pulse
receive interrupt type:lever
clock:PCLK
rUCON0 = 0x245;
// Control register
设置UART0的UART
波特率分频寄存器
波特率分频寄存器中的值,用来决定TX/RX的时钟频率
根据波特率来设置寄存器的值。
计算公式为UBRDIVn=(int)(UART clock/(baud
ratex16))-1
UART
clock就是此函数中的pclk
rUBRDIV0=( (int)(pclk/16./baud+0.5) -1
); //Baud rate divisior
register 0
//UART1
rULCON1 =
0x3;
rUCON1 =
0x245;
rUBRDIV1=(
(int)(pclk/16./baud+0.5) -1 );
//UART2
rULCON2 =
0x3;
rUCON2 =
0x245;
rUBRDIV2=(
(int)(pclk/16./baud+0.5) -1 );
for(i=0;i<100;i++);
}