LPC2478芯片有 the Main Oscillator, the Internal RC Oscillator, and the RTC oscillator三個獨(dú)立的時鐘系統(tǒng)。下面分別介紹三者:
上電或任何復(fù)位發(fā)生時,lpc2478將the Internal RC Oscillator作為時鐘源。此后用戶程序(軟件)選擇是否選用其它兩個時鐘源。
本文引用地址:http://www.ex-cimer.com/article/201611/319017.htm
對于lpc2478來說,其外部時鐘在1MZ-24MZ之間。the Main Oscillator可以作為CPU的時鐘源,也可以作為或不作為PLL的時鐘源。
The oscillator(晶振) output is called oscclk。在使用the Main Oscillator作為時鐘源時,其可以工作在兩種模式下:slave mode and oscillation mode.
其電容的選擇可參考數(shù)據(jù)手冊。我們通過軟件控制SCS register來啟動the Main Oscillator作為時鐘源(OSCRANGE,OSCEN,OSCSTAT位)。OSCRANGE為0,其頻率為1MZ-20MZ;為1,其頻率為15MZ-24MZ. OSCEN為1使能。OSCSTAT為1說明the Main Oscillator可以作為時鐘源,已經(jīng)穩(wěn)定。
The RTC oscillator(Real-Time Clock)主要用于實(shí)時時鐘看門狗定時器,也可以用于驅(qū)動PLL和CPU.
關(guān)于使用三種時鐘源時應(yīng)該注意以下兩點(diǎn):
1、the Internal RC Oscillator不能用于USB模塊。
2、如果CAN模塊的波特率在100K以上時,不能使用the Internal RC Oscillator作為時鐘源。
The CLKSRCSEL register的前兩位決定使用哪種時鐘源作為驅(qū)動PLL的時鐘源。
00(默認(rèn))the Internal RC Oscillator作為驅(qū)動PLL的時鐘源。
01 theMain Oscillator作為驅(qū)動PLL的時鐘源。
10 The RTC oscillator作為驅(qū)動PLL的時鐘源。
11保留。
PLL (Phase Locked Loop)——鎖相環(huán)。LPC2478的PLL可接受32K-24MZ的驅(qū)動時鐘源。經(jīng)過其倍頻后供給CPU和USB等模塊使用.
LPC2400系列中引導(dǎo)啟動與LPC2000系列稍有不同。其中有關(guān)PLL的部分有些需要注意。在ISP模式下,引導(dǎo)代碼會通過IRC時鐘源驅(qū)動PLL,從而啟動PLL。
這就是說在我們的用戶程序開始執(zhí)行之前PLL已經(jīng)使能,如果我們選擇其他的時鐘源,必須按照步驟次序斷開PLL.另外,在ISP模式下,引導(dǎo)代碼會改變某些寄存器的值。如the SCS register中的GPIOM位會被置位。用戶必須注意這點(diǎn),否則可能導(dǎo)致PORT0 and PORT1不能正常使用。
PLL寄存器主要有以下四個。PLLCON,PLLCFG,PLLSTAT,PLLFEED。
PLLCON(可讀寫)包括使能和連接位。PLL作為其他模塊的時鐘源之前必須啟動,使能,鎖相達(dá)到穩(wěn)定狀態(tài)。
PLLCFG(可讀寫)為配置寄存器。MSEL設(shè)置‘M’的值,NSEL設(shè)置‘N’的值。下面為計(jì)算公式:FCCO = (2 × M × FIN) / N
當(dāng)輸入時鐘FIN在MZ級別上變化時,‘M’取值范圍6-512,當(dāng)輸入時鐘在低頻變化時,‘M’取特殊的值(參考數(shù)據(jù)手冊)。 FIN范圍是 32 kHz to 50 MHz。 FCCO范圍是 275 MHz to 550 MHz。
注意:
1,如果用戶程序中用到USB接口,F(xiàn)CCO必須為48MZ的整數(shù)倍(如96等)。
2,在選擇CPU的時鐘源,也需要考慮USB的情況,F(xiàn)CCO最好為兩者的公倍數(shù)。低頻時功耗消耗也低。
3,對于驅(qū)動PLL時鐘源的選擇上述三者均可,但如果用到USB則必須使用the main oscillator。
4,通過計(jì)算公式得到的‘N’,‘M’值必須減一寫入寄存器中。其中‘N’值最好小一點(diǎn)。最好使用數(shù)據(jù)手冊中推薦的值。
舉例:用戶程序中用到USB,期望的FCCO值為288MZ,CPU工作頻率60MZ,外部時鐘為4MZ。
由以上公式可導(dǎo)出M = (FCCO × N) / (2 × FIN),假設(shè)N=1,
M = 288 × 106 / (2 × 4 × 106) = 36,PLLCFG中位0x23 (N - 1 = 0; M - 1 = 35 = 0x23)。對于CPU,288 × 106 / 60 × 106 = 4.8,取整數(shù)5即可,CPU=57.6 MHz。如果要求精確,則FCCO只能去48和60的最小公倍數(shù)480MZ,再計(jì)算即可。(更多舉例請參考數(shù)據(jù)手冊)
PLLSTAT(只讀)狀態(tài)寄存器。MSEL, NSEL為當(dāng)前值比實(shí)際使用的值小1.PLLE,PLLC為1表示PLL使能連接。PLOCK為1表示鎖定相位,它可以監(jiān)視PLL是否達(dá)到穩(wěn)定狀態(tài),可以為下一級使用。PLOCK還連接到了中斷控制器。用戶使用軟件可以控制。當(dāng)中斷發(fā)生,PLL連接使用,中斷失效。
PLLFEED寄存器通過按順序?qū)憯?shù)據(jù)保護(hù)PLLCON,PLLCFG寄存器中的值。1. 寫 0xAA to PLLFEED.2. 寫 0x55 to PLLFEED.如果次序中任何一步不正確,PLLCON,PLLCFG寄存器中的值不會改變。
掉電模式下PLL自動關(guān)閉。當(dāng)芯片從掉電模式下被喚醒時,PLL不會自動的連接,必須由軟件完成(由相應(yīng)的中斷服務(wù)程序)。需要注意的是不能簡單的通過向PLLFEED寄存器中依次喂食啟動PLL,如果這樣會出現(xiàn)錯誤。
PLL的啟動設(shè)置順序:此序列非常重要不能出現(xiàn)錯誤。
1,如果PLL已經(jīng)連接,通過喂食序列斷開連接。
2,通過喂食序列斷開使能。
3,如果需要加快無鎖相時的速度,改變CPU分頻器的設(shè)置。
4,寫The PCLKSRCSEL register以選擇相應(yīng)的時鐘源驅(qū)動PLL。
5,寫PLLCFG,喂食序列保證生效。此時PLL是不使能狀態(tài)。
6,使能PLL, 喂食序列保證生效。
7,在使能PLL的條件下,改變CPU分頻器的設(shè)置。在連接PLL之前這一點(diǎn)非常重要。
8,等待PLL穩(wěn)定。通過監(jiān)視PLOCK(the PLLSTAT register)是否置位確定?;蛘咄ㄟ^中斷實(shí)現(xiàn),或者等待固定時間。
9,連接PLL,喂食序列保證生效。
PLL輸出的時鐘通過分頻用于CPU和USB等模塊。當(dāng)USB接口使時,CPU頻率必須大于18MZ。USB接口頻率必須是48MZ的整數(shù)倍。
CPU Clock Configuration register (CCLKCFG ),配置寄存器控制PLL輸出給CPU分頻的大小。當(dāng)PLL無連接時,CCLKCFG取值為1。CCLKSEL取值為0,1,3,5……255。此值加1為實(shí)際分頻大小。
USB Clock Configuration register (USBCLKCFG),配置寄存器控制PLL輸出給USB分頻的大小。當(dāng)PLL無連接時,CCLKCFG取值為1。USBCLKCFG取值為0,1,2,3,4,5,6,7。此值加1為實(shí)際分頻大小。
IRC Trim Register (IRCTRIM) 該寄存器是用來調(diào)整片內(nèi)的4 MHz振蕩器。
Peripheral Clock Selection registers 0 and 1 (PCLKSEL0 and PCLKSEL1)該寄存器用來設(shè)置外圍模塊的時鐘。(數(shù)據(jù)手冊P58)
評論