打印
[ZLG-ARM]

菜鸟LPC2131UART的问题!!!

[复制链接]
1485|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
win2000_li|  楼主 | 2007-2-26 19:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    /* 参数过滤 */
    if ((baud ==0 ) || (baud > 115200))    return (0);
    if ((set.datab <5) || (set.datab > 8))    return (0);
    if ((set.stopb == 0) || (set.stopb > 2))     return (0);
    if (set.parity > 4)    return (0);
    
    /* 设置串口波特率 */
    U0LCR = 0x80;                        // DLAB = 1    
    bak = (Fpclk >> 4) / baud;
    U0DLM = bak >> 8;
    U0DLL = bak & 0xFF;
    
    /* 设置串口模式 */
    bak = set.datab - 5;    // 设置字长
    if (set.stopb == 2)
           bak |= 0x04;    // 判断是否为2位停止位
    
    if (set.parity != 0)
    {
        set.parity = set.parity - 1;
        bak |= 0x08;
    }
    bak |= set.parity << 4;    // 设置奇偶校验

    U0LCR = bak;


1.bak = set.datab - 5;    // 设置字长
 什么是字长,是要发送数据的长度吗???还是什么???

相关帖子

沙发
computer00| | 2007-2-26 20:27 | 只看该作者

应该是指位数吧。比如5位,6位,7位,8位,9位等。

串口调试助手里面也有选择的,多少位。

使用特权

评论回复
板凳
win2000_li|  楼主 | 2007-2-26 20:42 | 只看该作者

那为什么还要减 5 啊,没有懂!!

刚刚看了别人的程序!!

他在设置这些(如:字长. 奇偶. 停止位)的时候:

是直接对:U0LCR 赋值的.

为什么这么复杂,有什么好的地方吗??????

弟子求教!

使用特权

评论回复
地板
computer00| | 2007-2-26 20:51 | 只看该作者

这样是让别人看起来方便,修改起来也方便。

这样用的好处是,要改参数很容易,不用看数据手册也知道怎么改了。

如果你的值一旦设置好,就不再改变它的话,也可以直接给U0LCR 赋值的. 



为什么要减5,这个就得看这个寄存器的结构了。也许它就是用0来表示5位的,1表是6位,如此而已。
你选择5位,那么实际上填入的就是值0了。

使用特权

评论回复
5
win2000_li|  楼主 | 2007-2-27 09:11 | 只看该作者

谢谢,computer00的回复。我记下了。

使用特权

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

本版积分规则

142

主题

718

帖子

1

粉丝