我正在使用由能源微制造的EFM32G222F128壁虎微孔器。我试图使这个芯片的电流消耗尽可能低,因此我想把核心时钟转换成低频RC振荡器(LFRCO),而不是高频振荡器。
我知道核心时钟是由高频时钟(HFCLK)驱动的,但这可以由高频振荡器或LF振荡器控制。默认情况下,它被设置为由HFRCO在复位/电源上控制,其频率为14 1MHz (同样在默认情况下,但这可以在1 1MHz 28 1MHz之间),我的问题是频率越高,芯片的电流消耗越高,所以我想将核心时钟改为这个频率较低的振荡器,即32.768KHz -低得多。
机上有两个振荡器-- HFRCO和LFRCO --所以我没有可用的组件不是问题,我只是不知道我现在的代码为什么不能工作。下面是代码,我将在下面解释:
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编程,这是为这些芯片设计的,它附带了许多预先制作好的库,我也尝试过使用这些库,但它们也不起作用,所以我认为在尝试设置它之前,我忽略了一些我需要做的事情。我已经浏览过参考手册以及振荡器/时钟上的应用说明,但是我看不到我遗漏的任何东西。
我列了一张清单,列出了在设置它之前所做的一切,但仍然什么也没有做:
我已经看了所有的寄存器,当我逐步通过代码和一切似乎是它应该的,振荡器是启用的,我可以把它设置为其他东西的来源,所以它肯定会工作,只是不是为了我想要它。
我的想法已经不多了,我希望在过去有人会有类似的问题,并能对这种情况有所了解。
发布于 2014-12-18 19:14:10
既然您已经将EFM32库与EMU_UpdateOscConfig()一起使用了,我不知道为什么您不简单地使用CMU_ClockSelectSet( cmuClock_CORE, cmuSelect_LFRCO )?我建议,如果您完全使用这个库,那么您可以将它用于任何东西,而不是将库的使用与直接注册访问混合使用。
看看源代码 for CMU_ClockSelectSet(),它做了许多您没有做或正在按不同顺序做的事情。
https://stackoverflow.com/questions/27544986
复制相似问题