全部学习笔记汇总: ​​GitHub - GreyZhang/g_spc560b64: Learn and hack powerpc MCU SPC560B. Happy hacking!​

1179_SPC560B60L7_FMPLL与系统时钟_系统时钟

    以前没有注意过,这个MCU的输入晶振的可选范围跟最初结果的MPC5643L等不同,选择的范围是低且窄的一个范围。同时,这个提示信息似乎是说这个时钟还可以更高,只是产品的验证并没有关注过这样的配置下的效果。

1179_SPC560B60L7_FMPLL与系统时钟_嵌入式_02

    这个是对SPC560B64XX MCU中FMPLL的特性的简单介绍,几个知识点如下:

        1. 输入的时钟信号4~16MHz,前面已经看过了。

        2. VCO的范围是256MHz~512Mhz,这个在软件配置的时候需要考虑参考这个约束条件。

        3. FD的修改不用重新锁定FMPLL。--> 这意思是否是说可以设置一个时钟之后,便捷调整为其他的主频?

        4. 频率的调制可以通过软件或者三角波。

        5. 调制深度的配置:有中央散频以及向下散频等不同的模式。

        6. 自锁定模式运行。

        7. 4种模式。

    系统时钟通常会选用FMPLL,因为这样可以让MCU获得更高的系统时钟主频从而获得更好的性能。那么,系统时钟如何使用FMPLL呢?

1179_SPC560B60L7_FMPLL与系统时钟_PowerPC_03

    从上面的文档信息看,系统时钟主要是来自于三个来源:外部晶振、FMPLL、内部的16M RC时钟。

1179_SPC560B60L7_FMPLL与系统时钟_晶振_04

    这是关于ME_MC寄存器的描述,最后一部分是系统时钟的配置选择。存在很多种选择的模式的配置,大概分为三类。第一类是有效时钟选择、第二类是保留位、第三类只有一个那就是禁用系统时钟。对软件运行来说,有效的是第一类,一共存在5种配置,跟前面的3个时钟源不太一样。为什么呢?仔细分析也很容易明白,FMPLL其实已经是分频之后的效果了,而另外两种各有分频以及不分频两种选择,这样就组合出来5种选择。对于软件开发来说,比较有用的应该是第5种,数值为4的那个配置。

1179_SPC560B60L7_FMPLL与系统时钟_晶振_05

    这是一个选择系统时钟的配置例子,这里其实就是给RUN0模式选择了FMPLL作为系统时钟。

1179_SPC560B60L7_FMPLL与系统时钟_系统时钟_06

    FMPLL的工作需要有一个时钟源输入,而这个时钟源输入是不需要选择的,默认会是外部竞争。但是在前面的MExxMC寄存器配置的时候,应该把与外部晶振使能相关的寄存器设置为switch on。

1179_SPC560B60L7_FMPLL与系统时钟_嵌入式_07

    这样,一个FMPLL的时钟配置就可以按照这个公式来做一个计算配置。比如,clkin是12M,时钟配置为40M可以选择的参数。