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:PLL 永远不会锁定在 InitSysCtrl ()内部

Guru**** 1774980 points
Other Parts Discussed in Thread: C2000WARE, CONTROLSUITE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1257022/tms320f28377s-plls-never-lock-inside-of-initsysctrl

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

我在尝试构建我公司制造的 F28377S 器件时遇到问题。 正在进行固件开发的计算机在运行其版本时没有出现任何问题。 但是、当我们尝试在新机器(我的机器)上设置开发时、程序/应用程序会锁定在 InitSysPll 中正常情况下、该函数被调用为 InitSysPll (XTAL_OSC、IMULT_20、FMULT_0、PLLCLK_BY_2)。 然而、当乘法器被写入时、PLL 永远不会锁定。 它会卡在这 while 循环中:

while (ClkCfgRegs.SYSPLLSTS.bit.locks!= 1)
{
   //
  //取消注释以处理看门狗
   //
   // ServiceDog ();

如何解决此问题?

如需相关信息、我将使用 CCS 12并使用 XDS100v2 JTAG 探针进行调试。

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

    Cole、您好!

    新代码是否在同一电路板上运行? 您是否确认晶体振荡器已正确连接到 F28377S 器件? 与代码需要20MHz 晶体的情况类似、基于给定的参数。

    此致、
    伊袋

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

    此代码与在电路板上运行的代码相同。 我们只是从一台计算机切换到另一台计算机。 在我尝试构建完全相同的代码之前、我们的电路板一直运行良好。 在我们尝试切换计算机之前,我们没有遇到任何问题。

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

    Cole:

    在这种情况下,我会仔细研究设置中的差异。  MCU 的电源是什么、如(USB 提供的5V 电压? 通过墙上适配器或 PC 供电? 您是否按照数据表正确观察了电源时序和压摆率/斜升速率要求?)

    此外、即使之前工作正常、 我也想检查晶体振荡器电路。

    如果您可以分享更多有关硬件设置的详细信息、则可以帮助我们缩小问题范围。

    谢谢。
    伊袋

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

    可以。 当运行在其他人的机器上构建的程序时、该板运行得非常好。 它只有在建立在我的基础上时才会断裂。 我没有理由相信电路板上的任何东西都无法正常工作、因为这是我们多年来一直在制造的生产部件。 再说一次、唯一改变的是它是从什么构建的计算机。 旧机器运行的是 CCS v6、我现在的是 v12、但除此之外什么都没有变化。

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

    啊、这一定是之前使用旧得多的编译器版本构建的。

    #1 -您能否确认 您构建的 C2000Ware 版本是否相同(是什么?)。 如果您使用的是与 C2000ware 相同的较早版本、您可能需要 更新至 CCSv12的最新版本并获得最新的编译器支持。

    #2 -请分享完整的时钟和 PLL 设置代码。

    谢谢。
    伊袋

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

    旧系统使用的是 TI 编译器版本6.4.9和 controlSUITE 3.4.7。 它具有 C2000Ware 1.0.6、但我认为它没有配置为使用该功能。 我将编译器版本22.6.0 (LTS)与 C2000Ware 5.0.0一起使用。

    我正在使用 C2000Ware 提供的 F2837xS_SYSCTRL.c。 InitSysCtrl main()顶部被调用。 它会禁用看门狗、执行一些操作、然后使用参数调用 InitSysPll 以执行10x 时钟提升。

    该函数运行以下内容(在锁定位置修整后):

    void InitSysPll (Uint16 clock_source、Uint16 imult、Uint16 fmult、Uint16 divsel)
    {
       UINT16 SCSR、WDCR、WDWCR、intStatus、 t1TCR、 t1TPR、t1TPRH;
       uint16 t2TCR、t2TPR、t2TPRH、t2SRC、t2Prescale;
       uint32 t1PRD、t2PRD、ctr1;
       浮点 sysclkToInClkError、mult、div;
       bool sysclkInvalidFreq=true;

       if ((clock_source => ClkCfgRegs.CLKSRCCTL1.bit.OSCCLKSRCSEL)   &&
          (imULT       = ClkCfgRegs.SYSPLLMULT.bit.IMULT)          &&
          (fmult       == ClkCfgRegs.SYSPLLMULT.bit.FMULT)          &&
          (divsel=      ClkCfgRegs.SYSCLKDIVSEL.bit.PLLSYSCLKDIV)
       {
           //
           ///根据需要设置所有内容,因此只需返回
           //
           返回;
       }

       if (clock_source!= ClkCfgRegs.CLKSRCCTL1.bit.OSCCLKSRCSEL)
       {
           开关(CLOCK_SOURCE)
           {
               情况 INT_OSC1:
                   SysIntOsc1Sel();
                   中断;

               情况 INT_OSC2:
                   SysIntOsc2Sel();
                   中断;

               情形 XTAL_OSC:
                   SysXtalOscSel();
                   中断;
           }
       }

       EALLOW;
       if (imult!= ClkCfgRegs.SYSPLLMULT.bit.IMULT ||
          fmult!= ClkCfgRegs.SYSPLLMULT.bit.FMULT)
       {
           UINT16 I;

           //
           //该位只能通过 POR 复位
           //
           if (DevCfgRegs.SYSDBGCTL.bit.bit_0 == 1)
           {
               //
               //用户可以选择在此处插入处理程序代码。 这只会
               //如果在出现故障的系统后发生了看门狗复位,则执行
               // PLL 初始化。 请参阅器件用户指南以了解更多
               //信息。
               //
               //如果应用程序有看门狗复位处理程序,则该位应
               //进行检查以确定看门狗复位是否是由于
               // of the PLL。
               //
               //此处没有任何操作将继续正常重试 PLL。
               //
               // PLL 初始化失败是由于以下原因造成的:
               //     -无 PLL 时钟
               //     -滑动条件
               //     -频率错误
               //
           }

           //
           //旁路 PLL 并且将分频器设置为/1
           //
           ClkCfgRegs.SYSPLLCTL1.bit.PLLCLKEN = 0;

           //
           // PLL 旁路后需要至少120个 OSCCLK 周期的延迟
           //
           ASM (" RPT #120 || NOP");

           ClkCfgRegs.SYSCLKDIVSEL.bit.PLLSYSCLKDIV = 0;

           //
           //锁定 PLL 五次。 这有助于确保成功启动。
           // 5是建议的最低数字。 用户可以将其增加
           //根据分配的系统初始化时间计算数字。
           //
           for (I = 0;I < 5;I++)
           {
               //
               //关闭 PLL
               //
               ClkCfgRegs.SYSPLLCTL1.bit.PLLEN = 0;
               ASM (" RPT #20 || NOP");

               //
               //写入乘法器,可自动打开 PLL
               //
               ClkCfgRegs.SYSPLLMULT.all =((fmult << 8U)| imult);

               //
               //等待 SYSPLL 锁定计数器
               //
               while (ClkCfgRegs.SYSPLLSTS.bit.locks!= 1)
               {
                   //
                   //取消注释以处理看门狗
                   //
                   // ServiceDog ();
               }
           }
       }

       //已修整...

    一切都正常运行、直到该位永远不会被设置的最后一个 while 循环。

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

    注意:该函数与使用其他计算机进行编译时执行的函数不同。 它运行的是旧版本、但逻辑仍然相同。 唯一真正的更改是根据勘误表最多循环五次。

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

    谢谢。 让我们看看寄存器卡在循环中的位置。 您可以展示以下寄存器的内容吗?

    • CLKSRCCTL1
    • SYSPLLCTL1
    • SYSPLLMULT
    • SYSPLLSTS
    • MCDCR
    • X1CNT

    此致、
    伊袋

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

    当然。 在循环时、其值为:

    • CLKSRCCTL1:0x00000001 (1)
    • SYSPLLCTL1:0x00000001 (1)
    • SYSPLLMULT:0x00000014 (20)
    • SYSPLLSTS:0x00000000 (0)
    • MCDCR:0x00000000 (0)
    • X1CNT:0x00000000 (0)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Cole、您好!

    我将试着进一步研究这一点、但乍一看、X1CNT 为0表明晶体振荡器未能成功启动。 如果我们可以将 SysXtalOscSel()与前面的函数进行比较,以初始化晶体,也许我们可以弄清楚在这里发生了什么。

    伊袋

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

    尊敬的 Ibukun:

    我决定自己在组装过程中进行一些挖掘。 我立即注意到的一件事是、工作版本在_InitSysPll 顶部、DP 寄存器会加载0x1748。 我仍在读取 C28x ISA、但 DP 似乎是一个指针、您将左移6或7以获得真正的地址。 这样做(向左移6位)会给出0x5D200、即 CLK_CFG_REGS、这是合理的。 然而、在我的编译版本中、DP 设置为0x2ef (左移时会提供0xBBC0)、哪个选项指向什么都不(根据 SPRUHX5G)? 为了以防万一、我扫描了 MOVW DP、xxxx 的其余_InitSysPll、但其中没有任何一个加载0x1748 (如果移位为7、则为0xBA4)。

    PLL 是否可能永远不会锁定、因为我实际上没有写入正确的地址?

    ——

    我再挖一些、我想我已经找到了乘法器和环路的位置。

    在我的版本中、DP9d91f 时设置为0x2ef、累加器9d925时加载乘法器(SP[16]中为 IMULT_20、SP[17]中为 FMULT_0)、那么累加器存储在0x1C (不过、SPRUHX5G 表示 SYSPLLMULT 在0x14、不在0x1C)、 然后我们读取0x1E (即 AUXPLLMULTSYSPLLSTS 应为0x16)、如果未设置为9d92a、则执行循环操作。

    0009d91f       C$L9:
    0009d91f 761f    MOVW        DP、#0x2ef
    0009d920  02ef
    0009d921  1816  和         @0x16、#0xFFFE
    0009d922  FFFE
    0009d923  f614  RPT         #20
    0009d924  7700 ||||NOP          
    0009d925  5603  MOV         ACC、*-SP[17]<<8
    0009d926  0851
    0009d927  CA50  或          AL、*-SP[16]
    0009d928  0ea9  MOVU        ACC、AL
    0009d929  1e1c  MOVL        @0x1c、ACC
    0009d92a       $C$L10:
    0009d92a  921e  MOV         AL、@0x1E
    0009d92b  9001  ANDB        Al、#0x1
    0009d92c  5201  CMPB        AL,#0x1
    0009d92d  60fd  SB          -3、NEQ

    但是、工作版本会 a26f7处加载累加器(SP[2]中的 IMULT_20和 SP[3]中的 FMULT_0)、将其写入0x14 (即 SYSPLLMULT)、切换0xE 的最低有效位以设置 PLLEN、然后基于0x16的最低有效位(即 SYSPLLSTS)循环。 同样、此时 DP 为0x1748

    000a26f7  5603  MOV         ACC、*-SP[3]<< 8
    000a26f8  0843
    000a26f9 ca42    或          al,*-sp[2]
    000a26fa 88a9    MOVZ        AR6、铝
    000a26fb  a9a9  MOVL        ACC、P
    000a26fc  afa6  或          ACC、AR6
    000a26fd  1e14  MOVL        @0x14、ACC
    000a26fe  1a0e  或          @0xe、#0x0001
    000a26ff  0001
    000a2700       C$L13:
    000a2700  9216  MOV         AL、@0x16
    000a2701  9001  ANDB        Al、#0x1
    000a2702  5201  CMPB        AL、#0x1
    000a2703  edfd  SBF         -3、NEQ

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

    Cole:

    但是、您之前发布的寄存器值表明确实已正确写入 PLL 配置寄存器。 XTAL 的 CLKSRCCTL1 = 1、且 PLLMULT = 0x14 (20)、这将会将 PLL 锁定在400MHz 上并启用 PLL。 这些值来自工作版本还是非工作版本?

    伊袋

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

    我现在通过上载构建的代码和调试测试了我的理论。 我认为我的猜测是正确的。 在 MEMORY 窗口中、CCS 似乎知道时钟配置寄存器位于0x5D200、但如果我将鼠标悬停在 ClkCfgRegs 变量本身上、我可以看到它位于0xBBC8 (如我的汇编所示)。

    为了回答您的问题、我读取的值来自不工作的编译。 但我有一个理论。

    认为发生的情况是:寄存器被编译器错误地映射到了0xBBC8、它恰好位于 RAM 中(RAMD1)。 所以、当非工作代码将0x14写入 SYSPLLMULT 时、它实际上是在完全错误的位置写入它。 实际上、检查存储器会发现0x14位于0xBBDC

    当我早些时候读回这些值时、这些值看起来写正确、因为它们是写入 RAM 的、因此也可以回读。 X1CNT 看起来是零、因为它只是在读取空白 RAM。

    从根本上说、这是一个编译器问题、而不是硬件问题。 编译器将硬件寄存器映射到错误的地址。

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

    Cole:

    在我与我们的软件团队讨论此问题之前、还有一件事是:您可以共享使用的链接器命令文件吗? 我们当然想在这里重复这个问题。

    此外、在编译/链接过程中您是否看到任何编译器警告? 如果是、请分享。

    谢谢。
    伊袋

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

    Ibukun,

    感谢你的帮助。 除了来自我自己代码库的警告外、我不会收到任何编译器警告。 但是、我收到以下链接器警告:

    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"FlashPumpSemaphoreRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"RomPrefetchRegsFile"
    警告#10247-D:在不使用 SECTIONS 规范的情况下创建输出段"RomWaitStateRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"DcsmCommonRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"SyncSockRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"DacaRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"DacbRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"DaccRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"NmiIntruptRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"CpuTimer0RegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"CpuTimer1RegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"CpuTimer2RegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"Emif1ConfigRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"Emif2ConfigRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"XintRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"XbarRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"SciaRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"ScibRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"ScicRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"ScidRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"SpiaRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"SpibRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"SpicRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"AdcaResultRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"AdcbResultRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"AdccResultRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"AdcdResultRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"DmaClaSrcSelRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"ECap1RegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"ECap2RegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"ECap3RegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"ECap4RegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"ECap5RegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"ECap6RegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"PieCtrlRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"Cmpss1RegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"Cmpss2RegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"Cmpss3RegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"Cmpss4RegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"Cmpss5RegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"Cmpss6RegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"Cmpss7RegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"Cmpss8RegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"InputXbarRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"DcsmZ1RegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"DcsmZ2RegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"EQep1RegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"EQep2RegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"EQep3RegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"I2caRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"I2cbRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"McbspaRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"McbspbRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"Emif1RegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"Emif2RegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"Flash0EccRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"Flash1EccRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"WdRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出节"AccessProtectionRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"GpioDataRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"ClkCfgRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"MemoryErrorRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"AnalogSubsysRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"Cla1RegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"Clb1LogicCfgRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"Clb2LogicCfgRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"Clb3LogicCfgRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"Clb4LogicCfgRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出节"Clb1LogicCtrlRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出节"Clb2LogicCtrlRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出节"Clb3LogicCtrlRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出节"Clb4LogicCtrlRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"ClbXbarRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"EPwmXbarRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"OutputXbarRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"Sdfm1RegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"Sdfm2RegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"UppRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"MemCfgRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"AdcaRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"AdcbRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"AdccRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"AdcdRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"CpuSysRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"DmaRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"EPwm1RegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"EPwm2RegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"EPwm3RegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"EPwm4RegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"EPwm5RegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"EPwm6RegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"EPwm7RegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"EPwm8RegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"EPwm9RegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"EPwm10RegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"EPwm11RegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"EPwm12RegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"Clb1DataExchRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"Clb2DataExchRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"Clb3DataExchRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"Clb4DataExchRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"DevCfgRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"CanaRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"CanbRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出节"GpioCtrlRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"Flash0CtrlRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"Flash1CtrlRegsFile"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"PieVectTableFile"
    备注#10205-D:自动 RTS 选择: 在"rts2800_fpu32.lib"中进行链接、以代替索引库"libc.a"

    链接器文件是该旧机器的默认2837xS_Generic_flash_lnk.cmd、但对该文件进行了一些修改、以使程序适应闪存。 这与另一台计算机所使用的相同:

    //已更改 RAM 长度2021年05月07日
    //
    内存
    {
    第0页: /*程序存储器*/
             /*存储器(RAM/FLASH)块可移动到页1进行数据分配*/
             /*开始用于"引导至闪存"引导加载程序模式  */

      begin             :origin = 0x080000、length = 0x000002
      RAMM0             :origin = 0x000122、length = 0x0002DE
      RAMD0             :origin = 0x00B000、length = 0x000800
      RAMLS0            :origin = 0x008000、length = 0x000800
      RAMLS1            :origin = 0x008800、length = 0x000800
      RAMLS2           :origin = 0x009000、length = 0x000800
      RAMLS3           :origin = 0x009800、length = 0x000800
      RAMLS4           :origin = 0x00A000、length = 0x000800
      复位             :origin = 0x3FFFC0、length = 0x000002

      /*闪存扇区*/
      FLASHA          :origin = 0x080002,length = 0x001FFE   /*片上闪存*/
      FLASHB          :origin = 0x082000、length = 0x006000   /*片上闪存*/
      FLASHC          :origin = 0x088000,length = 0x002000   /*片上闪存*/
      FLASHD          : origin = 0x08A000 , length = 0x008000   /*片上闪存*/
      FLASHE          :origin = 0x092000,length = 0x00FFFF   /*片上闪存*/
      FLASHF          :origin = 0x0A1FFF,length = 0x008000   /*片上闪存*/
      FLASHG          :origin = 0x0A9FFF、length = 0x001001   /*片上闪存*/
      FLASHH          :origin = 0x0AB000、length = 0x001000   /*片上闪存*/
      FLASHI          :origin = 0x0AC000,length = 0x004000   /*片上闪存*/
      FLASHJ          :origin = 0x0B0000,length = 0x008000   /*片上闪存*/
      FLASHK          : origin = 0x0B8000,length = 0x002000   /*片上闪存*/
      FLASHL          :origin = 0x0BA000、length = 0x002000   /*片上闪存*/
      FLASHM          :origin = 0x0BC000,length = 0x002000   /*片上闪存*/
      FLASHN          :origin = 0x0BE000,length = 0x002000   /*片上 Flash */

    第1页:/*数据存储器*/
            /*存储器(RAM/FLASH)块可移动到 PAGE0进行程序分配*/

      BOOT_RSVD      :origin = 0x000002、length = 0x000120    /* M0的一部分,引导 ROM 将此用于堆栈*/
      RAMM1          :origin = 0x000400,length = 0x000400    /*片上 RAM 块 M1 */
      RAMD1          :origin = 0x00B800,length = 0x000800

      RAMLS5     : origin = 0x00A800 , length = 0x000800

      RAMGS0     :origin = 0x00C000、length = 0x003FF0
      RAMGS1     :origin = 0x00FFF0、length = 0x000002
      RAMGS2     :origin = 0x00FFF2、length = 0x000002
      RAMGS3     :origin = 0x00FFF4、length = 0x000002
      RAMGS4     :原点= 0x010000、长度= 0x003FEE
      RAMGS5     :origin = 0x013FEE、length = 0x000002
      RAMGS6     :origin = 0x013FF0、length = 0x000002
      RAMGS7     :origin = 0x013FF2、length = 0x000002
      // RAMGS7     :origin = 0x013000,length = 0x001000
      RAMGS8     :origin = 0x014000、length = 0x001000
      RAMGS9     :origin = 0x015000、length = 0x001000
      RAMGS10    :origin = 0x016000、length = 0x001000
      RAMGS11    :origin = 0x017000、length = 0x001000




    部分
    {
      /*分配计划领域:*/
      .cinit             :> FLASHB     PAGE = 0、ALIGN (4)
      .pinit             :> FLASHB、    PAGE = 0、ALIGN (4)
      .text              :>> FLASHE | FLASHF,   page = 0, align (4)
      codestart          :> begin      page = 0, align (4)
      ramfuncs           : load=FLASHD,
                            Run = RAMLS0 | RAMLS1 | RAMLS2 |RAMLS3、
                            Load_start (_RamfuncsLoadStart)、
                            Load_Size (_RamfuncsLoadSize)、
                            Load_End (_RamfuncsLoadEnd)、
                            RUN_START (_RamfuncsRunStart)、
                            RUN_SIZE (_RamfuncsRunSize)、
                            RUN_END (_RamfuncsRunEnd)、
                            PAGE = 0、ALIGN (4)

      /*分配未初始化的数据段:*/
      .stack          :> RAMGS0    页面= 1
      .ebss           :> RAMGS4    页面= 1
      econst         :> RAMLS5    页面= 1
      .cio         :> RAMGS8    页面= 1
      .esysmem        :> RAMLS5    页面= 1

      /*初始化段进入闪存*/
      .switch            :> FLASHB     PAGE = 0、ALIGN (4)
      .reset             :>RESET、    PAGE = 0、TYPE = DSECT /*未使用、*/

    #ifdef _TI_Compiler_version
      #if _TI_Compiler_version >= 15009000
       .TI.ramfunc:{}load = FLASHD、
                            Run = RAMLS0 | RAMLS1 | RAMLS2 | RAMLS3 | RAMLS4、
                            Load_start (_RamfuncsLoadStart)、
                            Load_Size (_RamfuncsLoadSize)、
                            Load_End (_RamfuncsLoadEnd)、
                            RUN_START (_RamfuncsRunStart)、
                            RUN_SIZE (_RamfuncsRunSize)、
                            RUN_END (_RamfuncsRunEnd)、
                            PAGE = 0、ALIGN (4)
      #endif
    #endif

      ramgs0          :> RAMGS0,   页面= 1
      ramgs1          :> RAMGS1、   page = 1

      /*以下部分的定义适用于 SDFM 示例*/
      filter1_RegsFile:> RAMGS1、   page = 1、fill=0x1111
      Filter2_RegsFile:> RAMGS2、   page = 1、fill=0x2222
      Filter3_RegsFile:> RAMGS3、   page = 1、fill=0x3333
      Filter4_RegsFile:> RAMGS4、   page = 1、fill=0x4444
      Difference_Regs 阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列    


    /*
    //========================================
    //文件结尾。
    //========================================
    */

    将 来自旧机器的该文件的未修改版本与 C2000Ware 提供的版本进行比较、我看到对"RAM funcs"部分进行了一些更改、但没有做太多其他更改。

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

    Cole:

    看起来您的项目中缺少 F2837xS_Headers_nonBIOS.cmd。 此文件位于 device_support/f2837xs/common/cmd 目录中、应该添加到 Project Properties > Build > C2000 Linker > File Search Path 下的 include 列表中、或者只是直接添加到工程中。 此文件是位域寄存器定义正常工作所必需的。

    此致、
    伊袋

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

    啊 我在  C:\ti\c2000\C2000Ware_5_00_00_00\device_support\f2837xs+文件\cmd 下找到它。 它确实看起来像我需要的。 将其添加到链接器搜索路径中删除了链接器警告!

    我上传了新的构建、并且成功地单步执行 InitSysPll 函数调用! 感谢您的帮助!