新聞中心

        S3C2440 clock 工作原理

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

        2440的12M是Oscillator

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

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

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

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

        簡(jiǎn)單說一下,S3C2440的時(shí)鐘構(gòu)成。

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

        FCLK是CPU提供的時(shí)鐘信號(hào),如果提到CPU的主頻是400MHz,就是指的這個(gè)時(shí)鐘信號(hào)。

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

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

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

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

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

        鎖定時(shí)間計(jì)數(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í)候,需要先設(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è)置這兩個(gè)就可以了。還有一個(gè)時(shí)鐘控制寄存器CLKCON(0x4c00000c)向相應(yīng)位寫1使能相應(yīng)時(shí)鐘,不過一般默認(rèn)為1.

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

        S3C2440 clock 工作原理

        時(shí)間:2009-08-10 08:44來源: 作者:long 點(diǎn)擊:41次
          

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

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

        補(bǔ)充:
        AMBA總線

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

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

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

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


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

        功能描述

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

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

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

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

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

        通電重啟(XTIpll)

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

        USB時(shí)鐘控制

        FCLK, HCLK, PCLK
        FCLK 用于ARM920T
        HCLK 用于AHB總線,AHB總線被ARM920T用于,內(nèi)存控制器,中斷控制器,LCD控制器,DMA和USB host block.
        PCLK 用于APB總線,APB總線是用于周邊設(shè)備的,如是WDT,IIS, I2C, PWM 計(jì)數(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將會(huì)在HCLK下工作.這種特性可以用來在不影響HCLK和PCLK的情況下改變CPU頻率成原來的一半或更多.

        電源管理
        在S3C2440A中,電源管理模塊通過軟件來控制系統(tǒng)時(shí)鐘以達(dá)到減少電源功耗的功能.這些主題跟PLL,時(shí)鐘控制邏輯(FCLK,HCLK,PCLK)和喚醒信號(hào)有關(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代碼中沒有進(jìn)行設(shè)置,就用初始值.0



        HCLK = FCLK/4

        PCLK = FCLK/8

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

        MCLK:405MHz

        HCLK:135MHz

        PCLK:67.5MHz

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

        定時(shí)器0示例代碼:

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

        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; //時(shí)鐘頻率為PCLK/8
        6 //除以1000000表示進(jìn)行微秒級(jí)延時(shí)
        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); //停止定時(shí)器0
        18
        19 }
        20
        21 void T0DelayNms(UINT16 t)
        22 {
        23 rTCFG1 &= ~0x0F;
        24 rTCFG1 |= 2;
        25 rTCNTB0 =(S3C2440PCLK)/8/1000; //時(shí)鐘頻率為PCLK/8
        26 //除以1000表示進(jìn)行毫級(jí)延時(shí)
        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); //停止定時(shí)器0
        37 }



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

        評(píng)論


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

        關(guān)閉
        主站蜘蛛池模板: 萍乡市| 四川省| 瓮安县| 海宁市| 双辽市| 当雄县| 林口县| 梁山县| 农安县| 来安县| 溆浦县| 沙洋县| 黔东| 晋州市| 汉沽区| 宁河县| 西安市| 德江县| 英超| 临夏市| 云浮市| 英山县| 锡林郭勒盟| 措美县| 丹东市| 同心县| 瑞昌市| 武定县| 张家港市| 天镇县| 望城县| 双江| 抚顺市| 汝南县| 唐河县| 叙永县| 巨鹿县| 房山区| 昔阳县| 迭部县| 曲松县|