自己总结一下系统时钟的设置,有哪里不对的,说得不全的,请大家指教啊~~
为什么要设置系统时钟?不是有外部晶振可以给cpu提供工作的频率吗?是这样的,外部晶振提供的频率一般是十几兆,而我们cpu才不同情况下需要的频率不同,一般需要几百兆,而且cpu的工作频率和其他的设备工作频率也不完全一样,例如UART,所以就需要几种不同的频率,FCLK,HCLK,PCLK。
要满足上述的需求,需要通过设置pll来实现(pll分为MPLL、UPLL(主要用于USB),这里讲的都是MPLL),目的是提高时钟频率和经过分频得到不同的频率,例如外部晶振提供的频率只有12M,而你内部需要的时钟频率需要很高,比如是400M,那就需要通过设置pll来提高时钟频率得到FCLK,然后经过分频得到HCLK和PCLK
晶振—》pll—》400M(FCLK)
400M—》HCLK—》PCLK
设定pll分三部分:
1.锁定时间
上电后,cpu是以外部晶振提供的频率来工作,启动MPLL后,经过一个Lock Time,cpu才以一个新的频率(FCLK)去工作,这个Lock Time一般是使用默认值
2.设置pll寄存器
对于MPLLCON 寄存器,[19:12] 为MDIV ,[9:4] 为PDIV ,[1:0] 为SDIV 。有如下计算公式:
MPLL(FCLK) = (m * Fin)/(p * 2^s)
其中: m = MDIV + 8, p = PDIV + 2 ,s=SDIV
3.设置分频寄存器
就是设置FCLK、HCLK和PCLK之间的比例关系
这样就OK了