在函数 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;
}