5735|17

70

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

4.2内核,串口丢数,求高手帮忙 [复制链接]

应用程序ClearCommError函数提示CE_OVERRUN错误
驱动里SL_GetInterruptType函数中的
if( IntSubPndVal & (pHWHead->bErrINT))  为真,说明发生了错误
SL_LineIntr函数中调用的ReadLSR函数内部LineStatus = INREG(pHWHead,rUERSTAT);
if ( LineStatus & COM2440_LSR_OE )为真,说明发生了OverRun错误

波特率设置函数SetBaudRate里如下设置的波特率
OUTREG(pHWHead,rUBRDIV,( (int)(S2440PCLK/16.0/BaudRate) -1 ));,S2440PCLK为50兆,晶振是16.934兆的

波特率设置成57600或115200当每秒发送数据量超过3000多字节时都会发生发生这样的错误,Uart1,Uart2都如此
频繁划触摸屏时错误发生几率很大,以为是中断优先级的问题,调整中断优先级寄存器PRORITY,还是OverRun
串口监视线程的级别为#define DEFAULT_CE_THREAD_PRIORITY 103,改为97还是OverRun

高手帮忙分析一下问题好吗?能给些提示也行,这个问题困扰我很久了,解决问题我加送分给各位!

在线等待回复!

最新回复

感谢各位的热心帮忙,手头项目有些紧,忙不过来了 理解后面各位高手的意思了,先给大家散分,修改结果稍后测试一下发上来  详情 回复 发表于 2008-11-7 09:25
点赞 关注

回复
举报

78

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
自己顶一下,急啊!!!!!!
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
肯定是没有问题的,你的AP估计有问题!我们做过串口方面的大型应用都没什么问题!
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

4
 
兄弟,根据我这情况能帮忙分析一下是哪里出了问题吗?AP是什么?我用的是arm的开发板,三星的s3c2440
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

5
 
溢出?
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

6
 
感觉需要确认:
1、数据丢失状态下,串口有没有死机,鼠标等能否移动;

2、数据丢失情况下,是发送数据丢失,还是接受的数据丢失;

如果跟滑动触摸屏还有关系的话,则系统的运行效率等中断方面均有牵连。
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

7
 
在SL_OPEN里面找找UFCON这个寄存设置,把串口缓存设高点捏?
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

8
 
回5楼的兄弟,没有死机现象,发送数据也不丢失,只有接收的时候,每秒的数据量大了以后就开始丢了
触摸屏那我已经把Uart2的中断级别设得比触摸屏的定时器要高了,现在Uart2是最高级的中断了,还丢数,串口监视线程级别我设到97了,居然还会Overrun。

回6楼,2440的串口缓冲就是64字节吧,还能设置?那个UFCON寄存器只是设定什么情况触发中断的吧
OUTREG(pHWHead,rUFCON,0x41);我是这么设的,接收中断触发我设的是1Byte,我理解是每收到1Byte都会触发串口中断。

感谢大家帮忙了,问题还是没解决,明天继续等。
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

9
 
串口驱动都是MS整好的东西,要是能够被你发现问题,MS要给你授VIP证了!这么多公司用串口做出了不知道多少的GPS软件
都没有出现什么问题,就你出现问题,觉得MS不给你称号会很对不起你的!
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

10
 
FIFO的触发字节是多少?别设太大,
如果接收线程处理不够快,就有可能丢数。

建议再看看自己驱动的部分。
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

11
 
看起来是有点像串口驱动的FIFO的threshold设置的问题。
楼主如果对串口驱动不是很了解,建议找一下比较官方的BSP看看对应代码,毕竟2440用人还挺多
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

12
 
xqhrs232 你要是懂就帮忙分析一下问题,别整用不着的。BSP包是开发板买来时厂家给的,是不是MS写的我可不知道,内核跑GPS也是没问题的,只是每秒传输数据量大了才丢数,目前3000字节是个分界点。

回9楼10楼的兄弟,我就是设的OUTREG(pHWHead,rUFCON,0x41);,应该就是每收到1字节触发一次吧

每秒传输的字节低于3000时是不丢数的,只有数据量大了才丢数,我现在就是没法确定问题是在寄存器的设置上还是在线程处理上,如果其他驱动的线程跑得很频繁是不是也会影响串口数据的处理啊?现在触摸屏划的频繁时就会有这样的问题,难道是触摸屏线程里那个定时器触发的太频繁了?还是串口监视线程级别太低了?我觉得97已经不低了吧
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

13
 
分析不来啊!你可以写个简单的串口AP测试一下,看看是不是你的串口驱动有问题什么的!一般是不会出现这种情况的!
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

14
 
mark,这个问题我也遇到过。线程中读取偶尔会有丢失!
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

15
 
FIFO触发中断字节数不能太小,否则导致中断太频繁,
设置太大后,如果接收处理的线程效率低,也会丢数。

建议设成4个字节或8个字节试试看,一个中间值。

如果怀疑是接收线程处理的问题,可以先注释掉相关处理代码,
只统计接收到的字节数看看。

另外,系统如果在处理其他事情,应该是会影响串口的接收的。
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

16
 
引用 7 楼 yangyong9608 的回复:
回5楼的兄弟,没有死机现象,发送数据也不丢失,只有接收的时候,每秒的数据量大了以后就开始丢了
触摸屏那我已经把Uart2的中断级别设得比触摸屏的定时器要高了,现在Uart2是最高级的中断了,还丢数,串口监视线程级别我设到97了,居然还会Overrun。

回6楼,2440的串口缓冲就是64字节吧,还能设置?那个UFCON寄存器只是设定什么情况触发中断的吧
OUTREG(pHWHead,rUFCON,0x41);我是这么设的,接收中断触发我设的是1Byte,…


你的问题我也遇到过,单次发送小数据没有任何问题,但是如果一次性发送较大的数据就有中间间断漏数据的问题。
//OUTREG(pHWHead,rUFCON,0x41);   //FIFO enable : tx-4bytes, rx-4bytes
OUTREG(pHWHead,rUFCON,0xf1);   //FIFO enable : tx-48bytes, rx-32bytes
我把接收数据缓冲从新设置后,问题解决..
不知道能不能解决你的问题..
ps:不过我没有遇到你触摸导致数据漏的问题。
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

17
 
引用 14 楼 sunrain_hjb 的回复:
FIFO触发中断字节数不能太小,否则导致中断太频繁,
设置太大后,如果接收处理的线程效率低,也会丢数。

建议设成4个字节或8个字节试试看,一个中间值。

如果怀疑是接收线程处理的问题,可以先注释掉相关处理代码,
只统计接收到的字节数看看。

另外,系统如果在处理其他事情,应该是会影响串口的接收的。


对,一步步来,可以把所有的驱动都屏蔽掉,看看会不会丢失;然后中断值不要太小也不要过大。1,我觉得太小了。。。
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

18
 
感谢各位的热心帮忙,手头项目有些紧,忙不过来了
理解后面各位高手的意思了,先给大家散分,修改结果稍后测试一下发上来
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表