void clock(void)
{
SLEEPCMD &= ~0x04; // 启动所有晶振
while (!(SLEEPSTA & 0x40)); // 等待晶振稳定
CLKCONCMD = (CLKCONCMD & 0x80) | 0x49; //使用16Mhz晶振作为主时钟
while ((CLKCONSTA & ~0x80) != 0x49 ); // 等待主时钟切换到16Mhz
CLKCONCMD = (CLKCONCMD & ~0x80) ; // 使用外部32Khz作为休眠时钟
while ( (CLKCONSTA & 0x80) != 0 ); // 等待睡眠时钟切换到32Khz晶振
CLKCONCMD = (CLKCONCMD & 0x80) ; // 使用32Mhz时钟作为主时钟
while ( (CLKCONSTA & ~0x80) != 0 ); // 等待主时钟切换到32Mhz
SLEEPCMD |= 0x04; // 关闭未使用的晶振
}
{
SLEEPCMD &= ~0x04; // 启动所有晶振
while (!(SLEEPSTA & 0x40)); // 等待晶振稳定
CLKCONCMD = (CLKCONCMD & 0x80) | 0x49; //使用16Mhz晶振作为主时钟
while ((CLKCONSTA & ~0x80) != 0x49 ); // 等待主时钟切换到16Mhz
CLKCONCMD = (CLKCONCMD & ~0x80) ; // 使用外部32Khz作为休眠时钟
while ( (CLKCONSTA & 0x80) != 0 ); // 等待睡眠时钟切换到32Khz晶振
CLKCONCMD = (CLKCONCMD & 0x80) ; // 使用32Mhz时钟作为主时钟
while ( (CLKCONSTA & ~0x80) != 0 ); // 等待主时钟切换到32Mhz
SLEEPCMD |= 0x04; // 关闭未使用的晶振
}
本文介绍了一个具体的嵌入式系统中时钟配置过程,包括启动晶振、等待晶振稳定、设置不同频率的主时钟及休眠时钟等步骤。通过逐段解析代码,读者可以了解到如何在嵌入式设备上进行精确的时钟管理。
538

被折叠的 条评论
为什么被折叠?



