所以在此之前,我只使用简单的 8 位 Atmel MCU,我在我的开发板原理图中意识到它只有一个 12Mhz 晶体,但 MCU 的工作频率高达 100MHz。(我认为默认是80MHz。我只是为了好玩才把它调高一次。这只是代码中的一个简单的行。)
它是如何做到的?例如,为什么 Atmega328 以使用的晶体速度运行?
所以在此之前,我只使用简单的 8 位 Atmel MCU,我在我的开发板原理图中意识到它只有一个 12Mhz 晶体,但 MCU 的工作频率高达 100MHz。(我认为默认是80MHz。我只是为了好玩才把它调高一次。这只是代码中的一个简单的行。)
它是如何做到的?例如,为什么 Atmega328 以使用的晶体速度运行?
这与核心是 ARM 处理器没有任何关系。这是关于时钟电路如何工作的:
在微控制器、射频芯片、音频芯片等许多系统中,您需要生成一个更快的时钟,该时钟是某个参考时钟(例如,外部晶体)的精确倍数。
您可以通过使用压控振荡器 (VCO) 来实现这一点,您可以通过输入或降低控制电压来调整频率。
现在,只需设置任何控制电压,您就可以使其以大致在正确“范围”内的频率振荡,但不是以输入频率的精确倍数。尤其是,VCO 可能会有点漂移,因此频率也会不断地“漂移”到各处。您需要通过将其与参考振荡器进行比较来控制该振荡器。
做到这一点的方法是采用锁相环。这个想法很简单:
上面是一个控制回路,锁定在相位 - 因此得名。
对于具有大量外围设备并因此受益于内部具有多个时钟的“丰富”微控制器,通常至少具有 1 个 PLL。ATMega328 在这方面有点奇怪:它是一个相对耗电、外围设备相对丰富的微控制器,但仍然没有 PLL。
一些设备中有一个 PLL,可以将晶体频率倍增到更高的频率。ATMega328 没有 PLL,它直接使用晶体。