WINCE6.0+S3C6410主要时钟控制
********************************LoongEmbedded*****************
作者:LoongEmbedded(kandi)
時(shí)間:2011.06.19
類別:WINCE驅(qū)動(dòng)開發(fā)
********************************LoongEmbedded*****************
?
備注:S3C6410的ARM內(nèi)核時(shí)鐘(ARMCLK)官方推薦的穩(wěn)定的533MHz。
DMC:動(dòng)態(tài)內(nèi)存控制器
?
S3C6410有3個(gè)PLL,分為為APLL、MPLL和EPLL,其中APLL提供ARMCLK提供時(shí)鐘給CPU,MPLL分別提供HCLK給AXI/AHB總線設(shè)備與提供PCLK時(shí)鐘給APB總線設(shè)備外,EPLL提供SCLK給外設(shè),特別是用于音頻相關(guān)的時(shí)鐘。
PLL最主要的意義在于輸出比輸入更高頻率的時(shí)鐘,這是系統(tǒng)在工作工作時(shí)候所需要的時(shí)鐘,但我們可以通過外部提供的時(shí)鐘源(EXTCLK)來提供慢速時(shí)鐘ARMCLK、HCLK和PCLK來降低系統(tǒng)功耗。也可以通過軟件來控制每個(gè)外設(shè)的時(shí)鐘信號(hào)的啟用或者禁止來控制系統(tǒng)功耗。下面就來開始學(xué)習(xí)系統(tǒng)是如何管理時(shí)鐘的。
?
1.???? APLL、MPLL和EPLL輸出時(shí)鐘及ARMCLK、HCLK、PCLK和SCLK的確定
我們先來看
圖1
圖1闡明了時(shí)鐘產(chǎn)生邏輯:APLL用于ARM內(nèi)核時(shí)鐘操作,MPLL用于主時(shí)鐘操作,EPLL用于特殊用途。操作系統(tǒng)分為三組,第一組是APLL產(chǎn)生的ARM時(shí)鐘,第二組是MPLL產(chǎn)生的時(shí)鐘,該時(shí)鐘用于AXI、AHB和APB總線操作,最后一組是EPLL產(chǎn)生的時(shí)鐘,主要用于外設(shè)IPs,比如是UART、IIS、IIC等。
?
1.1 APLL和MPLL輸出頻率的確定
根據(jù)圖1,APLL,MPLL和EPLL的輸出時(shí)鐘,是如何確定呢?結(jié)合下圖來理解
圖2
從圖2對(duì)寄存器的描述可知APLL_CON/MPLL_CON寄存器的MDIV、PDIV和SDIV可以確定APLL及MPLL的輸出時(shí)鐘,再結(jié)合下圖就可以知道如何設(shè)置MDIV、PDIV和SDIV了。
圖3
根據(jù)圖3推薦的幾組值,我們的系統(tǒng)選擇FOUT=533MHZ這一組,那代碼中是在哪里如何體現(xiàn)的呢?在src/oal/oallib/starup.s中下面的代碼對(duì)MDIV、PDIV和SDIV設(shè)置
圖4
結(jié)合圖3,我們選擇FOUT=533MHZ,所以有MDIV=266,PDIV=3,SDIV=1,這樣APLL輸出的時(shí)鐘頻率就為667MHZ,這樣我們就可以有下面的賦值
APLL_MVAL??? EQU??? (266)
APLL_PVAL??? EQU??? (3)
APLL_SVAL??? EQU??? (1)
這幾個(gè)值是在PLATFORM/COMMON/SRC/SOC/S3C6410_SEC_V1/OAL/INC/s3c6410.inc中設(shè)置的
接下來怎么確定MPLL輸出的時(shí)鐘呢?我們看下面這個(gè)表
圖5
這樣我們就可以確定MPLL輸出的時(shí)鐘為266MHZ,從而結(jié)合圖3可知MPLL對(duì)應(yīng)的MDIV=266、PDIV=3和SDIV=2,這樣我們就可以有下面的賦值
MPLL_MVAL??? EQU??? (266)
MPLL_PVAL??? EQU??? (3)
MPLL_SVAL??? EQU??? (2)
?
1.2 EPLL輸出頻率的確定
EPLL輸出頻率是由EPLL_CON0和EPLL_CON1寄存器的MDIV,PDIV,SDIV和KDIV的值來決定的,下圖是EPLL輸出頻率的推薦值
圖6
根據(jù)圖6的選擇可知MDIV=28,PDIV=1,SDIV=2,KDIV=0,從而可以有下面的賦值:
EPLL_MVAL??? EQU??? (254)
EPLL_PVAL??? EQU??? (9)
EPLL_SVAL??? EQU??? (2)
EPLL_KVAL??? EQU??? (0)
對(duì)EPLL_CON0和EPLL_CON1寄存器的設(shè)置也是在在src/oal/oallib/starup.s中設(shè)置的,接著圖4,這些設(shè)置代碼如圖7所示
圖7
1.3改變PLL的輸出頻率
上面描述了對(duì)APLL、MPLL和EPLL輸出頻率寄存器的設(shè)置,先是比較之前的這些寄存器的值是否和現(xiàn)在要設(shè)置的一致,如果不一致,就要讓現(xiàn)在的設(shè)置生效,這是通過調(diào)用PLL_NeedToConfigure函數(shù)來實(shí)現(xiàn)的,下面就來學(xué)習(xí)這個(gè)函數(shù)
圖8
下面我們來學(xué)習(xí)這個(gè)函數(shù)
1)?????? 關(guān)閉APLL、MPLL和EPLL時(shí)鐘輸出
為什么要做這個(gè)動(dòng)作呢?因?yàn)榻酉聛硪淖働LL的時(shí)鐘輸出,而PLL輸出的時(shí)鐘在PLL的lock-time時(shí)間之后才能給系統(tǒng)提供穩(wěn)定的時(shí)鐘,所以先采用FIN作為輸入時(shí)鐘,結(jié)合圖1可更好理解,這個(gè)動(dòng)作就是下面的代碼來實(shí)現(xiàn)的
bic?? ?????r1, r1, #0x7
對(duì)CLK_SRC[0:2]位清零,下圖對(duì)CLK_SRC[0:2]位的描述
圖9
2)?????? 通過設(shè)置CLK_DIV0寄存器的設(shè)置來控制系統(tǒng)系統(tǒng)和具體的時(shí)鐘,也就是確定ARMCLK、HCLK*2、HCLK和PCLK,我們先來看CLK_DIV0寄存器的相關(guān)位描述
圖10
從圖5可知ARMCLK=533MHZ,HCLK*2=266MHZ,HCLK=133MHZ,PCLK=66MHZ,也知DOUTapll=533MHZ,MOUTmpll=266MHZ,這樣根據(jù)圖10中的公式就可以算出ARM_RATIO=0,MPLL_RATIO=1,HCLK_RATIO=1,HCLK*2_RATIO=1,PCLK_RATIO=1。這里通過下圖來理解HCLK*2IN和HCLK*2以及怎么算出HCLK*2_RATIO的
圖11
?
3)?????? 設(shè)置PLL的lock time
APLL_LOCK,MPLL_LOCK和EPLL_LOCK寄存器用于設(shè)置對(duì)應(yīng)的PLL的lock time,下面看這幾個(gè)寄存器的描述
圖12
我們?cè)賮砜纯聪旅娴拿枋隹梢愿萌ダ斫狻?/span>
圖13
4)?????? 設(shè)置PMS的值,可參考圖4到圖7之間的內(nèi)容描述。
到此對(duì)PLL_NeedToConfigure函數(shù)的描述已經(jīng)完成了。
?
1.4??? 檢查CLK_DIV0寄存器是否和要設(shè)置的內(nèi)容一致,如果不一致就要按照現(xiàn)在要配置的
內(nèi)容來配置,實(shí)現(xiàn)的代碼如下:
圖14
可見上面第2)部分的描述,下面來看看CLKDIV_NeedToConfigure函數(shù)的實(shí)現(xiàn),
圖15
?
總結(jié)
以上是生活随笔為你收集整理的WINCE6.0+S3C6410主要时钟控制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WINCE基于AT050TN22屏的时序
- 下一篇: WINCE下调试AT050TN22屏及触