关于串口的初始化Uart_Init(0, 115200)

void Uart_Init(int pclk,int baud)

{

    int i;

if(pclk == 0)

     因为Main.c中定义了GLOBAL_CLK=1,所以PCLKoption.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功能,因为没有nRTS2nCTS2

 两个UMCON,都设置成AFC disable

rUMCON0 = 0x0;   

rUMCON1 = 0x0;   

//UART0

    

设置UART0中的ULCON

每帧长度8位。

每帧one stop bit

no parity

normal modenot IR mode

rULCON0 = 0x3;   

设置UART0UCON

Receive modeinterrupt requestpolling request

transmit modeinterrupt requestpolling 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

设置UART0UART 波特率分频寄存器

波特率分频寄存器中的值,用来决定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++);

}

你可能感兴趣的:(关于串口的初始化Uart_Init(0, 115200))