Other Parts Discussed in Thread: C2000WARE
器件型号: TMS320F28P650SK
主题: C2000WARE 中讨论的其他器件
尊敬的 Champs:
我向我的客户询问这个问题、现在他们在开发时遇到了以下问题。 我们使用位域示例代码。
为什么在 main() 运行之前 SYSPLLMULT 寄存器有值? 我在 TRM 中看到、它们的复位值为 0。 这些值何时写入寄存器? 下面是我的 Launchpad 显示内容。 在客户电路板上读取的寄存器值为 IMULT=40、REFDIV=1、ODIV=2、这与使用 INTOSC 时的配置相同。

2.因为 SYSPLLMULT 寄存器在 PLL 由以下代码初始化之前具有一个值

、并且客户使用外部 10MHz XTAL、如果客户使用与内部振荡器相同的 IMULT、ODIV 和 REFDIV、则会导致代码无法将振荡器源更新到 XTAL。
这是因为在 InitSysPll () 中有如下判断:

如果需要在 if() 内检查的所有值与客户当前设置的值相同、则 if() 内的内容将被跳过、而 els() 将被直接执行。 但切换 clock_source 代码位于 if() 内部。 这会导致 CLOCK_SOURCE 开关失败。

3.为避免上述问题、客户尝试更改了 IMULT=60、REFDIV=1、ODIV=3。 客户的 XTAL 为 10MHz。 客户的配置似乎符合要求、但客户发现、如果他使用此配置、其代码输出将无法控制。

但是、如果他改回 IMULT=40、REFDIV=1、ODIV=2、然后手动添加 SysXtalOscSel () 以将时钟源切换到 XTAL、则问题将消失。
客户想知道为什么 IMULT=60、REFDIV=1、ODIV=3 会有问题。
您能帮助检查一下吗? 谢谢!
此致、
Julia