//CLK_Init - Initialize Core Clock to 40MHz, Bus Clock to 20MHz
void Clk_Init(void)
{
ICS_C1|=ICS_C1_IRCLKEN_MASK; /* Enable the internal reference clock*/
ICS_C3= 0x90; /* Reference clock frequency = 31.25 kHz*/
while(!(ICS_S & ICS_S_LOCK_MASK)); /* Wait for PLL, running at 40 MHz (1280 * 31.25 kHz) */
ICS_C2|=ICS_C2_BDIV(1); /* BDIV=2, Bus clock = 20 MHz*/
ICS_S |= ICS_S_LOLS_MASK; /* Clear Loss of lock sticky bit */
}
对ICS_C3 = 0x90表示不理解为什么要这么做。
手册上对于ICS_C3寄存器的描述为:
慢速内部基准时钟调整设置
通过控制内部基准时钟周期来控制慢速内部基准时钟频率。这些位采用二进制加权。换言之,位 1 的调整量
是位 0 的两倍。提高 SCTRIM 的二进制值会加长周期,降低该值会缩短周期。 还有一个精密调整位
ICS_C4[SCFTRIM]。
除了 Debug 模式外,ICS_C3 在复位后会自动载入工厂校准值。这个值是在芯片生产出厂前校准的,以使内
部时钟满足 fint_ft 数据手册的描述。用户可以在 fint_t 范围内使用自己的校正值,这个值需要被写入 Flash 的
保留空间 0x0000_03FF 中,并且在初始化代码中复制到 ICS_C3 寄存器。
20.4.5 内部参考时钟
ICS_C1[IRCLKEN]置位时,内部基准时钟信号显示为 ICSIRCLK,它可以用作附加
时钟源。要重新设定 ICSIRCLK 频率,请将新值写入 ICS_C3[SCTRIM]位来调整内
部基准时钟的周期:
• 如果写入更大的值,将减慢 ICSIRCLK 频率。
• 将较小的值写入 ICS_C3 寄存器会提高 ICSIRCLK 频率。
如果 ICS 处于 FLL 内部使用(FEI)模式、 FLL 内部旁通(FBI)模式或 FLL 内部旁通低
功耗(FBILP)模式,则 TRIM 位会影响 ICSOUT 频率。
在调整 ICSIRCLK 之前,写入较低的总线分频(ICS_C2[BDIV])系数可能导致
ICSOUT频率超过最大芯片级频率,违反芯片级时钟的时序规范。
如果 ICS_C1[IREFSTEN]置位且 1b 写入 ICS_C1[IRCLKEN],那么内部基准时钟在
Stop 模式下继续运行,以便能在退出 Stop 模式时快速恢复。
所有 MCU 器件都在保留的存储器区间写入了出厂校正值。该值在任何的复位初始
化期间被复制到 ICS_C3 寄存器和 ICS_C4[SCFTRIM]。为了提高精度,在应用中可
以重新校准内部振荡器并相应地设置 ICS_C4[SCFTRIM]。
同时,我也在坛里翻到了以前@andyliu的帖子以及阅读过帖子回复中的两一个链接,但是依然没有理解这个寄存器的具体意思 |