S3C2443時鐘管理
1.MPLL和EPLL時鐘源的選擇
從上圖可知主要的時鐘源來之外部晶振(XTI)或者外部時鐘(EXTCLK),時鐘產(chǎn)生器由MPLL和EPLL組成,這兩個PLL的作用是可以產(chǎn)生S3C2443所需要的高頻時鐘信號。由OM[0]來決定MPLL是選擇XTI還是EXTCLK來作為時鐘源,而OM[0]是由硬件設(shè)計來確定,下圖是我們項目OM[0]的設(shè)計部分:
在此設(shè)計中,OM[0]=1,根據(jù)下表
可知MPLL的時鐘源是由XTI提供,如下圖所示:
由上面左圖可知EXTCLK是通過0R的電阻直接接地的,所以EPLL只能選擇XTI來作為EPLL的時鐘源的,再根據(jù)下圖:
我們可知,CLKSRC[8]=0,CLKSRC[7]=X,這里X可以是0或者1,這是需要在startup.s中做相應(yīng)的設(shè)置的。
2.PLL(phase-locked-loop)
S3C2443的PLL主要由PFD(phase difference detector,相位差檢測器)、charge pump(電荷泵)、VCO(voltage controlled oscillator壓控振蕩器)和off-chip loop filter(外部環(huán)路濾波器)。
PFD:又稱為相比比較器,它的作用是檢測輸入信號和輸出信號的相位差,并將檢測出的相位差信號轉(zhuǎn)換為電壓信號輸出。
Charge pump:電荷泵轉(zhuǎn)變PFD的電壓輸出信號成一定比例的電壓值發(fā)送給VCO和off-chip loop filter。
Off-chip loop filter:PFD輸出的電壓信號,進入charge pump后,可能會有高頻雜波,通過Off-chip loop filter 可以輸出VCO需要一個穩(wěn)定的電壓,在這里,Off-chip loop filter采用典型的RC低通濾波。
VCO:輸出電壓進入VCO,引起振蕩器 頻率的變化,壓控振蕩器的輸出頻率隨其輸入電壓的改變而改變,當Fref和Fvco沒有差別的時候,電壓就會保持穩(wěn)定下來,PFD就停止輸出電壓信號給charge pump,這樣PLL系統(tǒng)時鐘就穩(wěn)定了。
3.改變PLL設(shè)置
S3C2443在平常的工作模式中,我們可以通過來寫PMS的值來改變PLL的輸出頻率,當我們通過軟件來寫PMS的值時,PLL的鎖存(lock time)被自動插入,在這個lock time期間,PLL是沒有產(chǎn)生有效的時間給S3C2443的,在lock time過后,PLL才產(chǎn)生有效和穩(wěn)定的clock給SYSCLK,見下圖。
PMS分別指的是PDIV、MDIV和SDIV,而PDIV是值PLL main divider value,MDIV是指PLL pre-divider value,SDIV是指PLL post-divider value,控制MPLL和EPLL時鐘的寄存器MPLLCON和EPLLCON否有這幾個值的定義。
4.系統(tǒng)時鐘控制
由下圖可知ARMCLK是ARM920T的內(nèi)核時鐘,也是S3C2443的CPU時鐘;HCLK是內(nèi)部AHB bus和比如是內(nèi)存控制器、中斷控制器、LCD控制器等外圍設(shè)備的基準時鐘;PCLK是內(nèi)部APB bus和比如是WDT、IIS、I2C等外圍設(shè)備的基準時鐘;DDRCLK是MDDR內(nèi)存的data strobe時鐘。
4.1 MPLL的時鐘控制
從上圖可知,MSysClk是ARMCLK、HCLK、PCLK、DDRCLK這些時鐘的基準時鐘,而ARMCLK、HCLK、PCLK、DDRCLK這些時鐘到底有什么關(guān)系呢,通過對CLKDIVO控制寄存器的設(shè)置可以得到它們之間不同的比值關(guān)系,見下表
4.2 EPLL的時鐘控制
從上圖可知EPLL的時鐘ESYSCLK被用作不同的外圍控制器提供基準時鐘,通過divider的分頻可以得到不同外圍控制所需要的時鐘,而這個分頻值是通過對CLKDIV1寄存器的配置來實現(xiàn)的,也可以通過編程SCLKCON寄存器來關(guān)閉或者開啟不同外圍控制器的時鐘。
在stop和sleep模式,EPLL將被自動關(guān)閉,在退出stop和sleep模式的時候,如果SCLKCON寄存器中相關(guān)位被使能的情況下,那么EPLL將為使能的外圍控制器產(chǎn)生時鐘。
5. 上電復(fù)位PLL時鐘的啟動流
在電壓源提供所需要的電壓給系統(tǒng)上電復(fù)位后,晶體振蕩器在幾毫秒之內(nèi)起振,剛開始的時候MPLL和EPLL都是停止的。當nRESET在晶振時鐘穩(wěn)定后釋放(由低電平變?yōu)楦唠娖?,PLL開始是使用PLL的輸入時鐘Fin作為SYSCLK時鐘的,系統(tǒng)上電復(fù)位后,必須通過軟件來配置MPLLCON和EPLLCON使用每個PLL,也即通過寫MPLLCON和EPLLCON的PDIV、MDIV和SDIV值,接著會自動插入PLL的lock time,lock time之后,PLL的輸出時鐘Fout就是作為SYSCLK時鐘來使用了,這些動作一般是在startup.s函數(shù)中初始化的,見下圖
評論