bluefishhttp://blog.yesky.com/Blog/vincentzhou/复制地址
公告栏
专注wince底层开发,学习linux 为生活而奋斗!
控制面板
日历
<2008年8月>
SuMoTuWeThFrSa
272829303112
3456789
10111213141516
17181920212223
24252627282930
31123456
留言簿(13)
文章分类
文章档案
日记档案
向强人学习

老规矩,先说下问题:串口在接收pc端发来的数据时(100个bytes,每200ms发送一次),偶尔会丢一些数据。某一次的测试记录如下:

第一次丢数据 发送总量60多万字节 丢了27个

第二次丢数据 发送总量80多万字节 (在上一次发送的基础上又)丢了40个

第三次丢数据 发送总量190多万字节 (在上一次发送的基础上又)丢了37个

以上数据要说明的是所丢的数据是一个随机情况,因为如果我把环境清空(例如断电重启)而pc端的发送条件不变,那么丢数据的情况就不是上面显示的记录了。

分析,所谓的丢数据无非就是fifo溢出软件来不及读取或者是软件缓冲区的可读区大小为0。不过从上述情况来看应该不是后者的原因。因为,如果是后者,当pc发送条件不变而开发板环境清空重来的话,丢数据的情况应该一样。

针对以上情况,可通过以下几个方案来修改

方案一:如果pc(发送端)有自动流控,那么ce端也应该打开自动流控--在串口驱动中通过rUMCON寄存器设置;如果pc端没有,ce端也应该将自动流控关闭

方案二:提高接收线程的优先级,包括应用程序和驱动程序的

方案三:设置串口控制器的接收中断模式和FIFO的trigger level值。中断模式有两种,pulse模式的意思是当FIFO中的数据量刚到达所要求(trigger level)的时候会产生中断,该中断只在那一刻产生,如果那时cpu还在处理上一次的中断而把该中断mask掉,那么该中断就回被丢掉,而FIFO中的数据就会一直增加到溢出;level模式的意思是只要FIFO中的数据达到所要求的时候就会产生中断,包括比所要求的多的时候,只要cpu在FIFO中的数据在溢出之前处理完上一次的中断而来处理这次中断,这样FIFO就不会溢出,数据也就不会丢失。


作者:bluefish 阅读() 评论()  编辑 发表于:2008-03-12 11:23
相关内容
文章评论

  • # re: 串口丢数据问题解决方案
  • 兄弟,请教个问题:

    我测试串口时,一直点着触摸板,丢失的数据比例相当高..约1~5%
    看了中断的优先级 UART0确实高于ADC…
    可是点触摸板却让串口不断丢失..

    您可有解决之道?拜求
    天极博友 | 2008-07-08 08:04

    发表评论
    标题 *  
    姓名 *  
    内容 *  
       验证码: *       
           
    版权声明:天极是本Blog托管服务提供商。如本文牵涉版权问题,天极不承担相关责任,请版权拥有者直接与文章作者联系解决。
    Powered by:

    Copyright © bluefish