[ZLG-ARM] LPC2214 串口校验设置无效??

[复制链接]
4147|4
 楼主| liushul 发表于 2008-8-21 16:08 | 显示全部楼层 |阅读模式
UOLCR和U1LCR对串口奇偶校验设置出现的奇怪现象:<br />1.设置为无校验,只能收到并返回上位机串口设置的无校验的串口数据;<br />2.设置为奇校验,能收到并返回上位机串口设置的无校验奇校验和偶校验所有类型的串口数据;<br />3.设置为偶校验,能收到并返回上位机串口设置的无校验奇校验和偶校验所有类型的串口数据。<br /><br />uint8&nbsp;&nbsp;UART0_Ini(uint32&nbsp;baud,&nbsp;UARTMODE&nbsp;set)<br />{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint32&nbsp;&nbsp;bak;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;参数过滤&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;(0==baud)||(baud&gt115200)&nbsp;)&nbsp;return(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;(set.datab&lt5)||(set.datab&gt8)&nbsp;)&nbsp;return(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;(0==set.stopb)||(set.stopb&gt2)&nbsp;)&nbsp;return(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;set.parity&gt2&nbsp;)&nbsp;return(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;设置串口波特率&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;U0LCR&nbsp;=&nbsp;0x80;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;DLAB位置1<br />&nbsp;&nbsp;&nbsp;&nbsp;bak&nbsp;=&nbsp;(Fpclk&gt&gt4)/baud;<br />&nbsp;&nbsp;&nbsp;&nbsp;U0DLM&nbsp;=&nbsp;bak&gt&gt8;<br />&nbsp;&nbsp;&nbsp;&nbsp;U0DLL&nbsp;=&nbsp;bak&0xff;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;设置串口模式&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;bak&nbsp;=&nbsp;set.datab-5;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设置字长度<br />&nbsp;&nbsp;&nbsp;&nbsp;if(2==set.stopb)&nbsp;bak&nbsp;|=&nbsp;0x04;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;判断是否为2位停止位&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(0!=set.parity)&nbsp;{set.parity&nbsp;=&nbsp;set.parity-1;&nbsp;bak&nbsp;|=&nbsp;0x08;}<br />&nbsp;&nbsp;&nbsp;&nbsp;bak&nbsp;|=&nbsp;(set.parity&lt&lt4);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设置奇偶校验<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;U0LCR&nbsp;=&nbsp;bak;<br />&nbsp;&nbsp;&nbsp;&nbsp;return(1);<br />}<br />还有其他地方需要设置吗?
hym2006911 发表于 2008-8-24 23:18 | 显示全部楼层

是的

我也发现同样的问题。在做ARM的9位多机通信,但发现ARM没有51的串口模式2或3,还不知道怎么实现9位通信。强制第九位为0或为1,怎么接收到?探讨一下。<br />Email:hym2006911@yahoo.com.cn
zLgArM 发表于 2008-8-25 14:59 | 显示全部楼层

回复楼上两位

二位好!<br />&nbsp;&nbsp;&nbsp;&nbsp;楼主提的问题,我们正在测试。<br />&nbsp;&nbsp;&nbsp;&nbsp;二楼提的问题,我们早已解决,是可以实现9位通信的。<br />&nbsp;&nbsp;&nbsp;&nbsp;不知2位是否我们的客户,如果是,可以来信探讨。lpc2300@zlgmcu.com。
zLgArM 发表于 2008-8-27 16:59 | 显示全部楼层

re

已有初步结论,但还需要确认。<br />请楼主将您的上位机软件打包发给我。lpc2300@zlgmcu.com,并告诉我您的客户信息。
zLgArM 发表于 2008-9-3 18:07 | 显示全部楼层

和楼主取得了联系,re——》

首先要强调一点,奇偶校验和收不收得到数据是没有关系的。例如,当上位机的帧格式设置为奇校验,发送1个字节0x55到设置为不奇偶校验的下位机,下位机仍然可以接收到这个字节0x55——但是,由于上位机还多发送了1个奇偶校验位,下位机收到了这个多出的奇偶校验位;于是,在没有设置奇偶校验的下位机看来,这个奇偶校验位也是有效数据的一部分,这样就导致接收出错了。如果把下位机也设置为奇校验,下位机就会自动识别出这个奇偶校验位的功能,并据此进行奇偶校验,并且在线状态寄存器U0LSR中的奇偶错误位PE里反映出奇偶校验后的结果;而不会误以为它也是有效数据的一部分。因此,是否使用奇偶校验,影响的只是接收数据的正确性而已。<br /><br />原则上,上位机和下位机之间进行通讯,奇偶校验的设置都应该相同。像您所提出的那种奇校验到偶校验或者其它组合,可能是没有意义的,不建议这样配置。<br /><br />最后,说一下我们的测试结果:<br />利用EasyARM2200开发平台的生产光盘中3.21实验进行验证,得出的结果是:<br />当上位机向下位机发送数据时:<br />&nbsp;&nbsp;&nbsp;1、上位机设置为无校验,下位机设置为无校验、奇校验和偶校验时,下位机都能正确收到数据;<br />&nbsp;&nbsp;&nbsp;2、上位机设置为奇校验,下位机设置为奇校验和偶校验。下位机都能正确收到数据,设置为无校验则收到错误数据(很正常,因为上位机发来的奇偶校验位被当成数据位了);<br />&nbsp;&nbsp;&nbsp;3、上位机设置为无校验,下位机设置为奇校验和偶校验,下位机都能正确收到数据,设置为无校验收到错误数据。<br />&nbsp;&nbsp;&nbsp;<br />当下位机向上位机发送数据时:<br />&nbsp;&nbsp;&nbsp;1、下位机设置为无校验,上位机设置为无校验、奇校验和偶校验都能正确收到数据;<br />&nbsp;&nbsp;&nbsp;2、下位机设置为奇校验,上位机设置为奇校验和偶校验时都能正确收到数据,上位机设置为无校验时会收到错误数据;<br />&nbsp;&nbsp;&nbsp;3、下位机设置为偶校验,上位机设置为奇校验和偶校验都能正确收到数据,设置为无校验收到错误数据。<br />&nbsp;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

3

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部
0