您好!
如何从主振荡器故障中恢复?
来自 TRM 的操作(章节"从振荡器故障中恢复")不起作用:GLBSTAT.0在振荡器故障后置1、在移除故障条件后不会复位为零。
一些代码:
静态 bool MainOscillatorFled()
{
const uint32_t* GLBSSTAT_address = reinterpret_cast (0xFFFFFFECUL);
返回(* GLBSSTAT_ADDRESS)和1;
}
静态空 switchToHfLpo()
{
systemREG1->GHVSRC =(UINT32)((UINT32) SYS_LPO_HIGH << 24U)
|(UINT32)(((UINT32) SYS_LPO_HIGH << 16U)
|(UINT32)(((UINT32) SYS_LPO_HIGH << 0U);
systemREG1->VCLKASRC =(uint32)((uint32) SYS_LPO_HIGH << 0U);
systemREG1->RCLKSRC &=~0x0F;
systemREG1->RCLKSRC |= SYS_LPO_HIGH;
}
静态空不可启用主振荡器()
{
systemREG1->CSDISSET = 0x00000001U;
while ((systemREG1->CSDIS & 0x01U)!= 0x01U){
;
}
}
静态空 enableMainOscillator()
{
systemREG1->CSDISCLR = 0x00000001U;
}
静态空 clearOscfail()
{
/*清除全局状态寄存器*/
systemREG1->GBLSTAT = 0x1U;
}
静态空开关到主振荡器()
{
systemREG1->GHVSRC =(UINT32)((UINT32) SYS_OSC << 24U)
|(UINT32)((UINT32) SYS_OSC << 16U)
|(UINT32)((UINT32) SYS_OSC << 0U);
}
void check()
{
if (isMainOscillatorFled()){
switchToHfLpo();
disableMainOscillator();
enableMainOscillator();
clearOscfail();
SwitchToMainOscillator();
}
}
我不使用 PLL1或 PLL2。 主振荡器频率为12MHz。
函数 clearOscfail()不会复位 GLBSTAT.0,即使主振荡器在删除失败条件(我的示例中为振荡器短路)后仍在工作。 如何复位 GLBSTAT.0?
我出了什么问题?
此致、
维他利