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.

[参考译文] TMS320F2800157:将 INTOSC2配置为 TIMER2的源

Guru**** 2538955 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1337139/tms320f2800157-configuring-intosc2-to-be-source-for-timer2

器件型号:TMS320F2800157
主题中讨论的其他器件:SysConfig

高支持、  

我指定的 Focus 客户备注:

我们没有使用 SysConfig、我将 TMR2CLKCTL 设置为正确的设置(使用对 CPUTimer_selectClockSource 的 DriverLib 调用、并具有 CPUTIMER_CLOCK_SOURCE_INTOSC2的时钟源)。

启动后、我们将系统设置为使用 INTOSC1作为 PLL 的时钟源。 我们使用对 SysCtl_setClock 的调用来生成120mH 的 SYSCLK。 任何一个问题都没有问题。

在代码的稍后部分、我们设置 TIMER0 (使用 SYSCLK 作为源)以生成1kHz 节拍。 任何一个问题都没有问题。

如果我以相同的方式设置 TIMER2 (SYSCLK 作为源)、计时器输出是正确的。  

当我切换 TIMER2使用 INTOSC1作为其时钟源(CPUTimer_selectClockSource 具有 CPUTIME_CLOCK_SOURCE_INTOSC1的时钟源)并使用计算周期10000时、一切都正常–我得到1kHz 节拍、计时器周期为1ms。  

当我将代码更改为使用 INTOSC2作为 TIMER2源时、情况会变得很奇怪。 与使用 INTOSC1时的设置相同。 唯一的变化是在调用 CPUTimer_selectClockSource 时–我将 CPUTIMER_CLOCK_SOURCE_INTOSC1更改为 CPUTIMER_CLOCK_SOURCE_INTOSC2。 使用相同的周期计数、TIMER2每450ms 触发一次。 一个小数学运算、我得出了一个新的"周期计数"、即22。 当我使用该值而不是计算值(10000)时、我可以获得所需的1ms 周期/1kHz 节拍。

----------------

你的初始回复让我想、所以我在操作过程中暂停系统、并确认 TMR2CLKCTL.TMR2CLKSRCSEL 为2、因此调用 CPUTimer_selectClockSource 似乎会执行我的预期。

BTW–我还修改了 F2800157的一个简单示例应用(timer_ex1_cputimer)、以类似的方式配置计时器并获得相同的结果、因此我相当有信心、这不是我们在这里所做的。 我认为、我们很可能没有在做什么、但需要做些什么。

我可以离线从客户那里获取一些代码、并将其发送给您进行评估、但希望首先对您的完整性进行检查。

谢谢!

此致、  

布莱克

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

    Blake 先生、

    查看下面的、看看这是不是问题所在: 从 F280015 TRM的第137页(下面也是它的屏幕截图) (示例中有一个小拼写错误、应该只是说 SYSCLK = 100MHz) 客户可以替换其 SYSCLK 值以获得正确的周期计数延迟。  我认为 DriverLIB 应该考虑这个问题、但如果客户可以检查对 CPUTIMER2CTL 进行修改的函数调用以验证情况是否属实、或者他们需要手动插入延迟。

    我还看到了 SYSCLK = 120MHz 的位置 、在上面、我假设即使客户更改定时器的时钟源也没有改变;TRM 中也有此限制(来自与上面相同的链接的第117页)

    最后一点有点切向、解决这个问题后、我们可能需要讨论 SYSCLK 等的最终时钟源。  BOOT 的默认选项是 INTOSC2;对于缺少时钟操作的许多假设都是在出现问题时切换到 INTOSC1。  如果 INTOSC1用作系统的主时钟、我不确定这些设置是否有效、例如如果 INTOSC1缺失、则无法切换到自身等。  在我们解决上述问题后、我们可以再次深入探讨这一点;但我们想将其作为最佳实践等提及。

    此致!

    马修

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

    Matthew、您好!  

    我被淘汰了...这是一个经过仔细研究且能快速提供详尽答案的解决方案。  我真的很感激您的帮助。

    我将延迟"这已解决我的问题"、直到收到客户的回复(应该是今天或最晚星期一)。

    祝您周末愉快!

    此致、Blake

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

    Matthew、您好!  

    客户表示试一下—反馈如下:

    如果我正确阅读上述内容、则表示在对表4-18中指定的寄存器的任何访问之间都需要有(3 *(120 / 10))+ 9 = 45个 SYSCLK 暂停。  

    我进入了 DriverLib 代码、并在函数 CPUTimer_selectClockSource 中检查了延迟。 那里没有延迟、因此我添加了     ASM (" RPT #45 || NOP")   每次访问 TMR2CLKCTL 寄存器后。

     唉,没有变化。

    以下观察结果可能会有所帮助。

    如果我在启动代码中注释掉对 SysCtl_setClock 的调用、并使用 XCLKOUT 引脚 GPIO18和 XCLKOUT 分频值8、我可以确认 SysClk 是25 MHz、INTOSC1是25 MHz。 但是、当我将 INTOSC2路由到 XCLKOUT 时、我在示波器上看到的是坚果。 大量抖动、而且频率与10 MHz 相差甚远。

    当我将我们的 DEVICE_setClock_CFG 更改为使用 INTOSC2而不是 INTOSC1时、系统在 SysCtl_setClock 中失去了、位于第522行上的 ESTOP0。

    如果我将 DEVICE_setClock_CFG 切换回使用 INTOSC1、我可以确认(在 XCLKOUT 上) INTOSC1为10MHz。 但是、如果我将 XCLKOUT 更改为 INTOSC2、同样会产生大量抖动、且频率在10 MHz 范围内不存在。

    我将在了解详情后向您提供最新信息。

    感谢您的帮助!  周末愉快!

    布莱克

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

    Blake 先生、

    我有点落后了、请再给我一天时间、看看我能否把东西拼在一起。

    此致!

    马修

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

    好的、Matt。  谢谢!

    布莱克

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

    您好、Matt、

    客户说明:

    ----------------

    为了澄清我对 TIMER2+INTOSC2的期望——只要我能记录它为什么以这种方式工作,我们就能用它的工作方式生活。 另一种方法(也是理想的解决方案)是确定如何使其按照参考手册中指示的方式工作。

    ----------------

    此致、

    布莱克

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

    我将在进行一些离线讨论/调试后回复主线程。  涉及的材料是该器件的早期修订版0版本;INTOSC2存在一些问题。  当我们将该器件投入生产时、这些问题已经/解决、而当前的器件没有问题。   

    此致!

    马修