基于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 ...
随机推荐
- MySQL5.7.9(GA)的安装
1.解压ZIP文件到安装目录: 2.进入到bin目录,试运行mysqld --console,查看可能的出错信息,安装相应的辅助软件,如.net V4.0等: 3.编辑my.ini文件,关键内容如下: ...
- HashOperations
存储格式:Key=>(Map<HK,HV>) 1.put(H key, HK hashKey, HV value) putAll(H key, java.util.Map<? ...
- Jmete基础使用
1,jmeter下载与安装 Jmeter的运行需要JDK支持,所以需要先安装好jdk,并配置好环境变量: 下载地址:http://jmeter.apache.org/download_jmeter.c ...
- windows中android SDK manager安装更新sdk很慢,或者出现Done loading packages后不动甚至没有任何可用包
出现问题: 1.windows中android SDK manager安装更新sdk很慢,或者出现Done loading packages后不动甚至没有任何可用包 2.Failed to fetch ...
- 【集成学习】lightgbm参数介绍(sklearn)
# XGBoost和LightGBM部分参数对比表: lightgbm.sklearn参数介绍(官网)
- NOI2018网络同步赛游记
Day1 t1是一道NOI选手眼中的送分题,对于我来说还是有难度的,用了个把小时想了出来可持久化并查集的做法,最后一个点被卡常.赛后才发现Kruskal重构树是这样的简单.t2.t3由于我真的是太弱了 ...
- ACM学习历程—HDU5592 ZYB's Premutation(逆序数 && 树状数组 && 二分)(BestCoder Round #65 1003)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5592 题目大意就是给了每个[1, i]区间逆序对的个数,要求复原原序列. 比赛的时候2B了一发. 首先 ...
- docker-ce安装与搭建私有仓库
https://www.cnblogs.com/sszhou/p/7389144.html 系统环境centos7 ###docker-ce安装###1.卸载老版本,较老版本的Docker被称为doc ...
- Git 系列之tag的用法---为你的代码标记版本号
版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 本地仓库操作 远程仓库操作 其他 tag 操作 在做app开发的时候经常有版本的概念,比如v1.0.v1.1之类的,不同 ...
- [转]Unity3D学习笔记(四)天空、光晕和迷雾
原文地址:http://bbs.9ria.com/thread-186942-1-1.html 作者:江湖风云 六年前第一次接触<魔兽世界>的时候,被其绚丽的画面所折服,一个叫做贫瘠之地的 ...