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.
在将 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
您好 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、
很抱歉、我不得不将 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。