加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

【转载】关于串口的初始化Uart_Init(0, 115200)

(2014-02-22 18:49:45)
标签:

it

[转载自]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,所以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++);

}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有