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.

[参考译文] TM4C129XNCZAD:PLL 频率是我预期的一半

Guru**** 2415590 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/692539/tm4c129xnczad-pll-freq-is-half-what-i-expect

器件型号:TM4C129XNCZAD

我正在使用 TM4C129X 开发套件、该套件使用25MHz 晶体振荡器。 我使用的 TivaWare 版本是2.1.4.178。 我有以下代码来初始化系统时钟:

systemClockFreqHz = SysCtlClockFreqSet( SYSCTL_XTAL_25MHz
| SYSCTL_OSC_MAIN
| SYSCTL_USE_PLL
| SYSCTL_CFG_VCO_480
),120000000U); 

当我调用 SysCtlVCOGet()来检查 PLL 频率时、它返回 240000000而不是 我期望的480000000。 如果我查看 PLL 寄存器、MIN=0x60、MFRC=0、N=4、Q = 1。 根据芯片数据表中的表5-7、 如果 Q 等于0、我应该得到480000000的 PLL。 但出于某种原因 SysCtlClockFreqSet()函数已将 Q 设置为1。 如何获得 480000000的 PLL?

此致、

Dave

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

    我用于设置系统时钟的代码在以前的项目上工作正常、该项目使用的是 TivaWare 的早期版本。 我在以前和当前版本的 TivaWare 中的 sysctl.c 文件之间进行了比较、发现了一个奇怪的变化:

    旧:

    //
    //
    //查找可能的 VCO 频率。
    //
    //
    静态常量 uint32_t g_pui32VCOF 要求[MAX_VCO_entries ]=

    320000000、// VCO 320
    480000000、// VCO 480
    };

    新:

    //
    //
    //查找可能的 VCO 频率。
    //
    //
    静态常量 uint32_t g_pui32VCOF 要求[MAX_VCO_entries ]=

    160000000、// VCO 320
    240000000、// VCO 480
    };

     g_pppui32XTALtoVCO[]表似乎也已更新,以添加 Q 值,该表似乎在25MHz 的情况下将 Q 设置为1:

    //
    // VCO 480MHz
    //
    {PLL_M_TO_REG (96、0)、PLL_N_TO_REG (1)、PLL_Q_TO_REG (2)}、// 5MHz
    {PLL_M_TO_REG (93、768)、PLL_N_TO_REG (1)、PLL_Q_TO_REG (2)}、// 5.12MHz
    {PLL_M_TO_REG (80、0)、PLL_N_TO_REG (1)、PLL_Q_TO_REG (2)}、// 6MHz
    {PLL_M_TO_REG (78、128)、PLL_N_TO_REG (1)、PLL_Q_TO_REG (2)}、// 6.144MHz
    {PLL_M_TO_REG (65、107)、PLL_N_TO_REG (1)、PLL_Q_TO_REG (2)}、// 7.3728MHz
    {PLL_M_TO_REG (60、0)、PLL_N_TO_REG (1)、PLL_Q_TO_REG (2)}、// 8MHz
    {PLL_M_TO_REG (58、608)、PLL_N_TO_REG (1)、PLL_Q_TO_REG (2)}、// 8.192MHz
    {PLL_M_TO_REG (48、0)、PLL_N_TO_REG (1)、PLL_Q_TO_REG (2)}、// 10MHz
    {PLL_M_TO_REG (40、0)、PLL_N_TO_REG (1)、PLL_Q_TO_REG (2)}、// 12MHz
    {PLL_M_TO_REG (39、64)、PLL_N_TO_REG (1)、PLL_Q_TO_REG (2)}、// 12.288MHz
    {PLL_M_TO_REG (35、408)、PLL_N_TO_REG (1)、PLL_Q_TO_REG (2)}、// 13.56MHz
    {PLL_M_TO_REG (33、536)、PLL_N_TO_REG (1)、PLL_Q_TO_REG (2)}、// 14.318180 MHz
    {PLL_M_TO_REG (30、0)、PLL_N_TO_REG (1)、PLL_Q_TO_REG (2)}、// 16MHz
    {PLL_M_TO_REG (29、304)、PLL_N_TO_REG (1)、PLL_Q_TO_REG (2)}、// 16.384MHz
    {PLL_M_TO_REG (80、0)、PLL_N_TO_REG (3)、PLL_Q_TO_REG (2)}、// 18MHz
    {PLL_M_TO_REG (24、0)、PLL_N_TO_REG (1)、PLL_Q_TO_REG (2)}、// 20MHz
    {PLL_M_TO_REG (20、0)、PLL_N_TO_REG (1)、PLL_Q_TO_REG (2)}、// 24MHz
    {PLL_M_TO_REG (96、0)、PLL_N_TO_REG (5)、PLL_Q_TO_REG (2)}、// 25MHz

    在最新的 TivaWare 版本中、是否会出现一些混乱?

    此致、

    Dave

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这种改变是有意的。 它是勘误表 SYS#22的权变措施的一部分。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    那么、这是否意味着无法将 PLL 频率设置为480000000?

    此致、

    Dave
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    最新的 TivaWare 通过以240MHz 运行 VCO 以生成120MHz 系统时钟、避免了在480MHz 下运行 VCO 的问题。 我是否可以问您为什么要以480MHz 的频率运行 VCO? 也许我能够提出不同的解决方案。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Bob、

    我希望以480运行 PLL 的原因是、我最初以为 USB 需要以最大速度运行。 但是、在仔细阅读数据表后、PLL 看起来好像被分频来创建一个60MHz 时钟、所以 PLL 是否为480并不重要。 我是否理解正确?

    此致、

    Dave
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、没错。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、谢谢 Bob。 我想这不是什么问题。

    此致、

    Dave