新聞中心

S3C2440 clock 工作原理

作者: 時間:2016-11-21 來源:網(wǎng)絡(luò) 收藏
OSC是用無源晶振,EXT是用有源晶振或外部時鐘2440的12M是Oscillator 是有源的呀!

2440的12M是Oscillator

本文引用地址:http://butianyuan.cn/article/201611/319127.htm
Crystal 無源晶體
Oscillator 有源晶體(里面有有源器件)
無源晶振內(nèi)只有一片按一定軸向切割的石英晶體薄片,供接入運放(或微處理器的XTAL端)以形成振蕩.有源晶振內(nèi)帶運放,工作在最佳狀態(tài),電源后,可直接輸出一定頻率的等幅正弦波,一般至少有4引腳,體積稍大.

準(zhǔn)備先不跑系統(tǒng),把S3C2440和周邊硬件熟悉一下再說。

對于任何一個單片機,要使用它首先就要弄明白他的時鐘系統(tǒng),MCU的時鐘就像人的心臟,跳動的快慢,決定著系統(tǒng)的工作速度。S3C2440的datesheet上說,可以達(dá)到400M,但是也不是說,必須在400M的頻率下工作,主時鐘晶振來自于外部晶振(XTIPLL)或者是外部時鐘(EXTCLK)。時鐘生成器包含了一個振蕩器(振蕩放大器),其連接外部晶振,并且還有2個PLL,可以產(chǎn)生需要的高頻。

通過引腳OM[3:2]來決定時鐘源是Crystal還是EXTCLK,不過我用的開發(fā)板將OM[3:2]固定接地了,都是用外部晶振。有一點值得注意,在對MPLLCON寫入有效值之前,系統(tǒng)使用外部晶振或外部時鐘源的時鐘。即使用戶不準(zhǔn)備改變MPLLCON的值,也應(yīng)當(dāng)重新寫一次。

簡單說一下,S3C2440的時鐘構(gòu)成。

S3C2440具有2個PLL(Phase Locked Loop:用來產(chǎn)生高頻的電路),一個是MPLL, 用于產(chǎn)生FCLK, HCLK, PCLK三種頻率, 這三種頻率分別有不同的用途:

FCLK是CPU提供的時鐘信號,如果提到CPU的主頻是400MHz,就是指的這個時鐘信號。

HCLK是為AHB總線提供的時鐘信號, Advanced High-performance Bus,主要用于高速外設(shè),比如內(nèi)存控制器,中斷控制器,LCD控制器, DMA 以及USB host 。

PCLK是為APB總線提供的時鐘信號,Advanced Peripherals Bus,主要用于低速外設(shè),比如WATCHDOG,IIS, I2C, SDI/MMC, GPIO,RTC ,UART,PWM,ADC and SPI等等。

另外一個是UPLL,專門用于驅(qū)動USB host/Device。并且驅(qū)動USB host/Device的頻率必須為48MHz。

在系統(tǒng)復(fù)位之后,如果沒有設(shè)定PLL,則采用外部晶振的頻率作為FCLK,同時FCLK:HCLK:PCLK的比例關(guān)系為1:1:1。

下面說一些跟時鐘有關(guān)的寄存器設(shè)置:通過改變CLKDIVN可以改變FCLK,HCLK,PCLK的分頻比。

鎖定時間計數(shù)寄存器LOCKTIME(0x4c000000):一般使用默認(rèn)就可以。

鎖相環(huán)控制寄存器[MPLLCON(0x4c000004)&UPLLCON(0x4c000008)]:

MPLL=(2*m*Fin)/(p*2^s) UPLL=(m*Fin)/(p*2^s)

其中m=(MDIV+8),p=(PDIV+2),s=SDIV

P,M范圍:1<=P<=62,1<=M<=248

注意:MDIV[19:12],PDIV[9:4],SDIV[1:0],當(dāng)設(shè)置MPLL和UPLL值的時候,需要先設(shè)置UPLL再設(shè)置MPLL。

例如:MPLLCON = (92<<12) | (1<<4) |(1);//FCLK=400M

這里MDIV=92,PDIV=1,SDIV=1,那么m=100,p=3,s=1,且Fin=12M,所以FCLK=400M

再設(shè)置CLKDIVN=0x03;//FCLK:HCLK:PCLK=1:2:4

這里CLKDIVN(0x4c000014)用于決定三者的分配比例

一般設(shè)置這兩個就可以了。還有一個時鐘控制寄存器CLKCON(0x4c00000c)向相應(yīng)位寫1使能相應(yīng)時鐘,不過一般默認(rèn)為1.

關(guān)于時鐘方面基本就是這么多了。

S3C2440 clock 工作原理

時間:2009-08-10 08:44來源: 作者:long 點擊:41次
  

overview
時鐘和電源管理這一塊內(nèi)容包括三個部分:時鐘控制, USB控制, 電源控制

s3c2440a的CPU上,時鐘控制邏輯可以產(chǎn)生需要的時鐘信號,包括給CPU用的FCLK, 給AHB總線外設(shè)用的HCLK以及給APB總線外設(shè)用的PCLK.S3C2440A含有兩個鎖相環(huán):一個是FCLK, HCLK和PCLK, 還有另外一個專門用于USB單元(48Hz).時鐘控制邏輯可以在沒有PLL的時候使時鐘變慢,并且可以用軟件的方法使時鐘與周邊設(shè)備連接與斷開, 這個功能可以節(jié)省功耗.

補充:
AMBA總線

先進的微控制器總線體系結(jié)構(gòu)AMBA規(guī)范定義了三種總線:

(1)AHB(Advanced High-performance Bus):用于連接高性能系統(tǒng)模塊。它支持突發(fā)數(shù)據(jù)傳輸方式及單個數(shù)據(jù)傳輸方式,所有時序參考同一個時鐘沿;

(2)ASB(Advanced System Bus):用于連接高性能系統(tǒng)模塊,它支持突發(fā)數(shù)據(jù)傳輸模式;

(3)APB(Advance Peripheral Bus):是一個簡單接口支持低性能的外圍接口。


對于電源控制邏輯,S3C2440A有不同的電源管理的主題,來對某一項任務(wù)來優(yōu)化電源功耗.S3C2440A中的電源管理單元可以有四種模式: 普通模式, SLOW 模式, IDLE模式, SLEEP模式.

功能描述

時鐘架構(gòu)
時鐘產(chǎn)生器包括一個連接在外部crystal上的晶振,并且有兩用于產(chǎn)生S3C2440A所需要的高頻信號的鎖相環(huán).

時鐘源的選擇
下表顯示了芯片模式控制引腳(OM3和OM2)的選擇與S3C2440A時鐘源的關(guān)系.

注意:
1) 盡管重啟后,MPLL會啟動,但是直到軟件正確設(shè)置了MPLLCON寄存器后,MPLL的輸出才作為系統(tǒng)的時鐘.在正確的設(shè)置被設(shè)置前,來自外部的crystal或extclk源直接作為系統(tǒng)時鐘.即使用戶并不想改變MPLLCON寄存器的默認(rèn)值,用戶應(yīng)該在MPLLCON的寄存器中設(shè)置同樣的值.
2) OM[3:2]用于決定測試模式,當(dāng)OM[1:0]是11的時候.

鎖相環(huán)
在時鐘產(chǎn)生器中的MPLL,作為一個電路,作用是在頻率與相伴上同步輸出信號與一個參考輸入信號.

時鐘控制邏輯
時鐘控制邏輯決定使用的信號源,PLL時鐘或外部時鐘. 當(dāng)PLL配置成一個新的頻率時,時鐘控制邏輯中止FCLK的使用,直到使用PLL鎖時間的PLL的輸出穩(wěn)定后. 這種時鐘控制邏輯在通電重啟或從節(jié)電模式中醒來都起作用.

通電重啟(XTIpll)

在普通模式中變換PLL的設(shè)置

USB時鐘控制

FCLK, HCLK, PCLK
FCLK 用于ARM920T
HCLK 用于AHB總線,AHB總線被ARM920T用于,內(nèi)存控制器,中斷控制器,LCD控制器,DMA和USB host block.
PCLK 用于APB總線,APB總線是用于周邊設(shè)備的,如是WDT,IIS, I2C, PWM 計數(shù)器, MMC接口, ADC, UART, GPIO, RTC 和SPI

注意:
1) CLKDIVN必須小心設(shè)置,不要超過HCLK和PCLK的允許范圍.
2) 如果HDIVN不是0,CPU總線模式必須從快速總線模式轉(zhuǎn)換到異步總線模式,通過使用下面的指令來達(dá)到.(S3C2440不支持同步總線模式)
MMU_SetAsyncBusMode
mrc p15, 0, r0, c1, c0, 0
orr r0, r0, #R1_nF:OR:R1_iA
mcr p15, 0, r0, c1, c0, 0
如果HDIVN不是0, 并且CPU總線模式是快速總線模式,那么CPU將會在HCLK下工作.這種特性可以用來在不影響HCLK和PCLK的情況下改變CPU頻率成原來的一半或更多.

電源管理
在S3C2440A中,電源管理模塊通過軟件來控制系統(tǒng)時鐘以達(dá)到減少電源功耗的功能.這些主題跟PLL,時鐘控制邏輯(FCLK,HCLK,PCLK)和喚醒信號有關(guān).

S3C2440A有四種電源模式.下面的部分描述各種模式.各種模式之間的轉(zhuǎn)換并不是隨意的.

FCLK的值如何得到?

FCLK= Fout = 2 * m * Fin / (p*2^s), Fvco = 2 * m * Fin / p where : m=MDIV+8, p=PDIV+2, s=SDIV

MPLLVal [M:7fh,P:2h,S:1h] bootloader打印出來的信息.

code

mov r1, #0x4c000000

ldr r2, =0x7f021

str r2, [r1, #0x04]

與BOOTLOADER里打印出來的一樣.

^ 代表冪

So, FCLK =2* (127+8)*12M/4*2=405M

關(guān)于HCLK, PCLK的值,取決于CLKDIVN的值.

代碼如下:

mov r1, #0x4c000000

ldr r2, 0x5

str r2, [r1, #0x14]

所以CLKDIVN=5, HDIVN=10, PDIVN=1, 再看CAMDIVN

10: HCLK = FCLK/4 when CAMDIVN[9]=0

HCLK = FCLK/8 when CAMDIVN[9]=1

PCLK = HCLK /2

CAMDIVN代碼中沒有進行設(shè)置,就用初始值.0



HCLK = FCLK/4

PCLK = FCLK/8

至此, clock部分設(shè)置結(jié)束.

MCLK:405MHz

HCLK:135MHz

PCLK:67.5MHz

在這里定時器時鐘頻率為PCLK/8=67.5/8=8.4375MHz

定時器0示例代碼:

轉(zhuǎn)載請注明出處,謝謝!

1 void T1DelayNus(UINT16 t)
2 {
3 rTCFG1 &= ~(0x0F<<4);
4 rTCFG1 |= (2<<4);
5 rTCNTB1 =(S3C2440PCLK)/8/1000000;
6 rTCON &= ~(0x0F<<8);
7 rTCON |= (1<<11)|(1<<9)|(1<<8);
8 rTCON &= ~(1<<9);
9
10
11 while(t--)
12 {
13
14 while(rTCNTO1!=(rTCNTB1-1));
15
16 }
17
18 rTCON &= ~(1<<8);
19
20 }
21
22
23 void T1DelayNms(UINT16 t)
24 {
25 rTCFG1 &= ~(0x0F<<4);
26 rTCFG1 |= (2<<4);
27 rTCNTB1 =(S3C2440PCLK)/8/1000;
28 rTCON &= ~(0x0F<<8);
29 rTCON |= (1<<11)|(1<<9)|(1<<8);
30 rTCON &= ~(1<<9);
31
32
33 while(t--)
34 {
35 while(rTCNTO1!=(rTCNTB1-1));
36 }
37
38 rTCON &= ~(1<<8);
39
40 }

特別是要注意rTCNTOn與rTCNTBn的關(guān)系。

1 void T0DelayNus(UINT16 t)
2 {
3 rTCFG1 &= ~0x0F;
4 rTCFG1 |= 2;
5 rTCNTB0 =(S3C2440PCLK)/8/1000000; //時鐘頻率為PCLK/8
6 //除以1000000表示進行微秒級延時
7 rTCON &= ~0x0F;
8 rTCON |= (1<<3)|(1<<1)|(1<<0);
9 rTCON &= ~(1<<1);
10
11
12 while(t--)
13 {
14 while(rTCNTO0!=(rTCNTB0-1));
15 }
16
17 rTCON &= ~(1<<0); //停止定時器0
18
19 }
20
21 void T0DelayNms(UINT16 t)
22 {
23 rTCFG1 &= ~0x0F;
24 rTCFG1 |= 2;
25 rTCNTB0 =(S3C2440PCLK)/8/1000; //時鐘頻率為PCLK/8
26 //除以1000表示進行毫級延時
27 rTCON &= ~0x0F;
28 rTCON |= (1<<3)|(1<<1)|(1<<0);
29 rTCON &= ~(1<<1);
30
31 while(t--)
32 {
33 while(rTCNTO0!=(rTCNTB0-1));
34 }
35
36 rTCON &= ~(1<<0); //停止定時器0
37 }



關(guān)鍵詞: S3C2440clock工作原

評論


技術(shù)專區(qū)

關(guān)閉