LPC1700系列Cortex-M3內(nèi)部時(shí)鐘系統(tǒng)
1、縮略語
osc:oscillator,意為振蕩器,晶振。是一種能量轉(zhuǎn)換裝置——將直流電能轉(zhuǎn)換為具有一定頻率的交流電能。其構(gòu)成的電路叫振蕩電路。
osc_clk:外部晶體振蕩器
rtc_clk:real time clock
2. 振蕩器
2.1 內(nèi)部RC振蕩器(IRC)
內(nèi)部RC振蕩器(Inner RC),可用作WatchDog的時(shí)鐘源,也可用作驅(qū)動(dòng)PLL0和CPU的時(shí)鐘源。IRC的精度達(dá)不到USB借口的時(shí)間基準(zhǔn)精度要求(在使用LPC1700的USB功能時(shí)要求使用精度更高的外部晶體振蕩器作為系統(tǒng)時(shí)鐘源)。除此以外,如果CAN波特率高于100Kbit/s,則IRC也不能應(yīng)用于CAN1/2模塊。IRC的標(biāo)稱頻率為4MHz。
在上電或任何片上復(fù)位時(shí),LPC1700系列Cortex-M3使用IRC作為時(shí)鐘源。此后,軟件可將其切換為另一種可用的時(shí)鐘源。
2.2 主振蕩器(osc)
主振蕩器(外部晶體振蕩器)可作為CPU的時(shí)鐘源(不管是否使用PLL0)。主振蕩器工作在1MHz~25MHz下。該頻率可通過主PLL(PLL0)來提高至CPU操作頻率的最大值。主振蕩器的輸出稱為OSC_CLK。 PLLCLKIN選擇用作PLL0輸入時(shí)鐘,周立功的書里將Cortex-M3處理器時(shí)鐘頻率稱為CCLK。除非PLL0有效且已連接,否則PLLCLKIN和CCLK的頻率相同。
LPC1700系列Cortex-M3的主振蕩器可工作在兩種模式下:從屬模式、主振蕩模式。
在叢書模式下,輸入時(shí)鐘信號(hào)應(yīng)該與一個(gè)100pF的電容相連,其幅值為200mVrms到1000mVrms,相當(dāng)于方波信號(hào)在280mV到1.4V之間浮動(dòng)。在這種配置下XTAL2引腳可以不連接。
在主振蕩模式下,由于片內(nèi)集成了反饋電阻,只需在外部連接一個(gè)晶體和電容Cx1, Cx2就可形成基本模式的振蕩電路(基本頻率用L、Cl和Rs來表示。
由于芯片操作總是從內(nèi)部RC振蕩器開始,因此主振蕩器只能由軟件請(qǐng)求來啟動(dòng)。
2.3 RTC振蕩器
RTC振蕩器可提供1Hz到32KHz的RTC時(shí)鐘輸出,可用作PLL0、CPU和看門狗定時(shí)器的時(shí)鐘源。
3. 多路選擇輸入時(shí)鐘源
用來驅(qū)動(dòng)PLL0、CPU和片內(nèi)外圍設(shè)備的時(shí)鐘源包括主振蕩器、RTC振蕩器和內(nèi)部RC振蕩器。
只有在PLL0斷開連接時(shí),才可更換輸入時(shí)鐘源。
3.1 PLL時(shí)鐘源選擇寄存器(CLKSRCSEL - 0x400F C10C)
1:0 CLKSRC {00 使用內(nèi)部RC振蕩器(默認(rèn)值); 01選擇主振蕩器; 10選擇RTC振蕩器; 11 保留值}, 7:2{0保留值}
4. 多路選擇輸出外部時(shí)鐘
4.1 輸出外部時(shí)鐘源選擇
為了便于系統(tǒng)測試和開發(fā),LPC1700系列Cortex-M3任何一個(gè)內(nèi)部時(shí)鐘均可作為輸出外部時(shí)鐘源,引出CLKOUT(P1.27引腳)功能。
通過CLKOUT可觀察到的輸出外部時(shí)鐘源有CPU時(shí)鐘(cclk)[0000]、主振蕩器時(shí)鐘(osc_clk)[0001]、內(nèi)部RC振蕩器時(shí)鐘(irc_osc)[0010]、USB時(shí)鐘(usb_clk)[0011]和RTC時(shí)鐘(rtc_clk)[0100]
4.2 時(shí)鐘輸出配置寄存器(CLKOUTCFG - 0x400F C1C8)
CLKOUTCFG寄存器可以選擇在CLKOUT引腳上作為輸出的內(nèi)部時(shí)鐘,并允許通過一個(gè)整數(shù)值(1~16)對(duì)時(shí)鐘進(jìn)行分頻。對(duì)于大多數(shù)時(shí)鐘源可進(jìn)行1分頻。當(dāng)選擇CPU時(shí)鐘且該時(shí)鐘高于50MHz時(shí),輸出必須經(jīng)過分頻,使得頻率在適當(dāng)?shù)姆秶鷥?nèi)。
5. PLL0工作原理與使用
LPC1700系列Cortex-M3內(nèi)部具有兩個(gè)PLL模塊,分別為PLL0和PLL1。其中PLL0支持32KHz~50MHz范圍內(nèi)的輸入時(shí)鐘頻率,而PLL1僅支持10MHz~25MHz范圍內(nèi)的輸入時(shí)鐘頻率。
5.1 PLL0工作原理
PLL0時(shí)鐘源的選擇在CLKSRCSEL寄存器中設(shè)置,PLL0將輸入時(shí)鐘升頻,然后再分頻以提供CPU及芯片外設(shè)使用的實(shí)際時(shí)鐘。PLL0可產(chǎn)生的時(shí)鐘頻率高達(dá)100MHz,是CPU所允許的最大值。
PLL0接受的輸入時(shí)鐘頻率范圍為32KHz~50MHz,PLL0的輸出時(shí)鐘信號(hào)就是CCO(電流控制振蕩器)的輸出,CCO的振蕩頻率由“相位頻率檢測”部件控制(內(nèi)部結(jié)構(gòu)可以忽略),公式為F(PLLin) / N = F(cco) / 2M, 即Fcco = Fpllin * 2M / N
通常CCO的輸出頻率是有限的,超出這個(gè)范圍則無法輸出預(yù)期的時(shí)鐘信號(hào)。LPC1700系列Cortex-M3內(nèi)部的CCO可工作在275MHz ~ 550MHz,其中,最佳頻率點(diǎn)為288MHz。
其實(shí),PLL0輸出還有其他的分頻器,使其頻率下降到CPU、USB和其他外設(shè)所需要的值。詳見“時(shí)鐘分頻器”。
由于CCO(流控振蕩器)與“相位頻率檢測”部件的工作原理需要一定時(shí)間才能穩(wěn)定,因此需要查詢PLL0STAT是否就緒再來啟用。
由于PLL0作為時(shí)鐘系統(tǒng)中的一個(gè)重要模塊,為避免程序?qū)LL0正在使用的相關(guān)參數(shù)意外修改,芯片廠商從硬件上提供了保護(hù),PLL0FEED(PLL0饋送寄存器),該寄存器使能PLL0CON、PLL0CFG,將前兩個(gè)配置信息載入到實(shí)際影響PLL0操作的映像寄存器中。
5.2 PLL0寄存器描述
PLL0CON, PLL0CFG, PLL0STAT, PLL0FEED
5.2.1 PLL0控制寄存器(PLL0CON)
[0] 使能PLL0,允許PLL0嘗試鎖定倍頻器和分頻器的當(dāng)前設(shè)定值
[1] 連接PLL0,使PLL0輸出作為處理器和大多數(shù)片內(nèi)外設(shè)的時(shí)鐘源
對(duì)于PLL0CON寄存器的更改,只有在執(zhí)行了正確的PLL0饋送序列后才生效
5.2.2 PLL0配置寄存器(PLL0CFG)
[14:0] MSEL0, PLL0倍頻器值; [15] 保留;[23:16] NSEL0, PLL0預(yù)分頻器值; [31:24] 保留
5.2.3 PLL0狀態(tài)寄存器(PLL0STAT)
PLL0STAT寄存器提供了當(dāng)前生效的PLL0工作參數(shù)和狀態(tài)。
[14:0] MSEL0,保存的值是M - 1; [15] 保留
[23:16] NSEL0,N - 1; [24] PLLE0,使能位; [25] PLLC0,連接位;
[26] PLOCK0,反應(yīng)PLL0的鎖定狀態(tài)。 [31:27] 保留
5.2.4 PLL0饋送寄存器(PLL0FEED)
使用順序:PLL0CFG = ***; PLL0FEED = 0xAA; PLL0FEED = 0x55;
5.3 PLL0和掉電模式
掉電模式會(huì)自動(dòng)關(guān)閉并斷開PLL0。從掉電模式喚醒不會(huì)自動(dòng)恢復(fù)原先的PLL0設(shè)置參數(shù),必須在軟件中恢復(fù)PLL0。通常,可以在中斷服務(wù)程序的開始激活PLL0、等待鎖定并連接PLL0,該中斷服務(wù)程序也可以在掉電喚醒時(shí)調(diào)用。
5.4 PLL0頻率計(jì)算中的參數(shù)
Fin, Fcco, N, M
Fcco = Fin x 2M / N 【注意:PLL0輸入和設(shè)定必須滿足下面的條件,F(xiàn)in的范圍32KHz ~ 50MHz, Fcoo的范圍 275~550MHz】
在較高的振蕩器頻率下(超過1MHz),允許M值的范圍從6~512,這是支持主振蕩器和IRC操作的整個(gè)M值范圍。
對(duì)于較低頻率,特別是在RTC振蕩器用來計(jì)時(shí)PLL0時(shí),選擇了65個(gè)M值用于支持波特率產(chǎn)生和CAN/USB操作
5.5 確定PLL0頻率參數(shù)的過程
(1)確定是否需要使用USB以及是否由PLL0驅(qū)動(dòng)。USB需要一個(gè)占空比為50%的48MHz時(shí)鐘源,也就是說Fcco必須是48MHz的偶數(shù)整數(shù)倍(即96MHz的整數(shù)倍),此時(shí)誤差范圍極?。?/p>
(2)選擇所需的處理器頻率(Fcclk)。這取決于處理器的吞吐量要求,外設(shè)可在較低時(shí)鐘頻率下運(yùn)行,這個(gè)頻率可低于處理器的頻率(較低的Fcco值,處理器功耗也更低)。找出與所需Fcclk的倍數(shù)接近的一個(gè)Fcco值,再與USB所要求的Fcco值相比較;
(3)選擇PLL0輸入頻率(Fin)的值。這可從主振蕩器、RTC振蕩器或片內(nèi)RC振蕩器中選擇。使用USB功能時(shí),需選擇主振蕩器;
(4)計(jì)算M和N的值來產(chǎn)生十分精確的Fcco頻率。
總的來說,建議使用一個(gè)較小的N值,這樣可以降低CCO的倍頻數(shù)。
5.6 PLL0頻率計(jì)算舉例
例1:在應(yīng)用中使用USB接口
a. 在應(yīng)用中使用USB接口并且由PLL0驅(qū)動(dòng)。在PLL0操作范圍(275MHz ~ 550MHz)內(nèi),96MHz的最小整數(shù)倍頻值是288MHz(越小則功耗越低);
b. 預(yù)期的CPU速率為60MHz;
c. 使用外部4MHz晶振或內(nèi)部4MHz作為系統(tǒng)時(shí)鐘源。 計(jì)算 M = (Fcco * N ) / (2 * Fin)
d. 為了使PLL0的倍頻值最小,可選擇N=1。因此M = 288 * 10^6 * 1 / (2 * 4 * 10^) = 36
例2:在應(yīng)用中不適用USB接口
a. 預(yù)期的Fcclk為72MHz;
b. 使用32.768KHz RTC時(shí)鐘源作為系統(tǒng)時(shí)鐘源。
c.要產(chǎn)生所需的Fcclk,而在PLL操作范圍內(nèi),最小的Fcco為288MHz(4*72MHz),此時(shí),我們令N=1,以獲得Fcco的最小倍頻值。M=288*10^6/(2*32768)=4394.53125。我們?nèi)〔煌腘值,得到M值不同,且Fcco可以算出幾個(gè)誤差,求得最接近的M=8789, N=2
5.7 PLL0設(shè)置步驟
要對(duì)PLL0進(jìn)行正確初始化,須注意下列步驟:
(1) 如果PLL0已連接,則用一個(gè)饋送序列斷開與PLL0的連接;
(2) 用一個(gè)饋送序列禁止PLL0;
(3) 如果需要,可在沒有PLL0的情況下改變CPU時(shí)鐘分頻器的設(shè)置以加速操作;
(4) 如果需要,可操作“時(shí)鐘源選擇控制寄存器”以改變系統(tǒng)時(shí)鐘源;
(5) 寫PLL0CFG并用一個(gè)饋送序列使其有效。PLL0CFG只能在PLL0被禁止時(shí)更新;
(6) 用一個(gè)饋送序列使能PLL0;
(7) 改變CPU時(shí)鐘分頻器設(shè)置,使之與PLL0一起操作;
注意:在連接PLL0之前完成這個(gè)操作。
(8) 通過監(jiān)控PLL0STAT寄存器的PLOCK位0,或者使用PLL0鎖定中斷來等待PLL0實(shí)現(xiàn)鎖定。此外,當(dāng)使用低頻時(shí)鐘作為PLL0的輸入時(shí)(也就是32KHz時(shí)),需要等待一個(gè)固定的時(shí)間。當(dāng)PLL參考頻率Fref(=Fin/N)少于100KHz或大于20MHz時(shí),PLOCK0的值可能不穩(wěn)定。在這些情況下,啟動(dòng)PLL0后等待一段時(shí)間即可。當(dāng)Fref大于400KHz時(shí),這個(gè)時(shí)間為500us;當(dāng)Fref少于400KHz時(shí),這個(gè)時(shí)間為200/Fref秒;
(9) 用一個(gè)饋送序列連接PLL0。
注意:不要合并上面的任何一個(gè)步驟。例如,不能用相同的饋送序列同時(shí)更新PLL0CFG和使能PLL0
5.8 PLL0和啟動(dòng)/引導(dǎo)代碼的相互作用
當(dāng)在用戶Flash中無有效代碼(由校驗(yàn)和字決定)或在啟動(dòng)時(shí)拉低ISP使能引腳(P2.10)時(shí),芯片將進(jìn)入ISP模式,并且引導(dǎo)代碼將用IRC設(shè)置PLL0。因此,當(dāng)用戶啟動(dòng)JTAG來調(diào)試用戶代碼時(shí),用戶代碼不能認(rèn)為PLL0被禁止。在用戶啟動(dòng)代碼中必須對(duì)PLL0進(jìn)行重新設(shè)置。
6. PLL1工作原理與使用
6.1 PLL1工作原理
PLL1僅接受主振蕩器的時(shí)鐘輸入,并且為USB子系統(tǒng)提供一個(gè)固定的48MHz時(shí)鐘。除了從PLL0產(chǎn)生USB時(shí)鐘外,這是產(chǎn)生USB時(shí)鐘的另一種選擇。
PLL1在復(fù)位時(shí)禁止和掉電。如果PLL1保持禁止,那么可以由PLL0提供USB時(shí)鐘。
PLL1僅支持從10MHz到25MHz范圍內(nèi)的輸入時(shí)鐘頻率。倍頻值M可以是1~32的整數(shù)值(對(duì)于USB,倍頻值不能高于4)。Fcco的操作范圍從156MHz到320MHz,輸出分頻器P可設(shè)為2、4、8、16分頻來產(chǎn)生輸出時(shí)鐘。
6.2 PLL1的寄存器描述(與PLL0的寄存器基本相同)
7. 時(shí)鐘分頻器
7.1 CPU時(shí)鐘配置寄存器(CCLKCFG)
LPC1700系列Cortex-M3 CPU的時(shí)鐘頻率最大值為100MHz??梢赃x用適當(dāng)?shù)姆诸l器值CCLKSEL來降低CPU的操作頻率,以達(dá)到暫時(shí)節(jié)省功耗無需關(guān)閉PLL0的目的。
7.2 USB時(shí)鐘配置寄存器(USBCLKCFG)
注意:該寄存器僅在PLL1禁止時(shí)使用。如果PLL1使能,則其輸出自動(dòng)使用PLL1作USB時(shí)鐘源,且必須配置其為USB子系統(tǒng)提供準(zhǔn)確的48MHz時(shí)鐘。
USBCLKCFG寄存器控制對(duì)PLL0輸出時(shí)鐘的分頻,然后提供給USB子系統(tǒng)使用。操作示例:USBCLKCFG = (Fcco / Fusbclk - 1)
7.3 IRC調(diào)整寄存器(IRCTRIM),該寄存器用于調(diào)整片內(nèi)4MHz振蕩器。
7.4 外設(shè)時(shí)鐘選擇寄存器(PCLKSEL0,PCLKSEL1),每個(gè)外設(shè)都有各自獨(dú)立的分頻器,兩位,可表示1、1/2、1/4、1/8倍的CCLK
評(píng)論