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
rUFCON0 = 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++);
}