国产亚洲精品AA片在线观看,丰满熟妇HD,亚洲成色www成人网站妖精,丁香五月天婷婷五月天男人天堂

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > LPC1700系列Cortex-M3內部時鐘系統

LPC1700系列Cortex-M3內部時鐘系統

作者: 時間:2016-11-11 來源:網絡 收藏

本文引用地址:http://www.ljygm.com/article/201611/316878.htm

1、縮略語

osc:oscillator,意為振蕩器,晶振。是一種能量轉換裝置——將直流電能轉換為具有一定頻率的交流電能。其構成的電路叫振蕩電路。

osc_clk:外部晶體振蕩器

rtc_clk:real time clock

2. 振蕩器

2.1 內部RC振蕩器(IRC)

內部RC振蕩器(Inner RC),可用作WatchDog的時鐘源,也可用作驅動PLL0和CPU的時鐘源。IRC的精度達不到USB借口的時間基準精度要求(在使用LPC1700的USB功能時要求使用精度更高的外部晶體振蕩器作為系統時鐘源)。除此以外,如果CAN波特率高于100Kbit/s,則IRC也不能應用于CAN1/2模塊。IRC的標稱頻率為4MHz。

在上電或任何片上復位時,LPC1700系列Cortex-M3使用IRC作為時鐘源。此后,軟件可將其切換為另一種可用的時鐘源。

2.2 主振蕩器(osc)

主振蕩器(外部晶體振蕩器)可作為CPU的時鐘源(不管是否使用PLL0)。主振蕩器工作在1MHz~25MHz下。該頻率可通過主PLL(PLL0)來提高至CPU操作頻率的最大值。主振蕩器的輸出稱為OSC_CLK。 PLLCLKIN選擇用作PLL0輸入時鐘,周立功的書里將Cortex-M3處理器時鐘頻率稱為CCLK。除非PLL0有效且已連接,否則PLLCLKIN和CCLK的頻率相同。

LPC1700系列Cortex-M3的主振蕩器可工作在兩種模式下:從屬模式、主振蕩模式。

在叢書模式下,輸入時鐘信號應該與一個100pF的電容相連,其幅值為200mVrms到1000mVrms,相當于方波信號在280mV到1.4V之間浮動。在這種配置下XTAL2引腳可以不連接。

在主振蕩模式下,由于片內集成了反饋電阻,只需在外部連接一個晶體和電容Cx1, Cx2就可形成基本模式的振蕩電路(基本頻率用L、Cl和Rs來表示。

由于芯片操作總是從內部RC振蕩器開始,因此主振蕩器只能由軟件請求來啟動。

2.3 RTC振蕩器

RTC振蕩器可提供1Hz到32KHz的RTC時鐘輸出,可用作PLL0、CPU和看門狗定時器的時鐘源。


3. 多路選擇輸入時鐘源

用來驅動PLL0、CPU和片內外圍設備的時鐘源包括主振蕩器、RTC振蕩器和內部RC振蕩器。

只有在PLL0斷開連接時,才可更換輸入時鐘源。

3.1 PLL時鐘源選擇寄存器(CLKSRCSEL - 0x400F C10C)

1:0 CLKSRC {00 使用內部RC振蕩器(默認值); 01選擇主振蕩器; 10選擇RTC振蕩器; 11 保留值}, 7:2{0保留值}

4. 多路選擇輸出外部時鐘

4.1 輸出外部時鐘源選擇

為了便于系統測試和開發(fā),LPC1700系列Cortex-M3任何一個內部時鐘均可作為輸出外部時鐘源,引出CLKOUT(P1.27引腳)功能。

通過CLKOUT可觀察到的輸出外部時鐘源有CPU時鐘(cclk)[0000]、主振蕩器時鐘(osc_clk)[0001]、內部RC振蕩器時鐘(irc_osc)[0010]、USB時鐘(usb_clk)[0011]和RTC時鐘(rtc_clk)[0100]

4.2 時鐘輸出配置寄存器(CLKOUTCFG - 0x400F C1C8)

CLKOUTCFG寄存器可以選擇在CLKOUT引腳上作為輸出的內部時鐘,并允許通過一個整數值(1~16)對時鐘進行分頻。對于大多數時鐘源可進行1分頻。當選擇CPU時鐘且該時鐘高于50MHz時,輸出必須經過分頻,使得頻率在適當的范圍內。

5. PLL0工作原理與使用

LPC1700系列Cortex-M3內部具有兩個PLL模塊,分別為PLL0和PLL1。其中PLL0支持32KHz~50MHz范圍內的輸入時鐘頻率,而PLL1僅支持10MHz~25MHz范圍內的輸入時鐘頻率。

5.1 PLL0工作原理

PLL0時鐘源的選擇在CLKSRCSEL寄存器中設置,PLL0將輸入時鐘升頻,然后再分頻以提供CPU及芯片外設使用的實際時鐘。PLL0可產生的時鐘頻率高達100MHz,是CPU所允許的最大值。

PLL0接受的輸入時鐘頻率范圍為32KHz~50MHz,PLL0的輸出時鐘信號就是CCO(電流控制振蕩器)的輸出,CCO的振蕩頻率由“相位頻率檢測”部件控制(內部結構可以忽略),公式為F(PLLin) / N = F(cco) / 2M, 即Fcco = Fpllin * 2M / N

通常CCO的輸出頻率是有限的,超出這個范圍則無法輸出預期的時鐘信號。LPC1700系列Cortex-M3內部的CCO可工作在275MHz ~ 550MHz,其中,最佳頻率點為288MHz。

其實,PLL0輸出還有其他的分頻器,使其頻率下降到CPU、USB和其他外設所需要的值。詳見“時鐘分頻器”。

由于CCO(流控振蕩器)與“相位頻率檢測”部件的工作原理需要一定時間才能穩(wěn)定,因此需要查詢PLL0STAT是否就緒再來啟用。

由于PLL0作為時鐘系統中的一個重要模塊,為避免程序對PLL0正在使用的相關參數意外修改,芯片廠商從硬件上提供了保護,PLL0FEED(PLL0饋送寄存器),該寄存器使能PLL0CON、PLL0CFG,將前兩個配置信息載入到實際影響PLL0操作的映像寄存器中。

5.2 PLL0寄存器描述

PLL0CON, PLL0CFG, PLL0STAT, PLL0FEED

5.2.1 PLL0控制寄存器(PLL0CON)

[0] 使能PLL0,允許PLL0嘗試鎖定倍頻器和分頻器的當前設定值

[1] 連接PLL0,使PLL0輸出作為處理器和大多數片內外設的時鐘源

對于PLL0CON寄存器的更改,只有在執(zhí)行了正確的PLL0饋送序列后才生效

5.2.2 PLL0配置寄存器(PLL0CFG)
[14:0] MSEL0, PLL0倍頻器值; [15] 保留;[23:16] NSEL0, PLL0預分頻器值; [31:24] 保留

5.2.3 PLL0狀態(tài)寄存器(PLL0STAT)

PLL0STAT寄存器提供了當前生效的PLL0工作參數和狀態(tài)。

[14:0] MSEL0,保存的值是M - 1; [15] 保留

[23:16] NSEL0,N - 1; [24] PLLE0,使能位; [25] PLLC0,連接位;

[26] PLOCK0,反應PLL0的鎖定狀態(tài)。 [31:27] 保留

5.2.4 PLL0饋送寄存器(PLL0FEED)

使用順序:PLL0CFG = ***; PLL0FEED = 0xAA; PLL0FEED = 0x55;

5.3 PLL0和掉電模式

掉電模式會自動關閉并斷開PLL0。從掉電模式喚醒不會自動恢復原先的PLL0設置參數,必須在軟件中恢復PLL0。通常,可以在中斷服務程序的開始激活PLL0、等待鎖定并連接PLL0,該中斷服務程序也可以在掉電喚醒時調用。

5.4 PLL0頻率計算中的參數

Fin, Fcco, N, M

Fcco = Fin x 2M / N 【注意:PLL0輸入和設定必須滿足下面的條件,Fin的范圍32KHz ~ 50MHz, Fcoo的范圍 275~550MHz】

在較高的振蕩器頻率下(超過1MHz),允許M值的范圍從6~512,這是支持主振蕩器和IRC操作的整個M值范圍。

對于較低頻率,特別是在RTC振蕩器用來計時PLL0時,選擇了65個M值用于支持波特率產生和CAN/USB操作

5.5 確定PLL0頻率參數的過程

(1)確定是否需要使用USB以及是否由PLL0驅動。USB需要一個占空比為50%的48MHz時鐘源,也就是說Fcco必須是48MHz的偶數整數倍(即96MHz的整數倍),此時誤差范圍極??;

(2)選擇所需的處理器頻率(Fcclk)。這取決于處理器的吞吐量要求,外設可在較低時鐘頻率下運行,這個頻率可低于處理器的頻率(較低的Fcco值,處理器功耗也更低)。找出與所需Fcclk的倍數接近的一個Fcco值,再與USB所要求的Fcco值相比較;

(3)選擇PLL0輸入頻率(Fin)的值。這可從主振蕩器、RTC振蕩器或片內RC振蕩器中選擇。使用USB功能時,需選擇主振蕩器;

(4)計算M和N的值來產生十分精確的Fcco頻率。

總的來說,建議使用一個較小的N值,這樣可以降低CCO的倍頻數。

5.6 PLL0頻率計算舉例

例1:在應用中使用USB接口

a. 在應用中使用USB接口并且由PLL0驅動。在PLL0操作范圍(275MHz ~ 550MHz)內,96MHz的最小整數倍頻值是288MHz(越小則功耗越低);

b. 預期的CPU速率為60MHz;

c. 使用外部4MHz晶振或內部4MHz作為系統時鐘源。 計算 M = (Fcco * N ) / (2 * Fin)

d. 為了使PLL0的倍頻值最小,可選擇N=1。因此M = 288 * 10^6 * 1 / (2 * 4 * 10^) = 36

例2:在應用中不適用USB接口

a. 預期的Fcclk為72MHz;

b. 使用32.768KHz RTC時鐘源作為系統時鐘源。

c.要產生所需的Fcclk,而在PLL操作范圍內,最小的Fcco為288MHz(4*72MHz),此時,我們令N=1,以獲得Fcco的最小倍頻值。M=288*10^6/(2*32768)=4394.53125。我們取不同的N值,得到M值不同,且Fcco可以算出幾個誤差,求得最接近的M=8789, N=2

5.7 PLL0設置步驟

要對PLL0進行正確初始化,須注意下列步驟:

(1) 如果PLL0已連接,則用一個饋送序列斷開與PLL0的連接;

(2) 用一個饋送序列禁止PLL0;

(3) 如果需要,可在沒有PLL0的情況下改變CPU時鐘分頻器的設置以加速操作;

(4) 如果需要,可操作“時鐘源選擇控制寄存器”以改變系統時鐘源;

(5) 寫PLL0CFG并用一個饋送序列使其有效。PLL0CFG只能在PLL0被禁止時更新;

(6) 用一個饋送序列使能PLL0;

(7) 改變CPU時鐘分頻器設置,使之與PLL0一起操作;

注意:在連接PLL0之前完成這個操作。

(8) 通過監(jiān)控PLL0STAT寄存器的PLOCK位0,或者使用PLL0鎖定中斷來等待PLL0實現鎖定。此外,當使用低頻時鐘作為PLL0的輸入時(也就是32KHz時),需要等待一個固定的時間。當PLL參考頻率Fref(=Fin/N)少于100KHz或大于20MHz時,PLOCK0的值可能不穩(wěn)定。在這些情況下,啟動PLL0后等待一段時間即可。當Fref大于400KHz時,這個時間為500us;當Fref少于400KHz時,這個時間為200/Fref秒;

(9) 用一個饋送序列連接PLL0。

注意:不要合并上面的任何一個步驟。例如,不能用相同的饋送序列同時更新PLL0CFG和使能PLL0

5.8 PLL0和啟動/引導代碼的相互作用

當在用戶Flash中無有效代碼(由校驗和字決定)或在啟動時拉低ISP使能引腳(P2.10)時,芯片將進入ISP模式,并且引導代碼將用IRC設置PLL0。因此,當用戶啟動JTAG來調試用戶代碼時,用戶代碼不能認為PLL0被禁止。在用戶啟動代碼中必須對PLL0進行重新設置。

6. PLL1工作原理與使用

6.1 PLL1工作原理

PLL1僅接受主振蕩器的時鐘輸入,并且為USB子系統提供一個固定的48MHz時鐘。除了從PLL0產生USB時鐘外,這是產生USB時鐘的另一種選擇。

PLL1在復位時禁止和掉電。如果PLL1保持禁止,那么可以由PLL0提供USB時鐘。

PLL1僅支持從10MHz到25MHz范圍內的輸入時鐘頻率。倍頻值M可以是1~32的整數值(對于USB,倍頻值不能高于4)。Fcco的操作范圍從156MHz到320MHz,輸出分頻器P可設為2、4、8、16分頻來產生輸出時鐘。

6.2 PLL1的寄存器描述(與PLL0的寄存器基本相同)

7. 時鐘分頻器

7.1 CPU時鐘配置寄存器(CCLKCFG)

LPC1700系列Cortex-M3 CPU的時鐘頻率最大值為100MHz。可以選用適當的分頻器值CCLKSEL來降低CPU的操作頻率,以達到暫時節(jié)省功耗無需關閉PLL0的目的。

7.2 USB時鐘配置寄存器(USBCLKCFG)

注意:該寄存器僅在PLL1禁止時使用。如果PLL1使能,則其輸出自動使用PLL1作USB時鐘源,且必須配置其為USB子系統提供準確的48MHz時鐘。

USBCLKCFG寄存器控制對PLL0輸出時鐘的分頻,然后提供給USB子系統使用。操作示例:USBCLKCFG = (Fcco / Fusbclk - 1)

7.3 IRC調整寄存器(IRCTRIM),該寄存器用于調整片內4MHz振蕩器。

7.4 外設時鐘選擇寄存器(PCLKSEL0,PCLKSEL1),每個外設都有各自獨立的分頻器,兩位,可表示1、1/2、1/4、1/8倍的CCLK



評論


技術專區(qū)

關閉