请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMDXRM57LHDK 大家好、
我无法理解设备的崩溃。 我将尝试详细解释它。
我的计划的作用:
- 它每隔67ms 在异步模式下通过串行读取传感器数据。
- 当整个串行封装到达时、它会在主循环中处理它并检查数据本身是否有错误
- 它通过 TCP 将原始数据和错误状态发送到 PC (我正在使用 LwIP 1.4.1)。 电路板是服务器、PC 是客户端。
- 客户端只是一个 GUI、用于可视化传感器数据和状态错误。
注:串行接口以异步模式接收数据。 这意味着、当主循环正在处理并通过 TCP 发送最后接收到的数据时、它也会通过串行方式接收新数据。
问题:
- 当只有串行接口处于活动状态(不通过 TCP 发送数据)时、所有内容都能完美运行。 数据处理的状态错误为 NO_ERROR。
- 如果 EMAC 和串行接口都处于活动状态、GUI 上的图像将开始"跳转"。 错误状态始终存在。 跳转每2秒或更短时间发生一次。 有时几分钟内没有人,但他们总是回来。
想法:
- 起初、我以为 TCP 设置出了问题、这些设置在某种程度上破坏了某些 TCP 帧、甚至丢失了这些帧、但后来我注意到错误状态、并意识到接收到的数据"是错误的/损坏的"。
- 然后、我认为 EMAC TX 中断正在中断我的串行例程、并且在程序返回到串行例程时、数据缓冲区具有"较新/损坏"的数据。 但是根据 这个线程、即使出现一个更高优先级的 IRQ、它也不能中断当前的 IRQ。 因此、情况并非如此。
- 我现在的理论是、串行中断在 EMAC 例程被处理时被触发、因此它必须等待。 在等待时、新数据将到达、缓冲区将被覆盖或新数据丢失。 这对你们来说有道理吗?
从参考手册中、我知道有两个接收缓冲器: SCIRXSHF 和 SCIRD。 第一个帧会获取所有的传入数据、当一个帧完全接收到后、数据会传输到第二个帧。这里的帧是什么? 当该传输发生时、RXRDY 标志置位、并产生接收中断。
如果在程序处于 TCP 中断中时生成串行中断、 SCIRXSHF 上的新数据会发生什么情况? 我想 、SCIRXSHF 会不断获取数据以避免丢失某些数据、对吧? 即使最后一个中断尚未被处理、这个新数据是否会被复制到 SCIRD (因为已接收到一个完整的帧)?
如果我设置多缓冲模式(mbuf_mode ->设置全局控制寄存器的位10)、我想了解 TI 的行为是如何的。 但我没有把它设置好。 我在 Code Composer Studio 的寄存器窗口中看不到它。 我在 SCI_init 函数中使用此函数:
//尝试1 sciREG3->GCR1 |= 0x400U; //尝试2 sciREG3->GCR1 |=(uint32)((uint32) 1U <<10U)
我被困在这里了。 我可以使用一些帮助。
谢谢、此致、
Julio