(8)IMX6ULL主時(shí)鐘配置一般方法論
時(shí)鐘配置
時(shí)鐘配置需要看三個(gè)方面【時(shí)鐘源選擇】【時(shí)鐘路徑選擇】【時(shí)鐘目標(biāo)選擇】
(1)看時(shí)鐘樹(shù),找想配置的【時(shí)鐘目標(biāo)】
????????選擇想要配置的是時(shí)鐘,了解其【時(shí)鐘源】【時(shí)鐘路徑】I.MX6U 參考手冊(cè) P 628
(2)找到了之后,明確時(shí)鐘源和時(shí)鐘路徑。通過(guò)公式選擇好想用時(shí)鐘源和時(shí)鐘路徑。
(3)配置時(shí)鐘源
????????時(shí)鐘源又分為兩種:【PLL自身的主時(shí)鐘源的配置】【PLL經(jīng)過(guò)開(kāi)關(guān)切換的選擇配置】
????????【PLL自身的主時(shí)鐘源的配置】:主要是在“CCM Analog Memory”P 710處看
????????【PLL經(jīng)過(guò)開(kāi)關(guān)切換的選擇配置】:主要在“CCM internal clock generation”章節(jié),看Switcher clock generation(切換時(shí)鐘生成圖)
????????看圖找到寄存器的對(duì)應(yīng)位,在進(jìn)行配置。
例如:我們想配置芯片的主時(shí)鐘。
(1)找想配置的【時(shí)鐘目標(biāo)】

找到了ARM時(shí)鐘,【時(shí)鐘源】為PLL1,路徑可分頻,與CACRR寄存器相關(guān)。
(2)找到了之后,明確時(shí)鐘源和時(shí)鐘路徑。通過(guò)公式選擇好想用時(shí)鐘源和時(shí)鐘路徑。
我們想讓主時(shí)鐘以528M的頻率工作 我們可以選擇 PLL1輸出1056M,再在路徑上分頻,最后輸出1056/2=528M。
(3)配置時(shí)鐘源
????然后我們看PLL1時(shí)鐘源的配置。
????【PLL自身的主時(shí)鐘源的配置】:


得到了一個(gè)公式:Fout =?Fin * div /2。
這里我們需要的是1056M,F(xiàn)in=24M(板載晶振寫著24M),那么通過(guò)計(jì)算我們得到DIV_SELECT=1056/12=88
所以我們此參數(shù)配置為88,enable設(shè)為1。
【PLL經(jīng)過(guò)開(kāi)關(guān)切換的選擇配置】:我們?cè)谙胍淖働LL1的輸出的過(guò)程中,我們需要先將系統(tǒng)的所需要的時(shí)鐘進(jìn)行切換??偨Y(jié)為:先讓系統(tǒng)用別的時(shí)鐘,再配置需要的時(shí)鐘,再切換回需要的時(shí)鐘。
這時(shí)我們就需要看PLL的其他路徑,如圖:

圖中可以看出,PLL1的輸出與CCSR寄存器有關(guān)。①處的數(shù)據(jù)選擇器,選擇了用PLL1主時(shí)鐘or step_clk。②處選擇了用OSC(也就是板載24M晶振)還是PFD時(shí)鐘。③處選擇了具體用哪個(gè)時(shí)鐘。
我們的目的是:將PLL1(996M)改為1056M,我們可以
CCSR: pll1_sw_clk_sel = 0;
CCSR: step_sel = 0;
這樣我們選擇了 24M以供系統(tǒng)正常運(yùn)行。
再配置CCM_ANALOG_PLL_ARMn寄存器,改變PLL1:
CCM_ANALOG_PLL_ARMn:ENABLE = 1;
CCM_ANALOG_PLL_ARMn:DIV_SELECT = 88;
最后切換回PLL1:
CCSR: pll1_sw_clk_sel = 1;
此時(shí)就用到了1056M的時(shí)鐘。接下來(lái)配置二分頻:

此圖可以看出與CACRR寄存器相關(guān),那我們找CACRR寄存器


他的信息如下,我們只要讓后三位 = 001即可二分頻。
至此,主時(shí)鐘的配置完成,輸出為1056/2 = 528M。