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.

[参考译文] TMS320F28377S:一个奇怪的问题:sci-A 接收器可以与仿真配合使用、但无法与从闪存引导配合使用

Guru**** 2439710 points
Other Parts Discussed in Thread: TMS320F28379D, TMS320F28377S

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1195952/tms320f28377s-a-strange-problem-that-sci-a-receiver-can-work-with-emulation-but-cannot-work-with-boot-from-flash

器件型号:TMS320F28377S
主题中讨论的其他器件:TMS320F28379D

尊敬的 TI 员工:

我在 SCI-A 接收器上遇到了一个奇怪的问题。 我将 GPIO-43分配为接收器端口。 当我使用在线调试时、它正常工作、即使我停止仿真但不关闭 DSP 电源、它仍然工作良好。 但对于从闪存引导、它无法正常工作。  

我还测试了回路功能、它在闪存模式和仿真模式下都能正常工作。

我测试了 GPIO43作为正常 GPIO 输入的功能。 它可以很好地工作。

我怀疑这是中断问题。 但是、如果我没有使用中断、但始终通过 LED 检查 FIFO 状态。 在线调试可以工作、但闪存模式仍然无法工作。 它无法接收任何数据。 它不是数据错误、而是未接收到任何数据。

闪存模式中的其他功能看起来不错。

总之、GPIO43只作为一个处于闪存模式的 SCI-A 接收器输入是异常的。 现在、我不知道可以通过检查和调试来找出原因。  

希望您能为我提供一些提示或可能的解决方案。 谢谢!

此致、

Liyang

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

    您好,Liyang,

    [引用 userid="507972" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1195952/tms320f28377s-a-strange-problem-that-sci-a-receiver-can-work-with-emulation-but-cannot-work-with-boot-from-flash "]

    总之、GPIO43只作为一个处于闪存模式的 SCI-A 接收器输入是异常的。 现在、我不知道可以通过检查和调试来找出原因。  

    希望您能为我提供一些提示或可能的解决方案。 谢谢!

    [/报价]

    您是否正在使用 C2000示例? 如果是、使用的是哪个示例?  

    [引用 userid="507972" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1195952/tms320f28377s-a-strange-problem-that-sci-a-receiver-can-work-with-emulation-but-cannot-work-with-boot-from-flash "]闪存模式中的其他功能看起来不错。

    您检查了哪些其他功能?

    此致、

    Marlyn

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

    尊敬的 Marlyn:

    非常感谢您的帮助!

    现在、我有一些新的调试更新。

    我自己设计了控制器板。

    我最初使用 FIFO 模式、但如前所述、它无法工作。 然后我在 TI 的 TMS320F28379D 控制卡上尝试了我的代码、它正常工作。

    我使用 TMS320F28377S 和 TI 控制卡进行设计的主要区别在于我使用了10MHz 外部振荡器、但控制卡是20MHz 振荡器。  

    我禁用了 FIFO 功能、只使用 RXRDY 位来触发接收器中断、所以我设计了一个单字(8位)接收程序。 我还通过设置 LED 来检查接收到的一个字的正确性、以便我可以在闪存模式下进行观察。 我发现它可以在闪存模式和调试模式下工作。

    现在、我开始怀疑时钟错误问题、因为我之前使用的是16字 FIFO。 它可能会累积更多时钟误差。 我不确定这一点。

    在调试模式和闪存模式下、系统时钟是否可能具有不同的性能或机制? 谢谢!

    此致、

    Liyang

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

    您好,Liyang,

    [引用 userid="507972" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1195952/tms320f28377s-a-strange-problem-that-sci-a-receiver-can-work-with-emulation-but-cannot-work-with-boot-from-flash/4508398 #4508398]I 使用 TMS320F28377S 和 TI 控制卡进行设计的主要区别在于我使用了10MHz 外部振荡器、但控制卡是20MHz 振荡器。  [/报价]

    您如何在项目中设置时钟? 如果您使用的是'DEVICE_INIT();'函数,则我将检查如何根据您的应用需求设置时钟。 我们的 controlCARD 使用20Mhz 时钟、但 launchpad 使用10MHz、因此两者都有一个示例。  

    如果打开'DEVICE_INIT'(在 device.c 中找到)的声明、您将看到调用'SysCtl_setclock (device_setClock_CFG);'函数。 现在、如果您看到如何定义'device_setClock_CFG'(在 device.h 中)、您将能够找到10MHz 和20MHz 的设置(下面的代码段)。

    //*****************************************************************************
    //
    // Launchpad Configuration
    //
    #ifdef _LAUNCHXL_F28379D
    
    //
    // 10MHz XTAL on LaunchPad. For use with SysCtl_getClock().
    //
    #define DEVICE_OSCSRC_FREQ          10000000U
    
    //
    // Define to pass to SysCtl_setClock(). Will configure the clock as follows:
    // PLLSYSCLK = 10MHz (XTAL_OSC) * 40 (IMULT) * 1 (FMULT) / 2 (PLLCLK_BY_2)
    //
    #define DEVICE_SETCLOCK_CFG         (SYSCTL_OSCSRC_XTAL | SYSCTL_IMULT(40) |  \
                                         SYSCTL_FMULT_NONE | SYSCTL_SYSDIV(2) |   \
                                         SYSCTL_PLL_ENABLE)
    
    //
    // 200MHz SYSCLK frequency based on the above DEVICE_SETCLOCK_CFG. Update the
    // code below if a different clock configuration is used!
    //
    #define DEVICE_SYSCLK_FREQ          ((DEVICE_OSCSRC_FREQ * 40 * 1) / 2)
    
    //
    // ControlCARD Configuration
    //
    #else
    
    //
    // 20MHz XTAL on controlCARD. For use with SysCtl_getClock().
    //
    #define DEVICE_OSCSRC_FREQ          20000000U
    
    //
    // Define to pass to SysCtl_setClock(). Will configure the clock as follows:
    // PLLSYSCLK = 20MHz (XTAL_OSC) * 20 (IMULT) * 1 (FMULT) / 2 (PLLCLK_BY_2)
    //
    #define DEVICE_SETCLOCK_CFG         (SYSCTL_OSCSRC_XTAL | SYSCTL_IMULT(20) |  \
                                         SYSCTL_FMULT_NONE | SYSCTL_SYSDIV(2) |   \
                                         SYSCTL_PLL_ENABLE)
    
    //
    // 200MHz SYSCLK frequency based on the above DEVICE_SETCLOCK_CFG. Update the
    // code below if a different clock configuration is used!
    //
    #define DEVICE_SYSCLK_FREQ          ((DEVICE_OSCSRC_FREQ * 20 * 1) / 2)
    
    #endif

    我建议确保根据您的特定应用设置您的时钟。  

    此致、
    Marlyn