1 時鍾控制模塊(CCM)的主要作用
RT1052 的時鍾系統由時鍾控制模塊 CCM 進行控制,其主要功能如下:
1)使用 PLL 鎖相環電路將參考時鍾倍頻,得到頻率更高的時鍾。為芯片內核和外設提供可選的時鍾源。 RT1052 共有 7 個 PLL 鎖相環電路, 分別為 ARM PLL(PLL 1)、System PLL(PLL 2)、 USB1 PLL(PLL 3)、 Audio PLL(PLL 4)、 Video PLL(PLL 5)、ENET PLL(PLL 6) 、 USB2 PLL(PLL 7)。
2)提供 PLL 控制寄存器、時鍾選擇寄存器、時鍾分頻寄存器 靈活控制輸出到外設和內核的時鍾頻率。
3)控制低功耗機構。
2 時鍾控制模塊結構構圖
CCM_CLK_IGNITION 管理從外部晶振時鍾到穩定的根時鍾輸出的整個過程。 CCM 完成重置之后 CCM_CLK_IGNITION 模塊立即啟動。 GPC 是 General Power Controller 的縮寫,
即總電源管理模塊,它不屬於 CCM,系統電壓與時鍾關系密切,簡單來說,系統電壓影響系統最高的時鍾頻率, CCM 又可以控制總電源管理模塊(GPC)進入待機或低功耗狀態。
1. ②PLL 時鍾產生
CCM_ANALOG 為 CCM 的模擬部分,作用是將頻率較低的參考時鍾(例如 24MHz 的XTALOSC 時鍾)使用 PLL 鎖相環電路倍頻到更高的時鍾。 CCM_CLK_SWITCHER 模塊接收來自 CCM_ANALOG 模塊的鎖相環時鍾輸輸出,以及鎖相環的旁路時鍾,並為CCM_CLK_ROOT_GEN 子模塊生成切換時鍾輸出(pll3_sw_clk)。 RT1052 共有 7 個 PLL 鎖
相環電路, 可以獨立配置。其中 PLL2 與 PLL3 結合 PFD 能夠輸出多個頻率可調的時鍾。
2. ③根時鍾生成
CCM_CLK_ROOT_GEN 接收來自 CCM_CLK_SWITCHER 模塊的 PLL 或 PFD 時鍾,經過時鍾的選擇、分頻等操作之后產生並輸出根時鍾。根時鍾將會作內核或外設的時鍾源。
3. ④時鍾同步
當更改某些時鍾的時鍾源時需要進行時鍾的同步 CCM_HND_SK 模塊用於管理時鍾握手,即時鍾的同步。
4. ⑤低功耗管理與時鍾啟用模塊
CCM_LPM 用於管理低功耗模式,管理時鍾的開啟與關閉。 CCM_CLK_LOGIC,根據來自 CCM_LPM 模塊和 CCM_IP 的信號產生時鍾啟用或關閉信號。
5. ⑥低功耗時鍾門控模塊(LPCG)
低功耗時鍾門控模塊(LPCG)根據 CCM_CLK_LOGIC 模塊輸出信號控制時鍾輸出。時鍾越多、頻率越高功耗也就越高。關閉沒有使用的時鍾或降低時鍾頻率能夠有效的降低功耗 。
3 時鍾樹簡介
RT1052 芯片時鍾的結構以時鍾樹的方式進行描述。當我們設置外設時鍾時大多會參考時鍾樹進行設置。
1. ①時鍾轉換器 CLOCK SWITCHER
RT1052 外部連接了兩個晶振,分別用於提供 32.768KHz 和 24MHz 時鍾。其中32.768KHz 晶振稱為外部低速時鍾(CKIL),當芯片上電后要保持該時鍾一直處於運行狀
態, 為需要的外設提供時鍾。
32.768KHz 時鍾主要為芯片的實時時鍾外設(RTC)提供時鍾源,若不使用 RTC,可以不提供該時鍾。
24Mhz 晶振產生的時鍾稱為外部高速時鍾(CKIH) , 芯片利用內部振盪器產生基准時鍾(OSC), 內部振盪器產生基准時鍾(OSC)與外部高速時鍾(CKIH)連接, 產生 24MHz 的參
考時鍾。24MHz 參考時鍾常用作 PLL 鎖相環電路的輸入時鍾。下面以 ARM PLL(PLL 1)為例講解從 24MHz 參考時鍾到 ARM PLL(PLL 1)時鍾的過程
ARM PLL(PLL 1)只有一個控制寄存器 CCM_ANALOG_PLL_ARMn,CCM_ANALOG_PLL_ARMn[BYPASS_CLK_SRC]用於選擇輸入鍾源(Fin), 一般我們使用24MHz 參考時鍾,當然也可以選擇外部引腳輸入引腳(CLK1_N / CLK1_P)輸入的外部時
鍾。 CCM_ANALOG_PLL_ARMn[DIV_SELECT]位選擇鎖相環分頻值(DIV_SELECT)。取值范圍為 54 到 108。輸出頻率計算公式為 ARM_PLL = Fin * DIV_SELECT/ 2.0。如果選擇
24MHz 參考時鍾作為時鍾輸入, DIV_SELECT 選擇 88 則 ARM PLL 的輸出頻率為1056MHz。 CCM_ANALOG_PLL_ARMn[ENABLE]用於配置是否使能 ARM PLL 輸出,如
果要使用 ARM PLL 就需要將該位設置為 1 。
PLL2 與 PLL3 下方各有一組 PFD。 PFD 是 Phase FractionalDividers 的縮寫,我們這里翻譯為分數分頻。 PFD 的頻率由 PLL2 或 PLL3 輸出頻率分頻產生。
寄存器 CCM_ANALOG_PFD_528n 用於控制 PFD0~PFD3 的輸出頻率。以 PFD0 為例,CCM_ANALOG_PFD_528n[PFD0_FRAC]用於設置分頻值,取值范圍為 12 到 35, PFD0 的
輸出頻率計算公式為:
PFD0_out =528*18/ PFD0_FRAC