定義
主時鐘是用于控制其他時鐘頻率的時鐘,是產(chǎn)生準(zhǔn)確定時信號用以控制其他時鐘及可能還有設(shè)備的時鐘。這種時鐘的長期頻率偏差應(yīng)該小于,在國內(nèi)數(shù)字網(wǎng)中,在由單一參考時鐘控制所有時鐘以取得完全同步網(wǎng)的情形,這個控制時鐘一般稱為主時鐘,在具有兩個以上參考時鐘的完全同步網(wǎng),其間通過國內(nèi)鏈路互相同步的情形,其中應(yīng)有一參考時鐘的精度和穩(wěn)定度最高,作為主控時鐘,安裝在某一數(shù)字交換中心作為網(wǎng)的頻率控制中心。1
主時鐘可由以下來源得到:(1)一個外部產(chǎn)生的時鐘信號;(2)帶有外部連接晶體的片內(nèi)振蕩器;(3)一個內(nèi)片PLL或頻率合成器,它由外部時鐘信號產(chǎn)生一個主時鐘。DSP處理器的主時鐘通常以100MHz或更高速率產(chǎn)生時鐘信號。2
最佳主時鐘算法最佳主時鐘算法(Best Master Clock,BMC)指明了一種方法,該方法使得本地時鐘能夠決定它所能看到的所有時鐘,包括自身,哪一個時鐘是最好的。該算法獨立于每個PTP端口,在端口選擇出比較好的時鐘之后,又將這些較好的時鐘進(jìn)行比較,最后確定出一個最好的時鐘,指定它作為系統(tǒng)中的最佳主時鐘。3
最佳主時鐘算法由兩個部分組成,數(shù)據(jù)集比較算法和狀態(tài)決定算法。其中,數(shù)據(jù)集比較算法計算一個二元關(guān)系數(shù)據(jù)集,該數(shù)據(jù)集分別和兩個時鐘端口相關(guān)聯(lián)。其中的某個數(shù)據(jù)集可能代表本地時鐘的缺省特性,而另一個則是建立在接收到的同步報文中所包含的信息的基礎(chǔ)上。狀態(tài)決定算法的作用時根據(jù)被選擇出來的主時鐘的數(shù)據(jù)集來更新本地的數(shù)據(jù)集以及更新每個時鐘的PTP狀態(tài)。3
系統(tǒng)主時鐘組成單元系統(tǒng)主時鐘比較復(fù)雜,主要有以下三部分組成單元
(1)有兩個振蕩器:內(nèi)部8MHz的高速RC振蕩器HSI和外部高速振蕩器HSE;
(2)有三個時鐘源:HIS、HSE和鎖相環(huán)PLL;
(3)有一個倍頻器PLLMUL和一個AHB分頻器。
這些單元為系統(tǒng)提供了很寬范圍內(nèi)的選擇的可能性。4
時鐘源的選擇內(nèi)部8MHz的高速RC振蕩器HSI在上電復(fù)位后自動打開,但精度不高,在要求不高的場合可以直接使用。如果精度不能滿足要求,則可以使用外部4~16MHz的外部振蕩器(晶振)。4
外部高速振蕩器HSE打開的方法如下:
(1)打開/關(guān)斷高速外部振蕩器使用RCC_CR寄存器中的HSEON位;
(2)判斷外部高速振蕩器是否一進(jìn)就緒,使用RCC_CR寄存器中的HSERDY位;
(3)使能高速外部振蕩器中斷,使用RCC_CIR寄存器中的HSERDYIE位;
(4)高速外部振蕩器中斷標(biāo)志位HSERDYF在RCC_CIR寄存器中;
(5)高速外部振蕩器中斷清除位HSERDYC在RCC_CIR寄存器中。
內(nèi)部高速RC振蕩器HIS在上電復(fù)位后自動打開,但如果系統(tǒng)使用HSE作為時鐘源,HIS也可以關(guān)閉(只是為了低功耗,也可以不關(guān)閉)。事實上,HIS的設(shè)置方法也和HSE一樣:
(1)打開/關(guān)斷高速內(nèi)部振蕩器使用RCC_CR寄存器中的HSION位;
(2)判斷內(nèi)部高速振蕩器是否一進(jìn)就緒,使用RCC_CR寄存器中的HSIRDY位;
(3)使能高速內(nèi)部振蕩器中斷,使用RCC_CIR寄存器中的HSIERDYIE位;
(4)高速內(nèi)部振蕩器中斷標(biāo)志位HSIRDYF在RCC_CIR寄存器中;
(5)高速內(nèi)部振蕩器中斷清除位HSIRDYC在RCC_CIR寄存器中。4
內(nèi)部高速振蕩器因為精度較低,所以系統(tǒng)設(shè)計了一套校準(zhǔn)方法:高速內(nèi)部時鐘校準(zhǔn),使用時鐘控制寄存器RCC_CR中的HSITRIM位域。4
鎖相環(huán)鎖相環(huán)PLL在上電復(fù)位后是關(guān)閉的,如果使用的話需要打開。第一步是選擇一個關(guān)于HSE的PLL入口信號,在這個入口PLLXTPRE處有兩個HSE的時鐘源:一個是HSE,另一個是二頻分的HSE。設(shè)置PLLTPRE的方法如下:二分頻HSE將RCC_CFGR寄存器中的PLLXTPRE位置1,不分頻則清零(默認(rèn)狀態(tài))。
通過這個入口之后時鐘振蕩源進(jìn)入PLL時鐘源選擇器PLLSRC,該選擇器主要選擇使用哪一個振蕩器作為時鐘源。從HIS進(jìn)來的信號是一個二分頻的信號。該選擇器設(shè)置方法如下:設(shè)置PLLSRC使用RCC_CFGR寄存器中的PLLSRC位域。4
上電復(fù)位后,這個PLLSRC=0,選擇二分頻的內(nèi)部RC振蕩器HIS作為時鐘源。經(jīng)過該選擇器之后,時鐘信號進(jìn)入PLL倍頻器PLLMUL,倍頻器可以把輸入時鐘進(jìn)行2~6倍倍頻,選擇范圍比較寬。該倍頻器沒有 (不倍頻)的選擇,因為如果不希望倍頻,可以使時鐘源不通過PLLSRC選擇器。PLLMUL的使用方法如下:設(shè)置PLLMUL使用RCC_CFGR寄存器中的PLLMUL位域。該PLLMUL共有15種選擇。4
如果以上都設(shè)置完畢,PLL還不能運行,還需要打開PLL和進(jìn)行以下設(shè)置:
(1)打開/關(guān)斷PLL,用RCC_CR寄存器中的PLLON位;
(2)判斷PLL是否已經(jīng)就緒,使用RCC_CR寄存器中的PLLRDY位;
(3)使能PLL中斷,使用RCC_CIR寄存器中的PLLRDYIE位;
(4)PLL中斷標(biāo)志位PLLRDYF在RCC_CIR寄存器中;
(5)PLL中斷清除位PLLRDYC在RCC_CIR寄存器中。
通過以上設(shè)置過程可以打開時鐘鎖相環(huán)PLL,也可以使PLL中斷。4
USB時鐘從倍頻器出來的時鐘信號經(jīng)過一個USB分頻器直接輸出到USB接口。要求其輸出時鐘是48MHz。分頻使用方法如下:設(shè)置USB分頻器使用RCC-CFGR寄存器中的USBPRE位。
USB分頻器只有不分頻或1/1.5分頻兩種選擇。4
時鐘選擇開關(guān)SW和AHB分頻器共有三個時鐘源進(jìn)入時鐘切換開關(guān),SW。分別是來自HSI和HSE的不分頻時鐘以及來自PLL的時鐘。切換開關(guān)SW選擇其中的一個,方法如下:
(1)設(shè)置SW時鐘切換開關(guān),使用時鐘配置寄存器RCC-CFGR中的SW域;
(2)觀察時鐘切換開關(guān)SW的狀態(tài),使用RCC-CFGR中的SWS域;
從SW出去的時鐘稱為系統(tǒng)時鐘,最大可以達(dá)到72MHz。該系統(tǒng)時鐘供給系統(tǒng),作為整個系統(tǒng)的時鐘源。系統(tǒng)時鐘首先驅(qū)動總線AHB時還可以再分頻,即經(jīng)過AHB分頻器。AHB分頻器使用方法如下:
(1)設(shè)置AHB分頻器使用時鐘配置寄存器RCC-CFGR中的HPRE域;
(2)AHB分頻有9種選擇,從1分頻到512分頻,可選范圍非常大。經(jīng)過這個選擇器后,時鐘進(jìn)入AHB總線系統(tǒng)。4
三個時鐘開關(guān)三個時鐘開關(guān)與內(nèi)部存儲器有關(guān)。進(jìn)入AHB的時鐘信號,在進(jìn)入存儲器和DMA之前還有三個開關(guān),它們是Flash存儲器時鐘開關(guān)、SRAM時鐘開關(guān)和DMA時鐘開關(guān)。前兩個開關(guān)只和睡眠模式有關(guān)。
(1)睡眠模式時,打開/關(guān)斷Flash存儲器時鐘,使用RCC-AHBENR寄存器中的FLITF位;
(2)睡眠模式時,打開/關(guān)斷SRAM存儲器時鐘,使用RCC-AHBENR寄存器中的SRAMEN位;
(3)打開/關(guān)斷DMA時鐘,使用RCC-AHBENR寄存器中的DMAEN位。4
時鐘控制寄存器和時鐘中斷寄存器時鐘控制寄存器(RCC-CR)可以打開/關(guān)斷振蕩器和時鐘。寄存器的地址是0x4002 1000,復(fù)位值是0000 0083。
時鐘中斷寄存器(RCC-CIR)可以設(shè)置時鐘中斷,寄存器的地址是0x4002 1008,復(fù)位值是0000 0000。4