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.

[参考译文] TMS320F28379D:InitSysPll 挂起

Guru**** 2589280 points
Other Parts Discussed in Thread: C2000WARE, CODECOMPOSER

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1348635/tms320f28379d-initsyspll-hangs

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

我编写了一个自定义引导加载程序、在闪存中存储应用程序。

当我运行引导加载程序时、它的初始化成功完成、然后它会检测驻留在闪存中 的应用程序并在特定地址启动应用程序。

通过使用调试器和"Assembly Step Into"/"Assembly Step Over"(因为我没有加载应用程序的符号、只有引导加载器被加载到调试器中)、我发现应用程序在 InitSysPll ()内挂起、 特别是在等待 SYSPLL 锁定计数器(SYSCTL.c:363)时):

            //
            // Lock the PLL five times. This helps ensure a successful start.
            // Five is the minimum recommended number. The user can increase
            // this number according to allotted system initialization time.
            //
            for(i = 0U; i < 5U; i++)
            {
                //
                // Turn off PLL
                //
                HWREGH(CLKCFG_BASE + SYSCTL_O_SYSPLLCTL1) &=
                    ~SYSCTL_SYSPLLCTL1_PLLEN;

                asm(" RPT #60 || NOP");

                //
                // Write multiplier, which automatically turns on the PLL
                //
                HWREGH(CLKCFG_BASE + SYSCTL_O_SYSPLLMULT) = pllMult;

                //
                // Wait for the SYSPLL lock counter
                //
                while((HWREGH(CLKCFG_BASE + SYSCTL_O_SYSPLLSTS) &
                       SYSCTL_SYSPLLSTS_LOCKS) == 0U)
                {
                    //
                    // Consider to servicing the watchdog using
                    // SysCtl_serviceWatchdog()
                    //
                }
            }

引导加载程序和应用程序都调用 F2837xD_SYSCTRL.c 的 InitSysCtrl ()。

如果我调试应用程序(没有引导加载程序),它的初始化工作正常,它不会在 InitSysCtrl()中挂起。

在启动应用程序之前、我是否必须在引导加载程序中执行一些操作来解锁 SYSPLL?

谢谢!

Diane

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

    引用 https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1257022/tms320f28377s-plls-never-lock-inside-of-initsysctrl/4764256后 、我 向引导加载程序和应用程序工程中添加了 F2837xD_Headers_nonBIOS_cpu1.cmd。

    这使我越过了锁定循环,但现在 InitSysPll ()会导致复位。  我认为第860行:

    RESC 复位寄存器指示:

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

    尊敬的 Diane:

    从 RESC 寄存器的内容来看、似乎发生了看门狗复位。 我建议让电源重启电路板、然后再次尝试加载应用、并检查是否仍然存在问题。

    还可以指定您使用的 C2000Ware SDK 版本吗?

    您是否使用 OSC1/OSC2或 XTAL 进行时钟配置?  

    另请查看此主题- (+) TMS320F28377S:PLL 锁定/重锁- C2000微控制器论坛- C2000 ︎ 微控制器- TI E2E 支持论坛

    让我来进一步分析这个问题、我会回来与您联系。

    谢谢

    阿斯温

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

    Aswin、

    我已对电路板进行多次下电上电、每次都出现同样的问题。

    我使用的是 C2000Ware 5.0.0.0和 CodeComposer 12.5.0。

    我正在使用默认 XTAL 时钟(因为 F2837xD_SYSCTRL.c InitSysCtrl ()调用

    InitSysPll(XTAL_OSC,IMULT_40,FMULT_0,PLLCLK_BY_2);

    感谢您对此提供的帮助。

    Diane

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

    尊敬的 Diane:

    为了澄清一下、您是否能够从 C2000Ware SDK 中运行任何 TI 提供的示例?

    我们可以检查现有示例在 RAM 和闪存配置中是否在器件中正常工作。

    此外、我认为 sysPll 参数也会导致复位。  

    能否确认您使用的是 controlCARD 还是 LaunchPad 进行验证?

    //
    // PLLSYSCLK =(XTAL_OSC)*(IMULT + FMULT)/(PLLSYSCLKDIV)
    //
    #ifdef _LAUNCHXL_F28379D
    InitSysPll (XTAL_OSC、IMULT_40、FMULT_0、PLLCLK_BY_2);
    #else
    InitSysPll (XTAL_OSC、IMULT_20、FMULT_0、PLLCLK_By_2);
    #endif //_LAUNCHXL_F28379D

    因此、如果您使用的是 controlCARD、您可以使用第二个配置、即 IMULT_20。

    谢谢

    阿斯温

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

    Aswin、

    是的、所有示例都可以正常工作。  当引导加载程序在特定地址启动应用程序时、这只是一个问题。  很奇怪、如果我在没有引导加载程序的情况下运行同一个应用程序、它会正常初始化。

    我正在使用 Launchpad、因此预定义了"_LAUNCHXL_F28379D"。

    谢谢!

    Diane

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

    由于我的引导加载程序已经在调用 InitSysCtrl ()(并因此调用 InitSysPll ()和 InitPeripheralClocks ()),如果我编辑应用程序的 F2837xD_sysctrl.c InitSysCtrl (),以将调用函数传递给 InitSysPll ()和 InitPeripheralClocks (),一切都运行正常。