amobbs.com 阿莫电子技术论坛

标题: 华大136可以实现用UART+DMA自动接收不定的数据吗?有源码? [打印本页]

作者: Landmark    时间: 2024-4-2 17:14
标题: 华大136可以实现用UART+DMA自动接收不定的数据吗?有源码?
想要的效果就是外设之间自动接收处理,当接收完最后一个字节时,CPU去接收就行了。

有没有大神实现过这种效果?有没参考源码?
作者: Joshua_Astray    时间: 2024-4-2 17:36
DMA circle模式,写FIFO,空闲中断判断接收完成,然后每次读写操作FIFO指针?
作者: 1a2b3c    时间: 2024-4-2 18:02
最关键的是需要硬件uart具有空闲中断功能
有的话就很简单,没有的话就整复杂了。。。
作者: Landmark    时间: 2024-4-2 18:25
1a2b3c 发表于 2024-4-2 18:02
最关键的是需要硬件uart具有空闲中断功能
有的话就很简单,没有的话就整复杂了。。。 ...
(引用自3楼)

就是没有空闲中断
作者: Landmark    时间: 2024-4-2 18:26
Joshua_Astray 发表于 2024-4-2 17:36
DMA circle模式,写FIFO,空闲中断判断接收完成,然后每次读写操作FIFO指针?
(引用自2楼)

FIFO也太复杂了
作者: akey3000    时间: 2024-4-2 18:37
1a2b3c 发表于 2024-4-2 18:02
最关键的是需要硬件uart具有空闲中断功能
有的话就很简单,没有的话就整复杂了。。。 ...

(引用自3楼)

空闲中断也不是很靠谱,比如碰到两个字节间隔较长的情况。自己做个超时处理也不麻烦
作者: Landmark    时间: 2024-4-2 18:55
akey3000 发表于 2024-4-2 18:37
空闲中断也不是很靠谱,比如碰到两个字节间隔较长的情况。自己做个超时处理也不麻烦 ...
(引用自6楼)

关键是自己做超时管理,串口接收没法关联到定时器。不知道是我的代码写得有问题。
作者: 1a2b3c    时间: 2024-4-2 19:26
akey3000 发表于 2024-4-2 18:37
空闲中断也不是很靠谱,比如碰到两个字节间隔较长的情况。自己做个超时处理也不麻烦 ...
(引用自6楼)

既然都知道乐空闲的定义,肯定就按照定义的来了,就不应该按你德实际数据帧有没有跑完
楼主如果都不能很好的处理简单的,换了其它的复杂方式实现肯定怕就更不易了哦
作者: 1a2b3c    时间: 2024-4-2 19:36
Landmark 发表于 2024-4-2 18:55
关键是自己做超时管理,串口接收没法关联到定时器。不知道是我的代码写得有问题。 ...
(引用自7楼)

恐怕对你或者你的方案不适合吧,
简单的来说,假如你的数据不是很频繁,比如一帧数据来了以后,下一针需要100ms以后了,而且你的美帧对你字节之间的间隔远远没有100ms那么大的间隔,那什你可以把定时器设置为110ms,每次定时中断后看下串口接收fifo的计数器有没有增加,没有增长那么就说明已经很常间隔没有收到数据了,就是所谓的空闲状态了
反之就不是

不好的:需要额外增加系统资源(定时器);增加系统调度资源(定是中断);响应不及时,等等
作者: Landmark    时间: 2024-4-3 09:04
1a2b3c 发表于 2024-4-2 19:36
恐怕对你或者你的方案不适合吧,
简单的来说,假如你的数据不是很频繁,比如一帧数据来了以后,下一针需 ...
(引用自9楼)

谢谢您的回复,我从您的回复当中获取到想法了,对我这个问题应该有帮助




欢迎光临 amobbs.com 阿莫电子技术论坛 (https://www.amobbs.com/) Powered by Discuz! X3.4