主题中讨论的其他器件: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 的新手。 请帮帮我! 谢谢。