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