Cypress技术论坛
直播中

卓侨汉

7年用户 1034经验值
擅长:MEMS/传感技术
私信 关注
[问答]

用中断接收异步数据的方法有哪些?

我一直在使用状态机在PIC处理器上接收异步串行数据。这些依赖于字节之间的超时时间来知道数据包何时停止传输。
随着PSoC,我有困难的定时器来实现这一战略,并已被建议做更少的中断。
你用中断接收异步数据的方法是什么?
比如说:
更改分组结构以具有独占的开始和停止分隔符(当数据需要作为ASCII HEX发送时添加开销)。
从一个EMPPY缓冲区开始,简单地把每个传入的字节插入缓冲区ABD增量BUF PTR中。
在主代码中,检查缓冲区,如果第一个字符不是开始定界符,则将开始PTR重置为开始。
如果找到起始定界符,则检查结束定界符的数据。
如果找到结束定界符,则解析数据。(可能使用循环缓冲区来处理传入的字节,同时处理接收到的数据包(只要是在缓冲区重写之前进行处理)。我希望缓冲区长度大于2个包长度。
如果这是一种处理数据的典型方法,那么在溢出后,如何处理数据超集和新的有效数据。您只需将UART打包到循环缓冲区中,并在主代码解析中从缓冲区尾部直到头部寻找起始字节?
最后,你是否设置了一个标志来指示开始定界符,或者你只重复搜索开始,然后每次结束主代码?
如果任何人都有这样的例子,我们将非常感激。

回帖(18)

杨军

2019-8-13 07:46:55
注意端口级别API只在“连续”检查时生成。
问候,Dana。
举报

李玉林

2019-8-13 07:59:35
你好,鲍伯。首先,我认为你和Dana和其他人在这里做了很好的服务。大量有用和准确的数据。我主要是硬件工程师。我设计工业控制系统。从历史上讲,这意味着打开和关闭东西,测量和显示这些测量的操作员或作为一个控制的寄存器值。那些日子很快就消逝了。今天,他们想要一个“智能”传感器。收集和测量数据的东西,如测量、视频等等。然而,他们希望传感器保持在该数据上,只发送由控制器请求的数据,使其更加困难,这是所有的无线和电池,他们预计将持续2年。然后,它都必须装在直径为4英寸的防爆箱中。然后,客户希望能够在他在夏威夷度假时实时读取该数据,如果需要的话,可以打开和关闭设备,或者调整值。我的观点是,嵌入式系统比现在拥有更多的数据。解析数据是必要的。我通常用自己安装的基本驱动程序来构建一个产品。我把这些发送给我的客户,他们回答说,他们不能理解UART API,也不能让它以可接受的方式工作。我必须同意他们的意见。所以我不得不安装另一个处理器,他们有一个他们能理解的API。这增加了所有功耗的成本、大小和最差。我不是最好的程序员。我能做到这一点,对某些事情我很好。然而,在这种情况下,我不是,我似乎也不能很好地解释它对我的客户。我的客户要求API的注释很好,并且不需要解释或数周来研究代码来确定它所做的事情。所以对UART书籍或样板项目的任何帮助或指导都将非常感激。
举报

王琳

2019-8-13 08:05:13
我的UART时代可以追溯到70年底,所以我恐怕没有任何幸存下来的书我可以推荐。
看看你的问题,我会说,当你使用I2C、UART、SPI或USB进行通信时,它不会有任何区别,所以在OSI模型中,你的问题与协议级别(或以上)有关。
因此,当你发现自己是一个良好的工作协议,甚至自己建造一个,你会很好。
幻想是值得的。
一种解决方案:定义消息。每个消息的第一部分是一个“消息号”(告诉感觉和意义)一个消息长度(要跟随的字节数)。消息后面跟着一个引线(CRC)和“终结者”。
此格式可用于在面向字节的通信路径上传递**消息。不是绝对有效的,但它会起作用。扩展原始的解决方案可以通过扩展支持的消息的数量来完成(好的想法已经开始了UIT1616T)。文档缩小到描述消息格式和使用的通信接口。该API可以简化为发送和接收消息以及接收的信息的处理。
一个(不小)的工作必须被放置在部分中以管理信息流的方向:主从连接总是更容易处理全双工,所以如果可以更容易(更便宜)的解决方案,那么检查项目是明智的。
希望能让你从一些不太有用的书中解脱出来,阅读一些关于OSI模型的书。
鲍勃
举报

王淑珍

2019-8-13 08:16:13
这个怎么样?
1消息启动字节
2总包长度
3和4转移ID
5消息类型
6~N-2负荷
最后2字节CRC
您可以添加
1。包的源地址和目的地址
2。消息的ACK或NACK
三。X-O-XOFF或某种形式的流量控制
4。定义自己的字节间和响应超时
5。定义重传方案和同步恢复方案
举报

更多回帖

发帖
×
20
完善资料,
赚取积分