LPC2478时钟模块详解
生活随笔
收集整理的這篇文章主要介紹了
LPC2478时钟模块详解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
時鐘框圖如上圖,系統時鐘來源分別是內部4M的RC振蕩器和外置晶振,RTC模塊在某些情況下也可以作為主時鐘,經過系統時鐘選擇s\de時鐘需要經過PLL倍頻(或者不倍頻),處理過的PLL輸出USB時鐘分頻器和CPU時鐘分頻器,成為FCCLK 和FUSBCLK,FCCLK供給系統內核,以太網模塊,以及各式AHB外設,APB外設的時鐘來自于PLLCLK,經過外設時鐘發生器,分頻出各個時鐘供給外設使用,同時,時鐘模塊也能切斷外設模塊的時鐘
另外,看門狗定時器有多重時鐘可以選擇,系統實時時鐘也有多個模式的時鐘源可以選擇
使用時鐘模塊時,主要有以下注意事項
1.??????切換時鐘源的時候PLL必須被斷開,否則無法切換成功
2.??????PLL輸入時鐘最大50M,產生的時鐘最小275M
3.??????PLL配置寄存器的寫入需要解鎖,寫入PLL數據之后必須要解鎖寫入的數據才能生效,如下
4.??????PLL設置過程如下
?
?
???????? 代碼如下
?
?
#include "clock.h"u32 SystemCoreClock;void ClockSet(u8 clockSel) {if((PLLSTAT&(1<<25)))//如果PLL連接{PLLCON &= ~(1<<1);//斷開PLL連接PLLFEED = 0xAA;//發送饋送序列PLLFEED = 0x55;while((PLLSTAT&(1<<25)));//等待PLL斷開連接}PLLCON &= ~(1<<0);//禁用PLLPLLFEED = 0xAA;//發送饋送序列PLLFEED = 0x55;while((PLLSTAT&(1<<24)));//等待PLL禁止if(clockSel == CLOCK_HSE) //選擇外部時鐘{SCS &= ~(1<<4);//主振蕩器頻率選擇1-20MSCS |= (1<<5);//主振蕩器使能while((SCS&(1<<6)) == 0);//等待主振蕩器準備好CLKSRCSEL = 0x01;//選擇主時鐘源為PLL時鐘SystemCoreClock = 100000000;}else if(clockSel == CLOCK_HSI)//選擇內部時鐘{CLKSRCSEL = 0x00;//選擇內部RC振蕩器為系統時鐘源SystemCoreClock = 100000000;}PLLCFG = 0x00050063; // 選擇PLL倍頻 N 6 M 100 12M 2*100*4/2 = 400MPLLFEED = 0xAA;//發送饋送序列PLLFEED = 0x55;PLLCON |= 0x01; /* 使能PLL */PLLFEED = 0xAA;PLLFEED = 0x55;while (!(PLLSTAT & (1<<24)));/* 等待PLL0使能 */ // while (!(PLLSTAT & (1<<26)));/* 等待PLL0鎖定 *///修改cpu分頻數值CCLKCFG = 0x03;//四分頻 400/4 = 100MPLLCON |= (1<<1); /* 連接PLL */PLLFEED = 0xAA;PLLFEED = 0x55;while (!(PLLSTAT & (1<<25)));/* 等待PLL連接 *///此時,PLL時鐘就OK了,接下來需要設置外設的分頻數PCLKSEL0 = 0x00000040;//外設時鐘均為25MPCLKSEL1 = 0x00000000;PCONP = 0x00000000;//禁用全部外設時鐘 }#ifndef __CLOCK_H_ #define __CLOCK_H_#include "lpc24xx.h" #include "common.h"#define CLOCK_HSE 1 #define CLOCK_HSI 2void ClockSet(u8 clockSel);extern u32 SystemCoreClock;#endif
總結
以上是生活随笔為你收集整理的LPC2478时钟模块详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2017.12.1T19_B2_2zuo
- 下一篇: 终极算法 机器学习和人工智能如何重塑世界