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:新的 C2000Ware InitSysPll()和勘误表 PLL 的问题:可能无法在第一次锁定尝试时锁定

Guru**** 2465480 points
Other Parts Discussed in Thread: C2000WARE, CONTROLSUITE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/718877/tms320f28377s-issue-with-new-c2000ware-initsyspll-and-errata-pll-may-not-lock-on-the-first-lock-attempt

器件型号:TMS320F28377S
Thread 中讨论的其他器件:C2000WAREcontrolSUITE

我们已转向代码的第一版、我们将所有 TI 相关编译器和支持文件库更新为最新版本。 在迁移到 C2000Ware 支持文件的过程中、我遇到了一些无法启动并将无限循环挂起的处理器。 它位于 F2837xS_SYSCTRL.c 文件中的 TI 例程 InitSysPLL()中。 这是针对内部振荡器和 DSC 时钟的标准 TI 配置例程。 TI 更新的函数具有针对滑动位监控器的附加测试、这会导致我们的一些电路板无法启动。

 

我们的配置是使用 INTOSC2和 PLL 来生成193.75MHz SYSCLK。 使用 C2000Ware_1_00_04_00。  这基本上是用于调用函数的代码。

 

   //这是193.75MHz,即200MHz -3.125%。

   InitSysPll (INT_OSC2、IMULT_38、FULT_0pt75、PLLCLK_by_2);

 

在故障电路板上、它会转到以下代码行、然后显示 DSC 由于看门狗计时器事件而复位。

 

       //

       //如果 Timer1或 timer2计数器溢出,则停止计时器

       //

       while (((CpuTimer2Regs.TCR.bit.TIF = 0)&&(CpuTimer1Regs.TCR.bit.TIF = 0));

 

 

勘误表直接引用 C2000Ware InitsysPll()代码来解决勘误表,函数正在执行勘误表中要求的所有操作。

 

我想了解为什么此 TI 功能出现故障、以及如何在未来修复它。 我目前已删除 InitSysPll()例程中的 Slip 位监视器测试,以继续进行,因为它不在以前的 TI controlSUITE 代码库中,我们没有发现任何问题。 我需要使完整的 TI C2000Ware 代码有效、以完全满足勘误建议。

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

    抱歉、没有快速方法来调试您看到的问题。 我们必须监控内部寄存器值和变量、以找出问题所在。 您能否尝试在紧跟在语句"ctr1 = TMR1SYSCLKCTR - CpuTimer1Regs.TIM.All"之后的代码中设置断点?

    //
    //计算 Timer1上经过的计数
    //
    Ctr1 = TMR1SYSCLKCTR - CpuTimer1Regs.TIM.ALL;

    //
    //恢复计时器设置
    //
    CpuTimer1Regs.tcr.all = t1TCR;<=在此行设置断点
    CpuTimer1Regs.PRD.all = t1PRD;
    CpuTimer1Regs.TPR.all = t1TPR;
    CpuTimer1Regs.TPRH。all = t1TPRH;
    CpuSysRegs.TMR2CLKCTL.bit.TMR2CLKSRCSEL = t2SRC;
    CpuSysRegs.TMR2CLKCTL.bit.TMR2CLKPRESCALE = t2Prescale;
    CpuTimer2Regs.tcr.all = t2TCR;
    CpuTimer2Regs.PRD.all = t2PRD;
    CpuTimer2Regs.TPR.all = t2TPR;
    CpuTimer2Regs.TPRH。all = t2TPRH;

    然后、请记下以下变量和位的值并将其发送给我:

    -"ctr1"
    -"ClkCfgRegs.SYSPLLSTS.bit.Slot"

    您的代码应能够多次通过上面所示的 while 循环。 在未出现的电路板上执行此操作。

    仅用于将来的调试用途-您能否在电路板上检查是否可以放置一个外部10MHz 输入时钟和源 XTAL_OSC 而不是 INT_OSC2? 尝试隔离问题是否仅限于 INT_OSC2。

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

    您好、Laura、

    您的调试是否有任何进展?  如果您需要进一步的帮助、请告诉我。

    谢谢、此致、

    Joseph

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

    您尚未听说过此主题。 我现在将关闭此主题、但如果您仍对代码有疑问、请将其发布在该论坛中或向我发送一条注释。

    此致、
    Joseph