Landmark 发表于 2024-4-2 17:14:34

华大136可以实现用UART+DMA自动接收不定的数据吗?有源码?

想要的效果就是外设之间自动接收处理,当接收完最后一个字节时,CPU去接收就行了。

有没有大神实现过这种效果?有没参考源码?

Joshua_Astray 发表于 2024-4-2 17:36:05

DMA circle模式,写FIFO,空闲中断判断接收完成,然后每次读写操作FIFO指针?

1a2b3c 发表于 2024-4-2 18:02:44

最关键的是需要硬件uart具有空闲中断功能
有的话就很简单,没有的话就整复杂了。。。

Landmark 发表于 2024-4-2 18:25:32

1a2b3c 发表于 2024-4-2 18:02
最关键的是需要硬件uart具有空闲中断功能
有的话就很简单,没有的话就整复杂了。。。 ...
(引用自3楼)

就是没有空闲中断

Landmark 发表于 2024-4-2 18:26:00

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

FIFO也太复杂了

akey3000 发表于 2024-4-2 18:37:42

1a2b3c 发表于 2024-4-2 18:02
最关键的是需要硬件uart具有空闲中断功能
有的话就很简单,没有的话就整复杂了。。。 ...
(引用自3楼)

空闲中断也不是很靠谱,比如碰到两个字节间隔较长的情况。自己做个超时处理也不麻烦

Landmark 发表于 2024-4-2 18:55:44

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

关键是自己做超时管理,串口接收没法关联到定时器。不知道是我的代码写得有问题。

1a2b3c 发表于 2024-4-2 19:26:59

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

既然都知道乐空闲的定义,肯定就按照定义的来了,就不应该按你德实际数据帧有没有跑完
楼主如果都不能很好的处理简单的,换了其它的复杂方式实现肯定怕就更不易了哦

1a2b3c 发表于 2024-4-2 19:36:24

Landmark 发表于 2024-4-2 18:55
关键是自己做超时管理,串口接收没法关联到定时器。不知道是我的代码写得有问题。 ...
(引用自7楼)

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

不好的:需要额外增加系统资源(定时器);增加系统调度资源(定是中断);响应不及时,等等

Landmark 发表于 2024-4-3 09:04:23

1a2b3c 发表于 2024-4-2 19:36
恐怕对你或者你的方案不适合吧,
简单的来说,假如你的数据不是很频繁,比如一帧数据来了以后,下一针需 ...
(引用自9楼)

谢谢您的回复,我从您的回复当中获取到想法了,对我这个问题应该有帮助{:lol:}
页: [1]
查看完整版本: 华大136可以实现用UART+DMA自动接收不定的数据吗?有源码?