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.

[参考译文] TMS570LC4357:环回启用时 SCI 接收器不工作

Guru**** 2448780 points
Other Parts Discussed in Thread: TMS570LC4357

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1257818/tms570lc4357-sci-receiver-not-working-when-enabled-loop-back

器件型号:TMS570LC4357

团队、您好!

我们使用的是 TMS570LC4357评估板、在其中测试 SCI3。

我们已根据数据表正确配置了该器件、并启用了环回模式。

当初始化后保持断点时、它可以正常工作。

观察结果: 代码流程如下:

InitSci(),

TransmitByte(),

ReceiveByte()。

由于它是环回模式、我们正在监视寄存器 RD 和 TD 以进行结果验证。

如果我们将断点放在 TransmitByte()上,那么我们将继续执行,这样所有的字节都将顺利传输,我们也可以在 RD 寄存器上看到它。

但是,如果我们从 TransmitByte()行删除断点,并直接从 main()运行代码。

在这种情况下、TD 寄存器正在填充数据、但 RD 寄存器未接收任何字节、并且它一直等待 RX RDY 标志置位。

请注意、标志寄存器= 0x00000900。

我们尝试在 InitSci ()和 TransmitByte () API 之间也保留一些延迟,但观察到的行为是相同的。

我们怀疑 sciInit() API 后控制器没有获得足够的时间/周期来使 Rx 为接收做好准备。

这里有人能帮助我解决这个问题吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Pratik、您好!

    调用 sciInit ()后、SCI 应进入空闲状态、因为在对 SCI 寄存器进行编程时 SCI 模块处于 SW 复位(SWnRST=0)状态。 因此、 总线必须在11位周期内处于空闲状态、才能清除 SCIFLR 该位空闲。 这意味着在总线进入空闲状态之前、不应写入任何数据。

    有关详细信息、请参阅以下主题:
    (12) TMS570LC4357:SCI FLR 寄存器始终卡在值0x00000904 -基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    为此,在 sciInit()函数后添加下面的行。

    while ((sciREG3->FLR 和 SCI_IDLE)== SCI_IDLE);

    如下所示

    这将确保在总线上写入任何数据之前总线处于空闲状态。 现在您可以看到正在接收数据、而不会出现任何断点。

    --

    谢谢。此致、
    Jagadish。