首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将HFCLK改为由我的微处理器上的低频振荡器控制?

如何将HFCLK改为由我的微处理器上的低频振荡器控制?
EN

Stack Overflow用户
提问于 2014-12-18 11:00:50
回答 1查看 369关注 0票数 1

我正在使用由能源微制造的EFM32G222F128壁虎微孔器。我试图使这个芯片的电流消耗尽可能低,因此我想把核心时钟转换成低频RC振荡器(LFRCO),而不是高频振荡器。

我知道核心时钟是由高频时钟(HFCLK)驱动的,但这可以由高频振荡器或LF振荡器控制。默认情况下,它被设置为由HFRCO在复位/电源上控制,其频率为14 1MHz (同样在默认情况下,但这可以在1 1MHz 28 1MHz之间),我的问题是频率越高,芯片的电流消耗越高,所以我想将核心时钟改为这个频率较低的振荡器,即32.768KHz -低得多。

机上有两个振荡器-- HFRCO和LFRCO --所以我没有可用的组件不是问题,我只是不知道我现在的代码为什么不能工作。下面是代码,我将在下面解释:

代码语言:javascript
复制
int main(void){ 

    /* Chip errata */
    CHIP_Init();

    CMU->OSCENCMD = (1 << 6);          // Enable LFRCO oscillator
    while(!(CMU->STATUS & (1 << 7)));  // Wait for oscillator to stabilize

    EMU_UpdateOscConfig();

    CMU->CMD = (3 << 0);               // Set LFRCO as HF core clock **PROBLEM**

    CMU->OSCENCMD = (1 << 1);          // Disable HFRCO
}

正如您所看到的,在问题出现之前并没有太多的代码,这可能是问题的一部分,但我认为情况并非如此。我希望你可以从评论中看到,所有这些都是用事先知情同意或微控制器对芯片进行初始化,然后我使振荡器成为我的核心时钟(LFRCO),然后等待它稳定/准备就绪,然后继续前进。然后我更新处理器,让它知道时钟的变化,然后尝试将HFCLK更改为LFRCO。这是程序放弃生命并停止的地方,它在这一行代码上等待大约1分30秒之前,我猜想,它超时并重置芯片,因为所有寄存器复位为零。

我正在使用C on set编程,这是为这些芯片设计的,它附带了许多预先制作好的库,我也尝试过使用这些库,但它们也不起作用,所以我认为在尝试设置它之前,我忽略了一些我需要做的事情。我已经浏览过参考手册以及振荡器/时钟上的应用说明,但是我看不到我遗漏的任何东西。

我列了一张清单,列出了在设置它之前所做的一切,但仍然什么也没有做:

  • 我启用振荡器
  • 我确保它已经准备好使用了
  • 我试过校准它(不应该像在生产中那样去做,但我还是试过了)
  • 我更新处理器
  • 然后它就坠毁了。

我已经看了所有的寄存器,当我逐步通过代码和一切似乎是它应该的,振荡器是启用的,我可以把它设置为其他东西的来源,所以它肯定会工作,只是不是为了我想要它。

我的想法已经不多了,我希望在过去有人会有类似的问题,并能对这种情况有所了解。

EN

回答 1

Stack Overflow用户

发布于 2014-12-18 19:14:10

既然您已经将EFM32库与EMU_UpdateOscConfig()一起使用了,我不知道为什么您不简单地使用CMU_ClockSelectSet( cmuClock_CORE, cmuSelect_LFRCO )?我建议,如果您完全使用这个库,那么您可以将它用于任何东西,而不是将库的使用与直接注册访问混合使用。

看看源代码 for CMU_ClockSelectSet(),它做了许多您没有做或正在按不同顺序做的事情。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27544986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档