S3C2440時鐘系統

主要參考博客:http://blog.sina.com.cn/s/blog_e18772030101pn0i.html

這裏主要講MPLL的設置,具體的硬件電路以及功能,請參考上面那篇博客,這裏主要談我的理解。

在u-boot移植過程中,在第一階段彙編start.S中首先設置了FCLK:HCLK:PCLK三者比例

/* FCLK:HCLK:PCLK = 1:2:4 */
/* default FCLK is 120 MHz ! */
ldr r0, =CLKDIVN
mov r1, #3
str r1, [r0]


在第二階段C中,從crt0.S中board_init_f函數實現相關的初始化initcall_run_list(init_sequence_f),其中的init_sequence_f變量就包含了時鐘的第二部分初始化board_early_init_f

struct s3c24x0_clock_power * const clk_power =
s3c24x0_get_base_clock_power();       //get address 0x4C000000
struct s3c24x0_gpio * const gpio = s3c24x0_get_base_gpio();


/* to reduce PLL lock time, adjust the LOCKTIME register */
writel(0xFFFFFF, &clk_power->locktime);


/* configure MPLL */
writel((M_MDIV << 12) + (M_PDIV << 4) + M_SDIV,
      &clk_power->mpllcon);


/* some delay between MPLL and UPLL */

pll_delay(4000);


/* configure UPLL */
writel((U_M_MDIV << 12) + (U_M_PDIV << 4) + U_M_SDIV,
      &clk_power->upllcon);


/* some delay between MPLL and UPLL */
pll_delay(8000);


從S3C2440芯片手冊瞭解到,

其中,MDIV、PDIV和SDIV在寄存器MPLLCON和UPLLCON設置

其中,有個問題不解,爲什麼MDIV、PDIV和SDIV的參數設置成這樣?由此引出的另一個問題,爲什麼MPLL是405M呢?(MPLL=(2*m*Fin)/(p*2^s) =(2*169*12/(5*2))=405M)

由此問題,就牽引出更多的問題了。

下圖是S3C2440上電後,時鐘系統的相關變化。


在芯片手冊上文還提到這麼一段,換成人話就是說,在CPU上電後PLL要經過Lock Time後,才能輸出穩定MPLL,因此,在此前Fin代替MPLL供給FCLK(此處在Uboot第一階段代碼中體現)。


等待穩定後,在通常模式下FCLK=MPLL可從圖7-7瞭解到

而FCLK是供給CPU時鐘,CPU最高時鐘頻率爲400MHz,因此得出MDIV、PDIV和SDIV參數的由來。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章