[国产单片机] 关于UART/IIC接收时序问题

[复制链接]
1226|12
 楼主| fcccc 发表于 2021-2-2 21:41 | 显示全部楼层 |阅读模式
问题背景:
系统有一个高优先级中断,服务函数执行时间100us-3ms随机,硬限制,已经无法调整.
需要一个串行接口与上位机双向通信;芯片没有DMA,没有带FIFO的UART或者IIC;

现在时不时通信被中断3ms,期间发过来的数据都会丢失.
这个时序如何设计能保证可以不丢失上位机发过来的数据?


叶春勇 发表于 2021-2-2 23:21 来自手机 | 显示全部楼层
貌似,再加个双串口单片机,做个中转?主单片机,空闲去查询串口单片机有数据没?

评论

相当于加个单片机做FIFO,这个代价有点高.  发表于 2021-2-5 20:03
ayb_ice 发表于 2021-2-3 08:22 | 显示全部楼层
在他的服务里加个自己的函数
mailshichao 发表于 2021-2-3 08:42 | 显示全部楼层
这个要靠软件协议来解决了,单片机加一个收到数据反馈机制,上位机加一个发送接收反馈
ayb_ice 发表于 2021-2-3 08:51 | 显示全部楼层
波特率搞低些
dlutccj 发表于 2021-2-3 09:35 | 显示全部楼层
加入握手机制,告诉上位机什么时间下位机可以接收指令
coody 发表于 2021-2-3 15:11 | 显示全部楼层
再另用一个单片机先收下数据,然后用间隔大于3ms来一个一个字节发给这个单片机。
xyz549040622 发表于 2021-2-3 18:01 | 显示全部楼层
什么也没有,肯定是很容易被打断的。只能是尝试降低速度了。
ayb_ice 发表于 2021-2-4 08:50 | 显示全部楼层
本帖最后由 ayb_ice 于 2021-2-4 08:58 编辑

波特率4800完全要求,1000/4800*10=2.08MS,

串口一般可以缓冲一个接收字节,只要保证在下一个字节接收完成前将上一字节取走就可以了

2.08MS*2 > 3ms
2400波特率肯定是完全符合要求的
 楼主| fcccc 发表于 2021-2-5 19:55 | 显示全部楼层
本帖最后由 fcccc 于 2021-2-5 20:13 编辑
dlutccj 发表于 2021-2-3 09:35
加入握手机制,告诉上位机什么时间下位机可以接收指令

对这个思路很好,问题的主要难点在于中断是外部事件驱动的,也就是说发生的时机和间隔时间无法确定.
如果中断完成时候告诉上位机发送,如果突然又发生一次中断就会出问题.
这样的话将会是一个偶尔出现的故障点.

 楼主| fcccc 发表于 2021-2-5 19:56 | 显示全部楼层
ayb_ice 发表于 2021-2-4 08:50
波特率4800完全要求,1000/4800*10=2.08MS,

串口一般可以缓冲一个接收字节,只要保证在下一个字节接收完成 ...

这也是个办法,谢谢指点.
 楼主| fcccc 发表于 2021-2-5 20:19 | 显示全部楼层
mailshichao 发表于 2021-2-3 08:42
这个要靠软件协议来解决了,单片机加一个收到数据反馈机制,上位机加一个发送接收反馈
...

感谢指点,目前来看确实是需要反馈机制,设计个协议来处理了.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

50

主题

458

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部