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:询问 InitSysCtrl()函数

Guru**** 2611705 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/981252/tms320f28379d-ask-about-initsysctrl-function

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

大家好、

我将在  C:\ti\c2000\C2000Ware_3_04_00_00\device_support\f2837xd\examples\cpu1\epwm_dadband \cpu01处从 TI 库中查看一个示例。  下面我有几个问题:

(1)我有一个关于  InitSysCtrl()的问题。 在 InitSysCtrl 函数中、有一个部分如下所示:

if (imult!= ClkCfgRegs.SYSPLLMULT.bit.IMULT ||
fmult!= ClkCfgRegs.SYSPLLMULT.bit.FMULT)

uint16 i;

//
//此位仅由 POR 复位
//
if (DevCfgRegs.SYSDBGCTL.bit.bit_0 = 1)

//
//用户可以选择在此处插入处理程序代码。 这只会
//如果系统发生故障后发生看门狗复位则执行
// PLL 初始化。 有关更多信息、请参阅器件用户指南
//信息。
//
//如果应用程序有看门狗复位处理程序,该位应该
//进行检查以确定是否发生了看门狗复位是因为
PLL 的//。
//
//此处的操作不会继续正常重试 PLL。
//
// PLL 初始化失败的原因是以下任一:
//-无 PLL 时钟
//-打滑条件
//-频率错误
//

//
//绕过 PLL 并将分频器设置为/1
//
ClkCfgRegs.SYSPLLCTL1.bit.PLLCLKEN = 0;

//
PLL 旁路后至少需要120个 OSCCLK 周期的//延迟
//
asm (" RPT #120 || NOP");
ClkCfgRegs.SYSCLKDIVSEL.bit.PLLSYSCLKDIV = 0;

//
//锁定 PLL 五次。 这有助于确保成功启动。
//五是建议的最小数。 用户可以增大此值
//根据分配的系统初始化时间进行编号。
//
对于(I = 0;I < 5;I++)

//
//关闭 PLL
//
ClkCfgRegs.SYSPLLCTL1.bit.PLLEN = 0;//禁用 PLL
asm (" RPT #20 || NOP");

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

//
//等待 SYSPLL 锁定计数器
//
while (ClkCfgRegs.SYSPLLSTS.bit.lock!= 1)//系统 PLL 状态寄存器。
// bit.locks = 0 = SYSPLL 尚未锁定
// bit.locks = 1 = SYSPLL 被锁定

//
//取消注释以处理看门狗
//
// ServiceDoG();


我的问题是:

您能告诉我这个代码部分的用途吗? 据我了解、如果变量 imult 和 fmult 与当前位值不同、CCS 将继续执行此代码。

由于当前的位值与 imult fmult 不同、我们应该启用  SYSPLLCTL1 寄存器并设置这些位值。

但是、上面的代码在   ClkCfgRegs.SYSPLLCTL1.bit.PLLCLKEN = 0处禁用 SYSPLLCTL1寄存器。 您是否理解其中的原因?

(2)我的第二个问题位于以下代码中:  

#ifdef _LAUNCHXL_F28379D
InitSysPll (XTAL_OSC、IMULT_40、FULT_0、PLLCLK_By_2);
其他
InitSysPll (XTAL_OSC、IMULT_20、FULT_0、PLLCLK_By_2);
#endif //_LAUNCHXL_F28379D

 LAUNCHXL_F28379D 变量的值是什么? 上面的代码是否询问硬件是 F28379D 的 LaunchPad 还是 controlCARD

以及该程序如何区分 LaunchPad 和 controlCARD? 我使用这两个硬件尝试了代码、它们都正常工作(但输出频率不同!)

(3)我的第三个问题是:在   C:\ti\c2000\C2000Ware_3_04_00_00\device_support\f2837xd\examples\cpu1\ePWM_dul带\cpu01的示例中。

我在 InitSysCtrl()函数:ClkCfgRegsSYSPLLMULT.bit.IMULT 和  ClkCfgRegs.SYSPLLMULT.bit.FAULT 中找不到用户设置这些位字段的位置

 

我是 C2000 MCU 的新手。 请帮帮我! 谢谢。

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

    尊敬的 Van:

    请在下面查找您的问题的答案:

    1. 代码首先禁用 PLL,然后对其进行配置,因为当前位值与 imult fmult 不同,然后等待 PLL 锁定到新的频率。  在将 PLL 配置为不同的频率之前、必须先将其禁用。

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

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

    2. 是的、宏"_LAUNCHXL_F28379D" 用于指示所使用的硬件是控制卡还是 Launchpad。 如果您使用的是 Launchpad、则需要在 CCS Project Properties 中预定义此符号。

    3.有引导 ROM 代码用于初始化时钟。 作为此代码的一部分,将设置 IMULT 和 FMULT。  引导 ROM 源代码位于

    C:\ti\c2000Ware_3_04_00_00\libraries\boot_rom\f2837xd

    此致

    Siddharth

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

    尊敬的 Siddharth:

    非常感谢您的回答。  

    与问题2相关、您能否向我展示如何在 CCS 工程属性中将符号_LAUNCHXL_F28379D 预定义为输入参数?

    非常感谢。

    此致、

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

    尊敬的 Van:

    要预定义符号,必须右键单击 CCS 项目,选择属性,然后在“预定义符号”部分下添加符号。 请参阅随附的快照以供参考。


    此致

    Siddharth

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

    尊敬的 Siddharth:

    非常感谢您的回答。  

    此致、