如何讓時(shí)鐘初始化
一、1 時(shí)鐘脈沖信號(hào)
時(shí)鐘脈沖信號(hào):按一定的電壓幅度,一定的時(shí)間間隔連續(xù)發(fā)出的脈沖信號(hào)。時(shí)鐘脈沖信號(hào)是時(shí)序邏輯的基礎(chǔ),它用于決定邏輯單元中的狀態(tài)何時(shí)更新。數(shù)字芯
片中眾多的晶體管都工作在開(kāi)關(guān)狀態(tài),它們的導(dǎo)通和關(guān)斷動(dòng)作無(wú)不是按照時(shí)鐘信號(hào)的節(jié)奏進(jìn)行的。
1.2 時(shí)鐘脈沖頻率
時(shí)鐘脈沖頻率:在單位時(shí)間(如1秒)內(nèi)產(chǎn)生的時(shí)鐘脈沖個(gè)數(shù)。
1.3 信號(hào)產(chǎn)生-晶振
晶振全稱晶體振蕩器,是用石英晶體經(jīng)精密切割磨削并鍍上電極焊上引線做成。這種晶體有一個(gè)很重要的特性,如果給他通電,他就會(huì)產(chǎn)生機(jī)械振蕩,他們有一
個(gè)很重要的特點(diǎn),其振蕩頻率與他們的形狀,材料,切割方向等密切相關(guān)。由于石英晶體化學(xué)性能非常穩(wěn)定,熱膨脹系數(shù)非常小,其振蕩頻率也非常穩(wěn)定,由于控制幾何尺寸可以做到很精密,因此,其諧振頻率也很準(zhǔn)確。
晶體振蕩器時(shí)鐘的優(yōu)點(diǎn)包括結(jié)構(gòu)簡(jiǎn)單和噪聲低,以及可為客戶提供精確的定制頻率等方面;但另一方面,它的缺點(diǎn)也比較明顯,例如其頻率僅由晶體決定,通常是特定晶體被制成客戶所需的振蕩器,導(dǎo)致生產(chǎn)成本高、交貨周期較長(zhǎng),不利于客戶加快產(chǎn)品上市時(shí)間,而且難以獲得非標(biāo)準(zhǔn)的頻率。
1.3 信號(hào)產(chǎn)生-鎖相環(huán)
PLL(鎖相環(huán))合成器是一種更為復(fù)雜的系統(tǒng)時(shí)鐘源。通用PLL合成器需要一個(gè)外部晶體并包含一個(gè)能夠?qū)w的特定頻率加倍或分頻的集成鎖相環(huán)(PLL)電路。
1.3 信號(hào)產(chǎn)生-對(duì)比
典型的系統(tǒng)時(shí)鐘振蕩器源通常采用石英晶振,而更復(fù)雜的系統(tǒng)時(shí)鐘振蕩器源則是由PLL合成器提供。
1. 對(duì)于特定的時(shí)鐘頻率,采用PLL合成器可使用較便宜以及較低頻率晶振來(lái)代替昂貴的高頻晶振;
2. 對(duì)于需要多個(gè)時(shí)鐘頻率的系統(tǒng),采用PLL合成器通過(guò)分頻即可實(shí)現(xiàn),而此時(shí)采用晶振模塊則需要多個(gè)不同頻率的晶振。
因此相對(duì)于晶體振蕩器模塊,通過(guò)PLL合成器提供精確時(shí)鐘具有成本更低、占板面積更小等一系列優(yōu)點(diǎn)。
二.時(shí)鐘體系
2.1 2440時(shí)鐘體系
①晶振多少Hz》》》12MHz
②PLL有哪些?????? ? MPLL,和UPLL
③PLL=>時(shí)鐘?????? ? MPLL產(chǎn)生了FCLK、HCLK、PCLK;UPLL產(chǎn)生了UCLK
④時(shí)鐘做什么?
S3C2440可以使用外部晶振(XTIpll)(默認(rèn)為12MHZ)和外部時(shí)鐘(EXTCLK)兩種方式輸入時(shí)鐘信號(hào)。它由跳線OM[3:2]決定。 S3C2440 默認(rèn)的工作主頻為12MHz
(晶振頻率),S3C2440有兩個(gè)PLL:MPLL和UPLL。通過(guò)MPLL會(huì)產(chǎn)生三個(gè)部分的時(shí)鐘頻率:FCLK、HCLK、PLCK。UPLL則負(fù)責(zé)產(chǎn)生USB所需時(shí)鐘UCLK。
三.1 時(shí)鐘初始化流程
1、上電幾毫秒后,晶振輸出穩(wěn)定,F(xiàn)CLK=晶振頻率,nRESET信號(hào)恢復(fù)高電平后,CPU開(kāi)始執(zhí)行指令。
2、我們的程序開(kāi)頭啟動(dòng)MPLL,設(shè)置MPLL的寄存器
3、在設(shè)置MPLL的寄存器后,需要等待一段時(shí)間(LockTime),MPLL的輸出才穩(wěn)定。在這段時(shí)間(Lock Time)內(nèi),F(xiàn)CLK停振,CPU停止工作。Lock Time的長(zhǎng)短由寄存器LOCKTIME設(shè)定。
4、Lock Time之后,MPLL輸出正常,CPU工作在新的FCLK下。
四、代碼編寫
#define CLKDIVN 0x4c000014????????????????????????? ? 定義CLKDIVN位置
#define MPLLCON 0x4c000004????????????????????????? ? 定義MPLLCON位置
#define MPLL_405MHz (127<<12)|(4<<4)|(1<<0)????????? ?設(shè)置MPLL在405MHz下需要哪些位,直接左移得到
clock_init:
????ldr r0, =CLKDIVN??????????????????????????????? ? 之前的都錯(cuò)了,ldr偽指令是把CLKDIVN放入r0
????mov r1, #0x5????????????????????????????????????? 設(shè)置HDIVN為10.FCLK/4;PDIVN為0,HCLK/2。FCLK:HCLK:PCLK = 1:4:8
????str r1, [r0]????????????????????????????????????? 設(shè)置好后,存入CLKDIVN寄存器
????mcr p15,0,r0,c1,c0,0????????????????????????????? note中的進(jìn)入異步模式
????orr r0,r0,#0xc0000000
????mcr p15,0,r0,c1,c0,0
????ldr r0, =MPLLCON??????????????????????????? ? ? ? ?設(shè)置PLL輸出:把r0中放入MPLLCON
????ldr r1, =MPLL_405MHz???????????????????????????????r1設(shè)置好位
????str r1, [r0]????????????????????????????????????? ?存入寄存器MPLLCON
????mov pc, lr
? ? ? ? ? ? ?
?
?