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.

[参考译文] EK-TM4C1294XL:USB/PWM 时钟速率 VCO 240MHz

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/858692/ek-tm4c1294xl-usb-pwm-clock-rate-vco-240mhz

器件型号:EK-TM4C1294XL
主题中讨论的其他器件:TM4C1294KCPDT

在将 Tivaware v21171 SysCtlClockFreqSet()替换为 v214178 SysCtlClockFreqSet()之后,SysCtlVcoGet ()显示240Mhz。

最糟糕的是 USB PLL 设置为480MHz、PLL 除数16、USB 停止枚举。 在定制 PCB 上将相同的时钟变化添加到 TM4C1294KCPDT USB/PWM 外设在相同的 PLL 分频器下保持工作状态、而不会受到干扰。

不用说 Tivaware v214178对 SysCtlClockFreqSet()的更改使我非常困惑。 现在、TM4C1294NCPDTi3 USB 外设需要"PLL=240"、"Divisor=4"、否则它甚至不会枚举。 因此、如果 VCO 确实是240MHz 而不是480MHz、我们必须知道 PWM 时钟分频值是否仍然正确。   

为什么 SysCtlVcoget()现在显示 VCO=240MHz,以及如何使 VCO=480MHz 与 v214178相同? 240Mhz 是否更正确的 VCO 速度、以及我们是否对 MCU 进行了超频???????????

注意到这种行为在过去、因此返回到 Tivaware v21171 SysCtlClockFreqSet ()、因为 PWM 时钟除数= PWM_SYS_CLK_DIV_2、而不是 VCO=480MHz 的 PWM_SYS_CLK_DIV_4。

那么、以前所有的 Tivaware driverlib 外设文档都在提供虚假叙述、即 VCO=480MHz?

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

    您好 BP101、

    VCO 的问题与勘误表项 SYSCTl#22和 SYSCTl#23有关、因此、是的、名称现在会误导您。

    我们已经将此问题确定为 TivaWare 中需要修复的缺陷、并已采取步骤调整下一个 TivaWare 版本中使用的命名约定。

    VCO 设置为240MHz、但使用4分频可提供 USB 所需的60MHz 频率。 这都是 TivaWare 2.1.4.178的 API 中的设置。

    我建议阅读这两个勘误表、以便更深入地了解为什么要进行这些更改以确保长期系统稳定性。

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

    [引用 USER="Ralph Jacobi]VCO 设置为240MHz、但使用4分频可获得 USB 所需的60MHz 频率。 这都是 TivaWare 2.1.4.178的 API 中的设置。[/QUERP]

    480 PLL 为什么会产生240 MHz VCO、并像现在一样烧毁 USB 和 PWM 外设? TM4C1294KCPDT 在通过 CCS7进行多次编译后设置相同的240MHz。

    那么、这个 MOSC 变化是否要求我们也改变 USB 和 PWM 之前的分频值、这似乎是现在所需要的? 这正是 POST 的重点、因为如果系统时钟频率分频值设置不正确、此更改可能对 PWM 逆变器具有很大的破坏性。  

    我们是否必须在以下配置中替换新的 VCO 定义才能实现之前设置的480MHz VCO?

    /* MPU 使用 MOSC 驱动的 PLL 480MHz/4产生120MHz SYSCLK:
    Y1 = 25MHz XTAL HIGHFREQ。 *
    G_ui32SysClock =
    MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
    SYSCTL_OSC_MAIN | SYSCTL_USE_PLL |
    SYSCTL_CFG_VCO_480)、120000000); 

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

    您好 BP101、

    勘误项 sysctl#22最终只影响一小部分器件、因此在大多数情况下、您似乎能够正常使用480MHz。 但是、这样做会使您的系统面临勘误项发生的风险、并且由于其性质、我们不能推荐使用240MHz 的 VCO 以外的任何其他器件。 USB 不受480与240 MHz 之间的差异的影响、但理论上、如果您想使用320 MHz 的 USB、则可能是因为320 MHz 是不可能的、因此它将是160 MHz、并且无法分频到60 MHz。 我没有听说过 PWM 受到这种影响。

    用于最高频率设置的 ADC 模块受到一定程度的影响、需要进行特殊配置以最大限度地提高速度(Bob 在之前的文章中介绍了一个主题)。

    我将向您展示我们使用下一个 TivaWare 更新的代码、以便您了解一些清晰信息。

    //由于 TM4C129x 勘误项 sysctl#22,SYSCTL_CFG_VCO_xxx 配置
    //具有误导性的*names*,因为 VCO 不在
    //规定的频率下运行。 为了修改这一点,正在使用新的*name*定义,
    //但是寄存器配置保持不变。
    //为了与从
    //旧版本 TivaWare 移植的代码兼容,将保留旧的定义。
    #define SYSCTL_CFG_VCO_480 0xF1000000 // VCO 为480MHz -传统
    //不起作用@ 480,使用
    // SYSCTL_CFG_VCO_240而
    不是#define SYSCTL_CFG_VCO_320 0xF0000000 // VCO 为320MHz -传统
    //不起作用@ 320,使用
    // SYSCTL_CFG_VCO_160改为
    #define SYSCTL_CFG_VCO_240 0xF1000000 // VCO 为240MHz
    #define SYSCTL_CFG_VCO_160 0xF0000000 // VCO 为160MHz 

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

    很难相信 CPU 时钟仍然是120MHz、而不是降级到60MHz。 然而、除非 CPU 被超频240Mhz、否则 SysCtlClockFreqSet()仍然返回120MHz、这在 VCO 为240MHz 时是有问题的。 速度折衷具有我们必须意识到的影响。  

    逻辑告诉我们、如果 VCO 如系统时钟树图中所示发生变化、CPU 时钟频率不能相同。

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

    您好 BP101、

     SysCtlClockFreqSet 函数已更新、因此即使使用较低的 VCO、系统时钟仍以120MHz 的频率运行。 这种情况并未改变、因此如前所述、只有采样频率最高的 ADC 模块甚至需要对其处理方式进行任何调整。

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

    [引用 USER="Ralph Jacobi]USB 不受480与240 MHz 之间的差异的影响、但在理论上、如果您想使用320 MHz 的 USB、则可能是因为320 MHz 是不可能的、因此它将是160 MHz、并且无法分频到60 MHz。 我没有听说过 PWM 受到这种影响。

    CPU PWM USB 似乎都受240MHz 系统 VCO 时钟的影响。 已确认、在480MHz 下正常工作的两个 MCU 中、更改240MHz 的 VCO 分频值后、USB 将不会枚举。

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

    您好 BP101、

    我不知道在哪里混合了 API、但在 VCO 以240MHz 运行的情况下、USB 与 TivaWare 2.1.4.178完美配合(而定义名称错误地宣称它处于480MHz)。

    将任何未修改的 TivaWare 示例加载到 LaunchPad 中并亲自查看。

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

    [引用用户="Ralph Jacobi"] SysCtlClockFreqSet 函数已更新,因此即使使用较低的 VCO,系统时钟仍以120MHz 的频率运行。[/引用]

    根据图5、CPU USB 和所有外设的时钟速率是如何实现的? USB 不会通过 USB_DEV_BULK_c PLL=480除数8进行枚举、这与之前为定义的一样。 并非每个人都要同时更新 Tivaware 的每个部分、因此这种变化非常不稳定、可能导致比它解决的问题更多。  

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

    好的、我从时钟树中看到、如果 PSYSDIV=2、则 PWM 分频值保持不变、只需为240MHz VCO 更改 USB 分频值。  

    因此、如果 PSYSDIV=2、CPU 时钟60MHz 的频率仍然为120MHz、这是我在 USB 停止枚举时没有看到的情况。

    我将在 CCS 调试中检查 PSYSDIV 值、以确认它确实从4更改为2。

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

    请参阅上述编辑:如果 CPU=120MHz 且 PWM 时钟/2 =60MHz、则 Tivaware v21171 PSYSDIV=4和 v214178 PSYSDIV=2。 v214178清单似乎应指示 PSYSDIV 值已更改为2而不是4。 奇怪的是、没有记录对清单的更改。

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

    [引用用户="Ralph Jacobi]SysCtlClockFreqSet 函数已更新、因此即使使用较低的 VCO、系统时钟仍以120MHz 的频率运行。 [/报价]

    实际上、V214178确实将主时钟树 PSYSDIV 设置从 N+3=4更改为 N+1=2。 PSYSDIV 的值更改为2 CPU=120MHz 并且只能改变 USB/ADC 分频值、PWM 时钟分频值保持不变。

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

    您好、Ralph、

    很抱歉、我不得不将 PSYSDIV 放回 N3+1、因为 ADC 与 PWM 模块稍微不同步。 请注意、在所有这个论坛讨论中值得注意的是 SysCtlClockFreqSet() v21171没有等待 MOSC PUP 中断、正如我在另一篇文章中报告的那样、没有这样的延迟。 仅这一个原因可能是 PLL 无法锁定且 PSYSDIV 默认为 N1+1的 POR 设置的原因。  建议不要一次而是两次测试 PLL 锁定位、而是按递减顺序测试。 回返(0)非常好、经过深思熟虑、添加了内容、但在本例中强制 PSYSDIV=2的作用不大。  

    另一件事是-1个 Tivaware ADCClockConfigSet()减去 ADC 分频 值,7个分频值变为6,产生34.28MHz 采样时钟。 奇怪的是、它的工作条件是 VCO=240MHz ADC 分频15个编程的16MHz 采样时钟、理想情况下需要2MSPS 速率。   

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

    您好 BP101、

    好的、PWM 时钟分频值不变就是它不受影响的原因、现在我也记得了。

    关于 ADC、请查看以下有关如何获得2MSPS 全速的文章 :https://e2e.ti.com/support/microcontrollers/other/f/908/p/690227/2545036#2545036

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

    再看一下、320VCO/5n-1 (隐藏减法) 不会生成32MHz ADC 时钟、 而是 仅生成5个( 64Mhz)、然后 n-1 = 80MHz。 像我 通过 CCS 调试那样检查 ADCCC 寄存器。 您会看到 、作为  除数输入的值不是 寄存器中存储的值。 如果我们对寄存器除数值进行数学运算、则采样频率  远高于预期。

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

    您好 BP101、

    这也是我们为2.2.0更新#define 的原因... 变量320VCO、但它实际上以160MHz 运行。 因此、将其除以5将得到32MHz。

    此外、TivaWare API 旨在简化输入。 为 ADCClockConfigSet 提供所需的分频器编号。 因此、如果您希望除以5、这就是 您在 ADCClockConfigSet 中输入的值、如 Bob 所示。 您看到 n-1的原因是器件除以高于输入的值1。 因此、如果您将5写入寄存器、它将被6分频。 您可以在数据表的第1160页看到这一点。 因此、为了确保它除以5、我们需要在 寄存器写入之前从 ADCClockConfigSet 的输入值中减去1。 因此、当 ADCClockConfigSet 的 ui32ClockDiv 值中输入5时、ADCCC 寄存器会设置为0x04值、该值映射为 ADC 的除以5。

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

    您好、Ralph、

     因此、如果 Tivaware 在 REG 66 N+1之前减去 N-1并且 CCS 调试小于我们输入的值、那么 REG 66显示/N+1页1158时会非常困惑最终值是什么。

    [引用 USER="Ralph Jacobi"]因此,为了确保它除以5,我们需要在 寄存器写入之前从 ADCClockConfigSet 的输入值中减去1 [/引用]

    但我认为 、当   REG66 将输入除数 N+1添加回 CLKDIV/N+1时、由于 Tivaware 减去 N-1、因此您需要将其设为输入除数 N+1。