基于FPGA具有容错能理的异步串口程序设计
首先,问题源于一个项目。本来是一个很简单的多个串口收发FIFO存取数据的小程序,通过电脑验证也可用,而下位机板子之间通信就出现了丢数问题。
经过分析原因如下:
我的串口收模块是基于特权同学的开发板程序修改而来的,也就是信号线一旦拉低,就认为数据开始传输,便闷头数数,那么数满10个bit(1起始位+8位数据+1停止位),就算接完一个字节,回头接着检测信号线是否被拉低。当发数端发出了错码的情况下,这套程序是不能检测出来的。要想能识别错码,就必须起始位与停止位都检测,才能确定该字节是否完整。
经过一个周末的编写,新模块出炉了。模块入口有rs232_rx信号,出口有rx_data[7:0]以及一个FLAG信号线,FLAG是一个字节接满结束的标志。
新模块主要思想就是在原有模块的基础上,加入判断帧尾的步骤。办法是:
1、准备做处10路冗余,每一路都检测rs232_rx的下降沿。(实际应该用不到那么多)10路冗余是有优先级的,当第一次检测到下降沿之后,第一路启动计数,开始10位bit的数据采集。当第一路计数启动之后,再遇到下降沿便启动第二路计数,以此类推。也就是说,在接收模块第一次启动计数之后,每遇到一次下降沿,就启动一路计数。
2、当第一路数到第10个bit,也就是停止位的时候,如果采集到了1,那么也就证明采集的是停止位,则将之后的所有冗余计数一并停下。如果第一路的停止位没有采集到1,则证明传输出错,第一路没有接到完整的一帧数据,则不输出数据,等待第二路的停止位采集结果。以此类推,知道某一路数据的停止位为1,则将剩下的冗余路置位,输出数据。
3、这10路冗余只是为一帧数据服务,也就是1个字节,确保单个字节能够采集正确。
经过以上修改,程序可以正确的采集数据了。但是以上修改还不算完美,原因是,接收bit的采集是在波特率的中心位置采集,假如某帧率 1bit 的时长为 100ms ,那么我在第50ms的时候采集一次数据,记录。这么做不能保证数据是正确的,有可能在采集之前出的错,或者刚刚采集完之后又出的错。如果是这种情况,并且在本该出现在停止位的位置有了一个高的数据,那么就误认为该帧数据没错。
所以最稳妥的做法是每个bit的数据采集三次,大概在 1/6 3/6 5/6 ,这三个位置采集,如果都相同,才判断本bit采集正确。这样会极大的提高数据采集的准确率。
经过更改后模块还有一个优点,就是每次接收一个完整的字节之后,就会有一个高信号产生(FLAG),对于实时性要求较强的任务,有所帮助。每接到一个数据都可以马上进行判断和操作,不必开辟一个较大的缓冲类寄存器。
基于FPGA具有容错能理的异步串口程序设计的更多相关文章
- 基于FPGA的红外遥控解码与PC串口通信
基于FPGA的红外遥控解码与PC串口通信 zouxy09@qq.com http://blog.csdn.net/zouxy09 这是我的<电子设计EDA>的课程设计作业(呵呵,这个月都拿 ...
- 基于FPGA的数字识别的实现
欢迎大家关注我的微信公众号:FPGA开源工作室 基于FPGA的数字识别的实现二 作者:lee神 1 背景知识 1.1基于FPGA的数字识别的方法 通常,针对印刷体数字识别使用的算法有:基于模版 ...
- 基于FPGA的线阵CCD实时图像采集系统
基于FPGA的线阵CCD实时图像采集系统 2015年微型机与应用第13期 作者:章金敏,张 菁,陈梦苇2016/2/8 20:52:00 关键词: 实时采集 电荷耦合器件 现场可编程逻辑器件 信号处理 ...
- 基于FPGA的XPT2046触摸控制器设计
基于FPGA的XPT2046触摸控制器设计 小梅哥编写,未经许可,文章内容和所涉及代码不得用于其他商业销售的板卡 本实例所涉及代码均可通过向 xiaomeige_fpga@foxmail.com 发 ...
- 基于FPGA的HDMI显示设计(三)
上一篇:基于FPGA的VGA显示设计(二) 10月10日 ~ 20日期间实习,令我万万没想到的是实习题目是 “便携式高清电视显示屏测试系统原型设计” 也就是 “基于FPGA的视频显示”. 实习要求用 ...
- 基于FPGA的VGA显示设计(二)
上一篇:基于FPGA的VGA显示设计(一) 参照 CrazyBingo 的 基于FPGA的VGA可移植模块终极设计代码 的工程代码风格,模块化处理了上一篇的代码,并增加了一点其它图形. 顶层 ...
- 基于FPGA的简易数字时钟
基于FPGA的可显示数字时钟,设计思路为自底向上,包含三个子模块:时钟模块,进制转换模块.led显示模块.所用到的FPGA晶振频率为50Mhz,首先利用它得到1hz的时钟然后然后得到时钟模块.把时钟模 ...
- 基于FPGA的以太网开发
基于FPGA的以太网开发,在调试过的FPGA玩家开来,其实算不上很难的技术!但是如果只是菜鸟级别的选手,没有调试过的话,就有些头疼了!早在自己在实习的时候,就接触到XAUI(万兆以太网口)接口,但是由 ...
- 基于FPGA的RGB图像转灰度图像算法实现
一.前言 最近学习牟新刚编著<基于FPGA的数字图像处理原理及应用>的第六章直方图操作,由于需要将捕获的图像转换为灰度图像,因此在之前代码的基础上加入了RGB图像转灰度图像的算法实现. 2 ...
随机推荐
- FOJ 2213 简单几何
题意:给你两个圆的圆心坐标和半径,判断两个圆公切线数目. 思路:考虑两个圆间公切线的情况,两个圆的位置关系分为相离,相交,外切,内切,内含,重合,公切线数分别为4,2,3,1,0,-1. #inclu ...
- javascript 数组 去重
javascript数组去重有如下 方法: 一) 利用 数组中的 indexOf判断 例如: Array.prototype.unique=function(){ var n=[]; for(var ...
- ASP.WEB Form 几点知识
1.GridView 行的多选 <asp:TemplateField ControlStyle-Width="30" HeaderText="选择" &g ...
- Oracle_Exception_01_The Network Adapter could not establish the connection
1.IP错误或端口错误. 在设置URL时错误,例如 url="jdbc:oracle:thin:@192.168.1.11:1521:mas" 数据库服务器不正确:ping 服务器 ...
- java 任务调度实现的总结
Timer Timer的核心是Timer和TimerTask,Timer负责设定TimerTask的起始与间隔执行时间,使用者需要建立一个timeTask的继承类,实现run方法,然后将其交给Time ...
- codeforces 553A A. Kyoya and Colored Balls(组合数学+dp)
题目链接: A. Kyoya and Colored Balls time limit per test 2 seconds memory limit per test 256 megabytes i ...
- android之VideoView和视频播放View的扩展
1.概念及扩展 VideoView 是android 系统提供的一个媒体播放显示和控制的控件.其结构层次如下: 原型:VideoView extends SurfaceView implements ...
- [原]NYOJ-小光棍数-458
大学生程序代写 /http://acm.nyist.net/JudgeOnline/problem.php?pid=458 *题目458题目信息运行结果本题排行讨论区小光棍数 时间限制:1000 ms ...
- 启用Linux云平台oracle数据库实口令复杂性函数:PASSWORD_VERIFY_FUNCTION=NULL
第一步:采用putty.exe登录数据库服务器. 输入IP后点击“Open”按钮: 第二步:登录对应的数据库实例. 执行:# su – oracle 查找:$ps -ef | grep pmon 找到 ...
- bzoj 4066 简单题——KDtree(带重构)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4066 带部分重构的KDtree.就是那个替罪羊树思想的. 写了对拍,调了半天,发现忘了 re ...