s5pv210时钟系统详解
S5PV210時鐘系統(tǒng)
1、什么是時鐘系統(tǒng)?時鐘系統(tǒng)的作用?
時鐘系統(tǒng)指的由固有頻率來控制的系統(tǒng)。作用:有了一定的頻率,工作才能有序,有節(jié)奏的進(jìn)行著。
2、S5PV210的時鐘系統(tǒng)是怎么樣的?
S5PV210:外部晶振+內(nèi)部時鐘發(fā)生器+內(nèi)部PLL產(chǎn)生高頻時鐘+分頻器
3、S5PV210時鐘系統(tǒng)的工作流程?
S5PV210:通過外部晶振產(chǎn)生一個低頻時鐘(如果外部晶振是高頻時鐘的話,大家都知道高頻受到的干擾會較大,并不能很好的傳入到S5PV210內(nèi)部)傳入到內(nèi)部時鐘發(fā)生器,在內(nèi)部有一個PLL(PLL的作用是把低頻轉(zhuǎn)換為高頻,列如傳入的是24MHZ通過PLL則會變成1GHZ)再通過分頻器分頻成各個器件所需要的時鐘頻率。
4、S5PV210的時鐘系統(tǒng)簡介
通過分析數(shù)據(jù)手冊可知:
(1)S5PV210的時鐘體系分成3大域(按頻率的快慢劃分):
-MSYS域(main system):主系統(tǒng)域里面包含這CPU(cortex-a8內(nèi)核)、DRAM控制器(DMC0和DMC1)、3D、internal SRAM(IRAM,and IROM)
-DSYS域(display system):該域主要是一些視頻顯示、編解碼有關(guān)的模塊。
-PSYS(peripheral system):該域主要是一些外設(shè),I/O外設(shè),SD接口,use接口,I^2接口等等。
頻率(由塊到慢):MSYS>DSYS>PSYS
(2)S5PV210共有4個倍頻器
APLL:Cortex-A8內(nèi)核、MSYS域
MPLL&EPLL:DSYS PSYS
VPLL:Video視頻相關(guān)模塊
(3)S5PV210時鐘域詳解
-MSYS域:
*ARMCLK:給CPU內(nèi)核工作的時鐘,即主頻。
*HCLK_MSYS: MSYS域的高頻時鐘,給DMC0和DMC1使用
*PCLK_MSYS: MSYS域的低頻時鐘
*HCLK_IMEM:給iROM和iRAM使用
-DSYS域:
*HCLK_DSYS: DSYS域的高頻時鐘
*PCLK_DSYS: DSYS域的低頻時鐘
-PSYS域:
*HCLK_PSYS: PSYS域的高頻時鐘
*PCLK_PSYS: PSYS域的低頻時鐘
為什么要知道這些域呢?
210內(nèi)部的各個外設(shè)都是接在內(nèi)部的(AMBA總線)AMBA總線有一個高頻分支叫AHB,有一條低頻分支叫APB。上面的各個域都有各個對應(yīng)的HCLK_XXX和PCLK_XXX,其中HCLK_XXX就是XXX這個域中AHB總線的工作頻率,PCLK_XXX就是XXX這個域APB總線的工作頻率。譬如串口UART掛在PSYS域下的APB總線上,因此串口的時鐘來源是PCLK_PSYS。我們通過上面的這些時鐘域和總線數(shù)值,來確定我們各個外設(shè)的具體時鐘頻率。
(5)S5PV210典型值的設(shè)置。
默認(rèn)的S5PV210上電后,從irom啟動此時的時鐘頻率是24MHZ,我們需要通過PLL提高時鐘頻率,在分給各個時鐘域不同的頻率,最后達(dá)到各個時鐘域的穩(wěn)定工作,從而達(dá)到初始化時鐘的作用。
S5PV210的典型值在數(shù)據(jù)手冊中有相應(yīng)的給出。
通過推薦的典型值我們可以通過上面的數(shù)字些寫出代碼。
(4)S5PV210框圖詳解。
(很重要)第一張圖從左到右依次完成了原始時鐘生成(24MHZ)->PLL倍頻得到高頻時鐘->初次分頻得到各總線時鐘。這張圖是理解整個時鐘體系的關(guān)鍵。其中的MUX開關(guān)是至關(guān)重要的。MUX開關(guān)就是個或門,通過設(shè)置bit位來控制哪一個是通的。DIV則是分頻器??梢酝ㄟ^設(shè)置分頻器得到想要的頻率。此圖可得知FINPLL和FOUTPLL很重要
第二張圖是從各中間時鐘(第一張圖中某個步驟生成的時鐘)到各外設(shè)自己使用的時鐘(實(shí)際就是個別外設(shè)再額外分頻的設(shè)置)。進(jìn)一步細(xì)化各外設(shè)的時鐘來源。
(5)S5PV210時鐘設(shè)置寄存器詳解
-xPLL_LOCK:控制PLL鎖定頻率的周期,譬如24MHZ變?yōu)?GHZ這段是需要一段時間的,通過一個鎖相環(huán)使得把24MHZ鎖定為1GHZ,所以就需要鎖定頻率的周期了。(鎖定頻率)
-xPLL_CON:打開/關(guān)閉PLL電路,設(shè)置PLL的倍頻參數(shù),查看PLL鎖定狀態(tài)等。(決定倍頻到多少)
-CLK_SRCn(n:0~6):用來設(shè)置時鐘來源的,對應(yīng)時鐘框圖中的mux開關(guān)。(決定時鐘來源)
-CLK_SRC_MASKn:打開關(guān)閉時鐘源。(開頭部分)
-CLK_DIV_STATn:各模塊的分頻參數(shù)配制。(決定分頻多少)
-CLK_SRC_GATE_x:打開關(guān)閉時鐘門。(結(jié)尾部分)
-CLK_DIV_STATn:分頻狀態(tài)寄存器,確保是否已經(jīng)分頻完成。
-CLK_MUX_STATn:選擇開關(guān)狀態(tài)寄存器,確保是否已經(jīng)選擇開關(guān)完畢。
(6)匯編代碼詳情。
初始化時鐘代碼(5歩):
第一步:先不使用PLL,先用24MHZ時鐘頻率跑一段
第二歩:設(shè)置鎖定時間。默認(rèn)值為0x0fff,我們設(shè)置為0xffff讓他多鎖定一會(更保險).
第三歩:設(shè)置分頻系數(shù)。
第四歩:設(shè)置PLL,提高時鐘頻率。
第五歩:打開PLL。
在arm的數(shù)據(jù)手冊中可以分析得知,所有的寄存器都是按塊分的。我們可以找到一個寄存器的基地址,再通過基址加編址尋址的方式在找到寄存器。
分析0x14131440 的含義:0001 0100 0001 0011 0001 0100 0100 0000
通過分析前面給定的典型值。可以最后算出0x14131440并且可以分析(很重要)那張圖的流向,一切的分析都是基于看懂那張圖上作出的,能否學(xué)會時鐘,即能否學(xué)會看懂那張圖。
首先分析
/
bit[30~28]=1此時PCLK_PSYS_RATIO=1
PCLK_PSYS = HCLK_PSYS /(PCLK_PSYS_RATIO+1)
*/
/*
bit[27~24]=4此時HCLK_PSYS_RATIO=4
HCLK_PSYS = MOUT_PSYS / (HCLK_PSYS_RATIO + 1)
*/
/*
bit[22~20]=1此時PCLK_DSYS_RATIO=1
PCLK_DSYS = HCLK_DSYS / (PCLK_DSYS_RATIO + 1)
*/
/*
bit[19~16]=3此時HCLK_DSYS_RATIO=3
HCLK_DSYS = MOUT_DSYS / (HCLK_DSYS_RATIO + 1)
*/
/*
bit[14~12]=1此時PCLK_MSYS_RATIO=1
PCLK_MSYS = HCLK_MSYS / (PCLK_MSYS_RATIO + 1)
*/
/*
bit[10~8]=4此時HCLK_MSYS_RATIO=4
HCLK_MSYS = ARMCLK / (HCLK_MSYS_RATIO + 1)
*/
/*
bit[6~4]=0此時A2M_RATIO =0
SCLKA2M = SCLKAPLL / (A2M_RATIO + 1)
*/
/*
bit[2~0]=0此時APLL_RATIO =0
ARMCLK = MOUT_MSYS / (APLL_RATIO + 1)
*/
建議值是按數(shù)據(jù)手冊給的:
(7)C語言代碼詳解
//S5PV210時鐘初始化代碼 #define REG_CLK_SRC0 0XE0100200 #define REG_APLL_LOCK 0XE0100000 #define REG_APLL_LOCK 0XE0100008 #define REG_CLK_DIV0 0XE0100300 #define REG_APLL_CON0 0XE0100100 #define REG_MPLL_CON 0XE0100108 #define rREG_CLK_SRC0 (*(volatile unsigned int *)REG_CLK_SRC0) #define rREG_APLL_LOCK (*(volatile unsigned int *)REG_APLL_LOCK) #define rREG_MPLL_LOCK (*(volatile unsigned int *)REG_MPLL_LOCK) #define rREG_CLK_DIV0 (*(volatile unsigned int *)REG_CLK_DIV0) #define rREG_APLL_CON0 (*(volatile unsigned int *)REG_APLL_CON0) #define rREG_MPLL_CON (*(volatile unsigned int *)REG_MPLL_CON)#define APLL_MDIV 0x7d // 125 #define APLL_PDIV 0x3 #define APLL_SDIV 0x1#define MPLL_MDIV 0x29b // 667 #define MPLL_PDIV 0xc #define MPLL_SDIV 0x1#define set_pll(mdiv, pdiv, sdiv) (1<<31 | mdiv<<16 | pdiv<<8 | sdiv) #define APLL_VAL set_pll(APLL_MDIV,APLL_PDIV,APLL_SDIV) #define MPLL_VAL set_pll(MPLL_MDIV,MPLL_PDIV,MPLL_SDIV)void clock_init(void) {//1 不使用PLL rREG_CLK_SRC0 = 0X0;//2 設(shè)置鎖定時間rREG_APLL_LOCK = 0X0000FFFF;rREG_MPLL_LOCK = 0X0000FFFF;//3 設(shè)置分頻rREG_CLK_DIV0 = 0X14131440;//4 設(shè)置PLLrREG_APLL_CON0 = APLL_VAL;rREG_MPLL_CON = MPLL_VAL;//5 使用PLLrREG_CLK_SRC0 = 0x10001111; }注:因能力有限,若文章有錯請多多包涵,謝謝。
總結(jié)
以上是生活随笔為你收集整理的s5pv210时钟系统详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利用 echarts 绘制江苏省的地图之
- 下一篇: java信息管理系统总结_java实现科