歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Exynos 4412 時鐘配置

Exynos 4412 時鐘配置

日期:2017/2/28 13:53:42   编辑:Linux教程
/** ****************************************************************************** * @author Maoxiao Hu * @version V1.0.0 * @date Jan-2015 ****************************************************************************** * < COPYRIGHT 2015 ISE of SHANDONG UNIVERSITY > ****************************************************************************** **/ 時鐘初始化的一般方法和順序,u-boot、普通裸機程序如果需要都可以使用。 —————————————————————————————- 本文解決的問題: 1、宏觀上幾個大模塊的時鐘配置順序。 2、小模塊的時鐘選擇、分頻和一般的配置順序。 3、對小模塊來說,官方手冊推薦的時鐘源選擇問題。 4、本文只以手冊的“推薦配置”進行說明,“自由玩法”不保證穩定性。 —————————————————————————————- 多路選擇器選擇原則: 1、盡量保持默認配置不動。 2、盡量選擇前端頻率最高的源。 3、其它手冊要求的特殊情況。 —————————————————————————————- 幾個符號: 左邊深色的:無抖動多路選擇器,無抖動意味著在多路選擇切換的瞬間,下游時鐘就可以穩定下來。需要注意是在切換時要保證上游時鐘已經存在並穩定,不然下游時鐘狀態不確定。 右邊淺色的:有抖動多路選擇器,意味著多路選擇切換後,要經歷一段時間的不穩定時間,但是有穩定後有相應寄存器標志位標示下游時鐘已經穩定,這類指示寄存器器一般以CLK_MUX_STAT開頭。 —————————————————————————————- 全局約束條件: 1、無抖動多路選擇器的時鐘源需要存在並且穩定。 2、當某個PLL被設置為關閉狀態,是不可以使用它的輸出信號的。 —————————————————————————————- 晶振說明: 由於一般USB IP核需要直接使用高精度時鐘,所以在XUSBXTI引腳上接24M晶振,XXTI引腳就不需要接了。手冊上說由於iROM代碼是根據24M晶振頻率設計的,所以24M的選擇沒什麼好說的。 —————————————————————————————-

一、時鐘之源PLL配置

原因:根據全局約束條件2,如果PLL關閉那麼不可以使用它的輸出,再根據全局約束條件1,多路選擇器此時只能選擇外部時鐘!而24M的時鐘直接作為系統的時鐘顯然是不合適的! 4412有4個PLL:APLL, MPLL, EPLL, and VPLL。推薦使用24M外部晶振作為它們的時鐘源。 理論上講,4個PLL均可以在22 ~ 1400MHz之間自由設置,但是手冊強烈推薦的頻率范圍為: /*———————————————*/ APLL & MPLL:200 ~ 1400MHz EPLL:90 ~ 416MHz VPLL:100 ~ 440MHz /*———————————————*/

1.0 設置PLL_LOCKTIME

PLL頻率從小變到指定頻率需要一段時間(圖中標紅框的部分雖然不是PLL實際波形但可以參考著理解),當PLL頻率在變化的時候,比如由復位後的初始的400MHz升到1000MHz, 這時,首先把CPU的頻率鎖定,因這此時CPU的頻率是變化的,頻率變化,CPU的狀態就無法確定,所以,此時用 PLL_LOCKTIME 將CPU頻率鎖定一段時間,直到頻率輸出穩定為止。芯片手冊上顯示APLL最大的鎖定時間為100us(Table 60 -9),如果外部晶振是24MHz,100us換算成tick就是2400個tick,所以

APLL_LOCK(Address:0x1004_4000)寄存器該寫入0x960

MPLL_LOCK(Address:0x1004_0008)寄存器該寫入0x190

EPLL_LOCK(Address:0x1003_C010)寄存器該寫入0xBB8

VPLL_LOCK(Address:0x1003_C020)寄存器該寫入0x190。

1.1 APLL & MPLL的倍頻值:

設定對應寄存器的 P、M、S 三個值,不同的搭配最終頻率不同,無須自己計算,系統推薦的搭配如下:

1.2 EPLL的倍頻值:

設定對應寄存器的 P、M、S、K 四個值,不同的搭配最終頻率不同,無須自己計算,系統推薦的搭配如下:

1.3 VPLL的倍頻值

設定對應寄存器的 P、M、S、K 四個值,不同的搭配最終頻率不同,無須自己計算,系統推薦的搭配如下:

1.4 等待PLL穩定

如果PLL輸出穩定了,那麼PLL_CON0的Bit[29]會由0變1。 查詢用匯編實現,以APLL為例: /*———————————————————————*/ wait_pll_lock: ldr r1, [r0, r2] tst r1, #(1<<29) beq wait_pll_lock mov pc, lr ldr r0, =CMU_BASE /* 0x10030000 */ ldr r2, =APLL_CON0_OFFSET /* 0x14100 */ bl wait_pll_lock /*———————————————————————*/ 二、主要模塊的初始化順序

􏰡雖然官方文檔中並沒有強制按下面的順序初始化,但是按照邏輯來講,是應該使用這個順序的。

1、CLK_DIV_CPU0[31:0] = target value0

􏰡 2、CLK_DIV_DMC0[31:0] = target value1

􏰡 3、CLK_DIV_TOP[31:0] = target value2

􏰡 4、CLK_DIV_LEFTBUS[31:0] = target value3

􏰡 5、CLK_DIV_RIGHTBUS[31:0] = target value4

上個直觀點的圖:

Copyright © Linux教程網 All Rights Reserved