芯片要工作就需要讀取指令,解析指令然后運行指令,需要在某種固定的周期性運動的設備驅動下有條不紊的進行,它就是頻率
。
默認情況下I.MX6ULL
工作在默認頻率下(396MHz),工作頻率相對保守。為了更好發揮I.MX6ULL
的性能,需要對它的時鐘頻率進行配置。I.MX6ULL
開發手冊標注的內核最高頻率支持528MHz,實際上它還可以超頻到696MHz。
配置內核頻率
I.MX6ULL
支持24MHz
與32.768kHz
兩個OSC,32.768
為低頻率,目前使用的所有時鐘來源都是24MHz
。
從上面這張圖可以看出,pll1_sw_clk
是進入到內核頻率的,通過CCSR
的pll1_sw_clk_sel
來選擇到底使用哪一路作為最終進入ARM內核
頻率。step_clk
在這里通過CCSR
的step_sel
選擇為與OSC
相同頻率24MHz
,它主要是用于在配置pll1_main_clk
時的備用頻率使用。
- 讀取
CCSR
的第2位值,如果是0表示當前選擇的是pll1_main_clk
,需要將它切換到step_clk
,同時將step_clk
選擇成24MHz
頻率
/// CCM->CCSR的第二位判斷是否選擇的是pll1_main_clk(值是0)
if (((CCM->CCSR >> 2) & 0x1) == 0)
{
/// 需要先切換時鐘源到24MHz晶振
CCM->CCSR &= ~(1 << 8);
CCM->CCSR |= (1 << 2);
}
-
/// bit 13: enable register /// 配置(696MHz) CCM_ANALOG->PLL_ARM = (1 << 13) | (58); /// 分頻器配置為1 CCM->CACRR = 0; /// 將時鐘源切換回CCSR的第二位判斷是否選擇的是pll1_main_clk CCM->CCSR &= ~(1 << 2);
這里配置了一個超頻數值696MHz
8路FPD配置
BYPASS_CLK_ SRC(15 - 14)
配置成0x0
,即選擇使用24MHz
作為時鐘源ENABLE(13)
配置成1即使能時鐘頻率輸出DIV_SELECT
按公式(PLL output frequency = Fref * DIV_SEL/2)配置CCM
的CACRR
的1-3位配置分頻器的值- 配置完成切換回
pll1_main_clk
到目前為止,會使用到的PLL除了內核以外還有PLL2
與PLL3
。PLL2
與PLL3
是固定的頻率,但他們都各分出去了4路FPD是可以靈活配置的。上面紅色框里面看到的就是。分別有兩個寄存器控制,PLL2
是CCM_ANALOG_PFD_528n
, PLL3
是CCM_ANALOG_PFD_480n
。配置的公式是 528(480) * 18 / 實際頻率,具體配置代碼如下:
/// 配置PPL2(528MHz)的PFD0 ~ FPD3
int reg = CCM_ANALOG->PFD_528;
/// PFD0: 352MHz
reg |= (27 << 0);
/// PFD1: 594MHz
reg |= (16 << 8);
/// PFD2: 396MHz
reg |= (24 << 16);
/// PFD3: 297MHz
reg |= (32 << 24);
CCM_ANALOG->PFD_528 = reg;
/// 配置PPL3(480MHz)的PFD0 ~ FPD3
reg = CCM_ANALOG->PFD_480;
/// PFD0: 720MHz
reg |= (12 << 0);
/// PFD1: 540MHz
reg |= (16 << 8);
/// PFD2: 508.2MHz
reg |= (17 << 16);
// PFD3: 454.7MHz
reg |= (19 << 24);
CCM_ANALOG->PFD_480 = reg;
配置完成后,燒寫后可看到實驗07
中的LED0
與BEEP
閃燈與響聲的頻率更高了,這是由于內核工作在了更高的頻率。
-
芯片
+關注
關注
456文章
50892瀏覽量
424354 -
頻率
+關注
關注
4文章
1506瀏覽量
59258 -
指令
+關注
關注
1文章
608瀏覽量
35748
發布評論請先 登錄
相關推薦
評論