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.

[参考译文] F28M36P63C2:如果使用小数乘法器、SysCtlClockGet ()返回错误的值

Guru**** 2540720 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/623187/f28m36p63c2-sysctlclockget-returns-wrong-value-if-fractional-multiplier-is-used

器件型号:F28M36P63C2

在函数 SysCtlClockGet ()中、"小数乘法器"是根据计算得出的"整数乘法器"计算得出的。

"分数乘法器"必须根据输入值 ulClockIn 计算。

以下是正确的代码:

无符号长整型
SysCtlClockGet (无符号长整型 ulClockIn)

   无符号超长整型 ulClock;

   //如果 PLL 被启用、计算它对时钟的影响
   if ((HWREG (SYSCTL_SYSPLLCTL)&
       (SYSCTL_SYSPLLCTL_SPLLEN | SYSCTL_SYSPLLCTL_SPLLCLKEN))== 3)
   {
       //计算整数乘法器
       ulClock = ulClockIn *
                 (HWREG (SYSCTL_SYSPLLMULT)和 SYSCTL_SYSPLLLMULT_SPLLIMULT_M);

       //计算小数乘法器
       switch ((HWREG (SYSCTL_SYSPLLMULT)& SYSCTL_SYSPLLLMULT_SPLLFULT_M)>>
               SYSCTL_SYSPLLLMULT_SPLLFULT_S)
       {
       默认值:
       情况0:
           中断;

       案例1:
           ulClock += ulClockIn / 4;
           中断;

       案例2:
           ulClock += ulClockIn / 2;
           中断;

       案例3:
           ulClock +=(ulClockIn * 3)/4;
           中断;
       }
   }

   //固定除以2
   ulClock = ulClock / 2;

   //通过系统时钟分频器对时钟进行分频
   开关(HWREG (SYSCTL_SYSDIVSEL)和 SYSCTL_SYSDIVSEL_SYSDIVSEL_M)
   {
   默认值:
   情况0:
       中断;

   案例1:
       ulClock /= 2;
       中断;

   案例2:
       ulClock /= 4;
       中断;

   案例3:
       ulClock /= 8;
       中断;
   }

   //通过 M3时钟分频器对时钟进行分频
   开关(HWREG (SYSCTL_M3SSDIVSEL)和 SYSCTL_M3SSDIVSEL_M)
   {
   默认值:
   情况0:
       中断;

   案例1:
       ulClock /= 2;
       中断;

   案例2:
       ulClock /= 4;
       中断;
   }

   返回 ulClock;


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

    Juergen、

    感谢您将此事提请我们注意。    此问题的错误修复请求已提交。

    此致、

    Ozino