日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

s5pv210时钟系统详解

發(fā)布時間:2023/12/16 windows 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 s5pv210时钟系统详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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ù)手冊中可以分析得知,所有的寄存器都是按塊分的。我們可以找到一個寄存器的基地址,再通過基址加編址尋址的方式在找到寄存器。

#define ELFIN_CLOCK_POWER_BASE 0XE0100000 #define CLK_SRC0_OFFSET 0X00000200ldr r0, =ELFIN_CLOCK_POWER_BASE //1 設(shè)置各種時鐘開關(guān),暫時不使用PLL ldr r1, =0x0 //通過控制SRC0寄存器使各種PLL從FINPLL那條路通過寄存器描述見下圖 str r1, [r0, #CLK_SRC0_OFFSET]

#define APLL_LOCK_OFFSET 0x00000000 #define MPLL_LOCK_OFFSET 0x00000008//2 設(shè)置鎖定時間ldr r1, =0x0000FFFF str r1, [r0, #APLL_LOCK_OFFSET] str r1, [r0, #MPLL_LOCK_OFFSET]

//3 設(shè)置分頻,寄存器描述如下圖 //清楚bit[0~31]#define CLK_DIV0_OFFSET 0x00000300 #define CLK_DIV0_MASK 0xffffffff ldr r1,[r0, #CLK_DIV0_OFFSET] ldr r2, =CLK_DIV0_MASK bic r1, r1, r2 ldr r2, =0x14131440 orr r1, r1 ,r2 str r1, [r0, #CLK_DIV0_OFFSET]

分析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ù)手冊推薦的 #define APLL_MDIV 0X7D #define APLL_PDIV 0X3 #define APLL_SDIV 0x1#define MPLL_MDIV 0X29B #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)#define APLL_CON0_OFFSET 0x100 #define MPLL_CON_OFFSET 0x108 //4 設(shè)置PLL,使得低頻變成高頻 //公式如下圖:FOUT=MDIV*FIN/(PDIV*2^(SDIV-1))=0x7d*24/(0x3*2^(1-1))=1000MHZ ldr r1, =APLL_VAL str r1, [r0, #APLL_CON0_OFFSET] //FOUT=MDIV*FIN/(PDIV*2^(SDIV-1))=0x29b*24/(0xc*2^1)=667MHZ ldr r1, =MPLL_VAL str r1, [r0, #MPLL_CON_OFFSET]



建議值是按數(shù)據(jù)手冊給的:

//5 打開PLL,前面只是設(shè)置系數(shù),這歩是開始工作。 ldr r1, [r0,#CLK_SRC0_OFFSET] ldr r2, = 0x10001111 orr r1, r1, r2 str r1,[r0,#CLK_SRC0O_OFFSET]

(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。