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.

[参考译文] TMS320F28035:配置外部振荡器时出现问题

Guru**** 2805425 points

Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1623324/tms320f28035-issue-while-configuring-external-oscillator

器件型号: TMS320F28035
主题: C2000WARE 中讨论的其他器件

您好:

我一直在应用中使用内部振荡器。 我现在正尝试切换到外部晶体振荡器。 我实现了如下所示的代码。

当我第一次刷写程序时,系统会按预期工作 — LED 闪烁、计时器中断每 1ms 执行一次。 但是、有时在闪烁后、LED 不会闪烁、计时器中断不会执行。

在某些情况下:

  • 第一个闪存工作正常。
  • 之后 下电上电、LED 不闪烁。
  • 再次对程序进行 Re 刷写并不总是能解决问题。

系统似乎并非总是切换到外部振荡器或从外部振荡器正常运行。

您能否提出导致此行为的原因?

我还尝试设置 INTOSC1OFF = 1、但行为保持不变。

 

下面是用于选择外部振荡器的代码、我也附录了原理图

 

静态 void CPU_ExtOsclSel (void)

 /* TI — 推荐的顺序

 * XTAL -开启 — 主时钟

 * INTOSC1 -打开 — 备份/调试器安全

 * INTOSC2 - OFF — 未使用*/

 

 EALLOW;

 SysCtrlRegs.CLKCTL.BIT.XTALOSCOFF = 0;//外部晶振开启 (X1/X2 上的 XTALOSC)

 EDIS;

 

 DELAY_US (10000);//让晶体稳定 (~10ms)

 

 EALLOW;

 SysCtrlRegs.CLKCTL.BIT.XCLKINOFF = 1;//关闭 XCLKIN(未使用)

 SysCtrlRegs.CLKCTL.BIT.OSCCLKSRC2SEL = 0;// 0 = X1/X2 上的外部晶体

 

 SysCtrlRegs.CLKCTL.BIT.OSCCLKSRC2SEL = 0;//选择了外部振荡器

 SysCtrlRegs.CLKCTL.BIT.OSCCLKSRCSEL = 1;// 1 =使用源 2 (XTAL 或 INTOSC2)

 

 SysCtrlRegs.CLKCTL.BIT.WDCLKSRCSEL = 0;// WDT 时钟源= INTOSC1

 SysCtrlRegs.CLKCTL.BIT.INTOSC2OFF = 1;//关闭 INTOSC2

 SysCtrlRegs.CLKCTL.BIT.INTOSC1OFF = 0;//使 INTOSC1 保持开启作为备份

 EDIS;

}

 

image.png

如果能就造成间歇性行为的原因提供任何指导、我们将不胜感激。

 

谢谢你。

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

    您好:

    是否使用 20MHz 晶体的 ESR?  对于该振荡器设计、EST 应约为 45 欧姆以确保正确启动

    此致、

    Jooseph

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

    Joseph、

    使用的晶体是 ECS-200-CDX-0998。  

    问题似乎是与延迟有关。 延迟函数  DELAY_US (10000); 使用 SYSCLOCK。 如果我将此延迟替换为手动延迟、则我的程序正在运行

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

    您好:

    ECS-200-CDX-0998 的 ESR 为 50 欧姆、并且在晶体电路振荡器的范围内。  是的、您需要让晶体留出一些延迟、以便克服 ESR 并让振荡器电路正确启动。

    此致、

    Joseph

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

    在此之前、我包含了足够的延迟、但我使用了 delay_US () 这也在 TI 示例函数中使用 XtalOscSel () 。 该延迟功能似乎是导致该问题的原因。 在我将问题替换为使用实施的延迟后、问题得到了解决 运行频率

    TI 示例在我的案例中无法正常工作。 我想了解如何操作 delay_US () TI 示例中使用了多个滤波器 SYSCLK 稳定了。 我指的是 XtalOscSel DSP2803x_SysCtrl.c 中的函数、位于:

    c2000\C2000Ware_5_02_00_00\device_support\f2803x\common\source

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

    感谢您提供详细信息。  能否在 C2000Ware 版本中提供 delay_US () 宏?  只是想检查这个是否发生了更改。

    此致、

    Joseph

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

    delay_us() 应该在汇编代码中调用减法循环、在每个循环中、接受特定数量的循环计数+开销、结果乘以系统周期、得到相应的微秒延迟。  此例程在以 usec 为单位引入延迟(而不是用于环路)方面更具确定性。