完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
亲爱的朋友们,我们使用UART和DMA在DMA中断的基础上开发了RS485的Modbus驱动程序。驱动程序工作了好几个小时,但经过一段时间后,它开始删除RX中断。当接收到DMA中断时,我们解析固定的8字节帧,从而建立传输帧。经过一段时间后,即使它接收到RX中断,它也停止发送,TX完成标志没有设置。同一设备用于接收来自系统中的多个模块的数据,使用具有DMA支持的SPI总线,这种通信也间歇地停止,并且不重新记录。当用户重置设备时,一切都完美地启动,没有超时或错误,随着时间的推移,问题再次出现。系统连续工作24-30小时,开始出现故障后,非常感谢您的帮助!好的,Ashish。
|
|
相关推荐
9个回答
|
|
你使用的是哪一部分?有没有可能8字节的帧最终会产生一些“不对准”,其中一些数据直到下一帧到来才被处理?超时和重置UART/DMA在一个特定的时间帧内没有收到帧是否有意义?
|
|
|
|
假设每个发送的字节都将被接收,这是不正确的。
|
|
|
|
我对PIC32的DMA外围设备一无所知,但我看不出如何使用DMA来接收UART是值得的。
|
|
|
|
这是一个奇怪的问题,你只是问我们中是否有人知道这个模块中一些奇怪的、罕见的bug。你不张贴任何代码或任何东西,所以我不认为我们可以做很多事情来帮助。如果你能给我们提供一些看或测试的东西,也许我们可以帮忙。
|
|
|
|
优点是缓冲器充满了准备处理的数据。把它们从RX缓冲器中取出一个。缺点是一个额外的或丢失的字节,它们都会脱落。
|
|
|
|
在大多数应用程序中,我认为这是不可接受的行为。在没有RX接收中断的情况下,如何防止它?
|
|
|
|
在大多数应用程序中,我认为这是不可接受的行为。在没有RX接收中断的情况下,如何防止它?我同意这两个,但你仍然可以利用UART RX中断可能。UART RX ISR可以做的只是计数字节。同时,DMA将把RX数据放在缓冲器中进行后期处理。使用UART RX ISR将有助于“监督”正在接收的内容-即计算发生了多少传输。UART RX ISR还可以超时并中止包含丢失数据的传输。总之,在处理异步RX时,您绝对需要使用UART RX ISR来处理一些事情。如上所述,错过一个RX打破了整个事情。这里的故事的寓意是,我不相信你完全摆脱使用根据DMA处理接收的UART RX ISR。同样,我会确保你的系统在去DMA之前使用“常规”方式(如果需要中断或投票)。类似地,在这里,有时不值得每次在大平板上进行大满贯。一开始就可以得到基本的回报。
|
|
|
|
因此,您必须设置RX中断,创建ISR和计数器,并在接收数据包之后处理重置计数器。您已经复制了DMA控制器所做的一切,除了将接收到的字节传输到缓冲区之外——一行代码,也许只是一条指令。我还没有明白这一点。
|
|
|
|
因此,您必须设置RX中断,创建ISR和计数器,并在接收数据包之后处理重置计数器。您已经复制了DMA控制器所做的一切,除了将接收到的字节传输到缓冲区之外——一行代码,也许只是一条指令。我仍然没有看到重点。关键是,如果您想确保在通过DMA接收时不会遗漏一个字节,那么您仍然必须使用UART RX ISR来确保这一点,因为这个事件是生成的。你还可以如何确保RX可靠地完成?我同意不使用DMA的RX…我提供了一个防止数据丢失的解决方案。
|
|
|
|
只有小组成员才能发言,加入小组>>
5166 浏览 9 评论
2000 浏览 8 评论
1928 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3174 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2226 浏览 5 评论
734浏览 1评论
615浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
506浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
631浏览 0评论
528浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 23:16 , Processed in 1.251067 second(s), Total 94, Slave 77 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号