在线时间7266 小时
UID3426478
注册时间2017-9-25
NXP金币5384
TA的每日心情 | 擦汗 昨天 15:50 |
---|
签到天数: 1874 天 连续签到: 5 天 [LV.Master]伴坛终老
超级版主
 
- 积分
- 112714
- 最后登录
- 2025-8-31
|
本帖最后由 stm1024 于 2019-2-18 17:33 编辑
概述
通过手册可知,LPC1768的时钟树如下图:
LPC1768包含三个独立的振荡器,即主振荡器,内部RC振荡器和RTC振荡器。
主振荡器工作在1-25MHz,可作为CPU的时钟源,而且可以选择是否采用PLL0倍频。
内部RC振荡器:用作看门狗的时钟源,也可以通过PLL0倍频从而作为CPU的时钟源,芯片在上电和复位的时候就是使用的这个时钟源,由于PLL没有配置,时钟只有4MHz。
RTC振荡器:可提供1Hz给RTC,或者32.768KHz给CPU,看门狗,但是如果PLL0为USB提供时钟,则不能使用这个作为时钟源。
配置
通常,选用IRC作为时钟源,但是需要配置一下,先丢代码,然后分析:
- void Chip_SetupIrcClocking(void)
- {
- /* Disconnect the Main PLL if it is connected already */
- if (Chip_Clock_IsMainPLLConnected()) {
- Chip_Clock_DisablePLL(SYSCTL_MAIN_PLL, SYSCTL_PLL_CONNECT);
- }
- /* Disable the PLL if it is enabled */
- if (Chip_Clock_IsMainPLLEnabled()) {
- Chip_Clock_DisablePLL(SYSCTL_MAIN_PLL, SYSCTL_PLL_ENABLE);
- }
- Chip_Clock_SetCPUClockDiv(0);
- Chip_Clock_SetMainPLLSource(SYSCTL_PLLCLKSRC_IRC);
- Chip_Clock_SetupPLL(SYSCTL_MAIN_PLL, 44, 0);
- Chip_Clock_EnablePLL(SYSCTL_MAIN_PLL, SYSCTL_PLL_ENABLE);
- Chip_Clock_SetCPUClockDiv(2);
- while (!Chip_Clock_IsMainPLLLocked()) {} /* Wait for the PLL to Lock */
- Chip_Clock_EnablePLL(SYSCTL_MAIN_PLL, SYSCTL_PLL_CONNECT);
- }
复制代码 拎重点:
前面两个是安全检查,如果连接了PLL就先脱开PLL。
Chip_Clock_SetCPUClockDiv(0);
配置CCLKSEL,CCLKSEL=0时,pllclk除1。
Chip_Clock_SetMainPLLSource(SYSCTL_PLLCLKSRC_IRC);
配置时钟源为IRC
Chip_Clock_SetupPLL(SYSCTL_MAIN_PLL, 44, 0);
通过PLL倍频后时钟频率,配置详见寄存器PLL0CFG,计算公式为:
FCCO = (2 *M*FIN) / N
因此:FCCO = (2 *(44+1) * 4MHz) / (0+1) = 360MHz
Chip_Clock_EnablePLL(SYSCTL_MAIN_PLL, SYSCTL_PLL_ENABLE);
打开PLL。
Chip_Clock_SetCPUClockDiv(2);
设置CPU的分频,360/(1+2)=120MHz
|
|