打印
[ZLG-ARM]

LPC2138波特率设置的疑问,请帮忙解答,多谢!

[复制链接]
2129|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
biboo|  楼主 | 2008-6-26 13:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在LPC2138的数据手册上看到:

Example 1: Using UART0baudrate formula from above, it can be determined that system with pclk=20 MHz, U0DL=130
(U0DLM=0x00 and U0DLL=0x82), DivAddVal=0 and MulVal=1 will enable UART0 with UART0baudrate=9615 bauds.
Example 2: Using UART0baudrate formula from above, it can be determined that system with pclk=20 MHz, U0DL=93
(U0DLM=0x00 and U0DLL=0x5D), DivAddVal=2 and MulVal=5 will enable UART0 with UART0baudrate=9600 bauds.

请问DivAddVal和MulVal在哪个积存器中设置?找了半天也没找到。总体感觉手册写的很乱.

相关帖子

沙发
biboo|  楼主 | 2008-6-26 13:56 | 只看该作者

我在LPC2148的数据手册有看到

是在U0FDR中设置的,可在LPC2138中并没有这个积存器啊,晕.

使用特权

评论回复
板凳
biboo|  楼主 | 2008-6-30 12:27 | 只看该作者

为什么拨特率设置成9600通讯没问题?

为什么拨特率设置成9600通讯没问题(收发都正确)?而设置成115200就下位机只能正确收到数据,而不能正确返回数据?

使用特权

评论回复
地板
biboo|  楼主 | 2008-6-30 12:32 | 只看该作者

部分代码如下:

uint8 InitUart1(uint32 bps)
{      
    uint16 Fdiv;
    
    PINSEL0 |= 0x00050000;                        /* 选择管脚为UART1 */

    U1LCR = 0x80;                               /* 允许访问分频因子寄存器 */
    Fdiv = (Fpclk / 16) / bps;                  /* 设置波特率 */
    U1DLM = Fdiv / 256;                            
    U1DLL = Fdiv % 256;                        
    U1LCR = 0x03;                               /* 禁止访问分频因子寄存器 */
                                                /* 且设置为8,1,n */
    U0IER = 0x05;                               /* 允许接收和发送中断 */
    //U1IER = 0x00;
    //U1FCR = 0x87;                               /* 初始化FIFO */
    
   /*
    VICIntSelect = 0;
    VICVectAddr0 = (uint32)Uart1_Handler;
    VICVectCntl0 = 0x27;
    VICIntEnable = 1 << 7;
    */
    
    return TRUE;
}


main()
{
                  ...
                  InitUart1(115200);
                  ...
                  while((U1LSR & 0x01) == 0x01)
        {
            comBuf = U1RBR;
            i++;
            if(i >= 9)
                break;
        }
        if(i >= 9 )
        {

            cTemp1[0] = 0x25;
            cxor = cTemp1[0];
            cTemp1[1] = 0x05;
            cxor ^= cTemp1[1];
            cTemp1[2] = 0x12;
            cxor ^= cTemp1[2];
            cTemp1[3] = 0x0f;
            cxor ^= cTemp1[3];
            cTemp1[4] = cxor;
            U1FCR |= 0x06;
            for(i = 0; i < cTemp1[1]; i++)
            {
                U1THR = cTemp1;
                while((U1LSR & 0x20) == 0);
                U1FCR |= 0x06;
            }
            i = 0;
        }

}
查看收到的数据为:0x49 0x41 0xA2 0xF8 0xFE 

使用特权

评论回复
5
biboo|  楼主 | 2008-6-30 14:48 | 只看该作者

难道LPC2138的串口0和串口1还不一样?

串口0同样的设置,同样的测试程序,在115200的拨特率往上发的时候没问题;而串口1在115200时就数据总出错.而其他拨特率如9600,38400,56000,57600我都试过没问题.ZLG的老大出来解答一二呀.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

24

帖子

1

粉丝