微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > UART的接收程序的疑问---下降沿的判断?

UART的接收程序的疑问---下降沿的判断?

时间:10-02 整理:3721RD 点击:
在UART接收程序中,总需要判断下降沿,以确定起始位在哪里。
然后现在有一个疑问,如何区分“起始位之前的那个下降沿”与“帧内部的bit数据的下降沿”?
可以分两种情况来说:
(1)如果是FPGA程序先运行,串行数据再进来。
       那么第一个下降沿肯定紧接着起始位,然后在一帧的长度之后,如果有下降沿,那么肯定也是下一帧的起始位。
       依次类推,循环往复。
(2)如果是串行数据先进来,然后FPGA程序再运行。
      那么,FPGA程序会不断的判断出下降沿,那么怎么知道起始位是在哪一个下降沿之后呢?
++++++++++++++++++++
      针对第二种情况,我想可以通过将输入数据分流为10个数据通道,然后看哪个通道的第一位数据始终是0,
第10位始终为1,重复次数超过N次,然后该通道的数据就是那个边沿对齐的通道,就可以作为正确数据缓冲接收了。
+++++++++++++++++++++++++++++++++
但是,我查看了网上各种版本的UART程序,好像都没有处理这种问题。
难道是在实际运用中,均不可能遇到第(2)种情况吗?谢谢各位。

用状态机就可以区分是检测到start的下降沿还是bit1->0
基本上状态是seek -> start -> d0 - 7 -> stop -> seek or start的类似流程


      谢谢南宫同学的回复
      如我帖子所说的,第(1)种情况,用状态机可以,因为起始位的下降沿肯定会“第一个”出现,然后会“周期性”的出现。
但是在第(2)种情况下,如果程序刚好开始工作的时候,接收进来的数据就刚好在BIT5之类的帧的中间位置,
然后又恰好碰到了下降沿,这时状态机的“判决条件”是什么? 因为我看不出来“起始位的下降沿”与“BIT数据的下降沿”的区别。

一般来说这样就需要配流控了,不知道你这里面有没有,通常uart都带rtx cts,如果把发送rts disable电平,对方应该不会再发送数据,处于idel状态,这时候你可以清空接收buffer再使能rts,就OK了


原来是这样,就是需要应答机制了。感谢感谢。



rts cts一般uart都会有这两跟线,做硬流控,你可以看看有没有,或者是不是有软流控


好的。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top