This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具与软件:
您好!
在 C2000ware 使用了 sci.h 等几年后、我在遇到一些意外行为时对寄存器进行了更深入的研究。
首先、我很惊讶地发现 SCI_readCharNonBlocking 滤波器会远离 SCIFFPE 和 SCIFFFE 位、我发现在接收数据后必须考虑这些位。
因此、我构建了自己的函数、该函数将获取整个 SCIRXBUF、现在我将出现意外行为、如下所示:
触发 SCI 中断检测标志后(例如、通过针对太多位提供低电平信号)、我运行 SCI_performSoftwareReset。 之后、 SCI_getRxStatus 返回0、这是我认为 SCI 现在再次正常运行时的预期结果。 然而、之后是以正确波特率接收的第一个字节(在本例中为12.5Mbaud)具有 SCIFFFE 位设置。 以下每个类似字节都可以完全正常运行。 它只是复位后的第一个中断检测、而复位是为了复位中断检测标志而启动的。 这种行为可以可靠地重现。
是否有此行为的解释以及简单的解决方法?
此致、
LEO
尊敬的 Leo:
如果读取 FIFO 中的顶部元素存在帧错误、SCIFFFFE 标志将变为高电平。 组帧错误基本上意味着 SCI 接收器错过了它预期的停止位。 我猜测在出现下一个有效数据时、软件复位仍会进行。 您是否已检查从 SCI RX BUF 读取的数据? 以下数据(没有帧错误)是否正确、或者它是否看起来发生了偏移? 在中断检测后、可能需要让发送器件将线路保持为高电平一段时间、以确保 F2837xD SCI 有时间进行复位。
我将在软件专家中循环注释 SCI_readCharNonBlocking()函数。 我认为在大多数情况下、会改为使用 SCIRXST.FE 位(只要接收到的任何数据都有组帧错误、就会变为高电平)、因为它具有与它相关的中断条件。
此致、
Delaney
尊敬的 Delaney:
非常感谢您的快速响应。 在 对错误进行故障排除时、我确保所有步骤之间有足够的时间。 在执行复位之前、Rx 行至少为高电平一秒、复位之后、在粗化第一个字节之前至少有一秒、后跟至少一秒的延迟和第二个字节。 相对于 SAR 位、两个字节都被正确接收、但是第一个字节 在 SCI RX BUF 寄存器中设置了 SCIFFFFE 位。
这就好像 FIFO 中的 SCIFFFFE 位没有得到正确复位或者 正在发生其他一些隐藏锁存。
当然、由此产生的问题无法区分错误后的正确字节或错误字节以及相应的复位过程。
如果您愿意、我可以提供 一些 MWe 、以便在您侧重现问题(如果您希望继续)。
此致、
LEO
尊敬的 Leo:
帧错误可能是从中断检测信号中遗留的、因为帧错误校验器会将低电平信号的开始检测为起始位并寻找一对停止位。
正如您所说的、该标志似乎由于某种原因被锁存。 如果您可以提供一些代码、我可以尝试重现错误。
此致、
Delaney