在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            S3C2440系統(tǒng)時鐘

            作者: 時間:2016-11-21 來源:網(wǎng)絡(luò) 收藏
            MINI2440開發(fā)板在沒有開啟時鐘前,整個開發(fā)板全靠一個12MHz的晶振提供頻率來運行,也就是說CPU,內(nèi)存,UART等需要用到時鐘頻率的硬件都工作12MHz下,而S3C2440A可以正常工作在400MHz下,兩者速度相差可想而知,就好比牛車和動車。如果CPU工作在12MHz頻率下,開發(fā)板的使用效率非常低,所有依賴系統(tǒng)時鐘工作的硬件,其工作效率也很低,比如,我們電腦里面經(jīng)常提到的超頻,超頻就是讓CPU工作在更高的頻率下,讓電腦運算速度更快,雖然頻率是越高越好,但是由于硬件特性決定了任何一個設(shè)備都不可能無止境的超頻,電腦超頻時要考慮到CPU或主板發(fā)熱過大,燒壞的危險,同樣開發(fā)板的主板上的外設(shè)和CPU也有一個頻率限度,ARM920T內(nèi)核的S3C2440的最高正常工作頻率如下:

            l FCLK:400MHz

            本文引用地址:http://www.biyoush.com/article/201611/319286.htm

            l HCLK:100MHz

            l PCLK:50MHz

            既然如此,那么怎樣讓CPU工作在400MHz,讓牛車速度提高到動車的速度呢?

            1 系統(tǒng)工作時鐘頻率

            在對系統(tǒng)時鐘進(jìn)行提速之前,讓我們先來了解下S3C2440上的工作時鐘頻率,F(xiàn)CLK,HCLK,PCLK,其中FCLK主要為ARM920T內(nèi)核提供工作頻率,如圖2-44所示:

            圖2-44 ARM920T內(nèi)核結(jié)構(gòu)

            HCLK主要為S3C2440 AHB總線(Advanced High performance Bus)上掛接硬件提供工作頻率,AHB總線主要掛接有內(nèi)存,NAND,LCD控制器等硬件,如圖2-45所示:

            圖2-45 S3C2440 AHB總線上掛接硬件

            PCLK主要為APB總線提供工作頻率,由圖2-46所示,APB總線主要掛接UART串口,Watchdog等硬件控制器。

            圖2-46 S3C2440 APB總線掛接硬件

            也就是說,對于一些需要時鐘工作的硬件,如果切斷其時鐘源,就不會再工作,從而達(dá)到降低功耗的目的,這也是便攜嵌入式設(shè)備里的一個特點。

            時鐘源:為了減少外界環(huán)境對開發(fā)板電磁干擾,降低制作成本,通常開發(fā)板的外部晶振時鐘頻率都很低,MINI2440開發(fā)板由12MHz的晶振來提供時鐘源,要想讓CPU運行在更高的頻率就要通過時鐘控制邏輯單元PLL(鎖相環(huán))來提高主頻。

            S3C2440里有兩個PLL:MPLL和UPLL,MPLL用來產(chǎn)生FCLK,HCLK,PCLK的高頻工作時鐘,UPLL用來為USB提供工作頻率。

            圖2-47系統(tǒng)時鐘初始化時序

            開發(fā)板上電后,晶振OSC開始提供晶振時鐘,由于系統(tǒng)剛剛上電,電壓信號等都還不穩(wěn)定,這時復(fù)位信號(nRESET)拉低,這時MPLL雖然默認(rèn)啟動,但是如果不向MPLLCON中寫入值,那么外部晶振則直接作為系統(tǒng)時鐘FCLK,過幾毫秒后,復(fù)位信號上拉,CPU開始取指運行,這時可以通過代碼設(shè)置啟動MPLL,MPLL啟動需要一定鎖定時間(LockTime),這是因為MPLL輸出頻率還沒有穩(wěn)定,在這期間FCLK都停止輸出,CPU停止工作,過了LockTime后時鐘穩(wěn)定輸出,CPU工作在新設(shè)置的頻率下,這時可以通過設(shè)置FCLK,HCLK和PCLK三者的頻率比例來產(chǎn)生不同總線上需要的不同頻率,下面詳細(xì)介紹開啟MPLL的過程:

            l 設(shè)置LockTime變頻鎖定時間

            l 設(shè)置FCLK與晶振輸入頻率(Fin)的倍數(shù)

            l 設(shè)置FCLK,HCLK,PCLK三者之間的比例

            LockTime變頻鎖定時間由LOCKTIME寄存器(見下表)來設(shè)置,由于變頻后開發(fā)板所有依賴時鐘工作的硬件都需要一小段調(diào)整時間,該時間計數(shù)通過設(shè)置LOCKTIME寄存器[31:16]來設(shè)置UPLL(USB時鐘鎖相環(huán))調(diào)整時間,通過設(shè)置LOCKTIME寄存器[15:0]設(shè)置MPLL調(diào)整時間,這兩個調(diào)整時間數(shù)值一般用其默認(rèn)值即可。

            表2-8變頻鎖定時間寄存器(LOCKTIME)

            寄存器名

            地址

            是否讀寫

            描述

            復(fù)位默認(rèn)值

            LOCKTIME

            0x4C000000

            R/W

            變頻鎖定時間寄存器

            0xFFFFFFFF

            LOCKTIME

            描述

            初始值

            U_TIME

            [31:16]

            UPLL對UCLK的鎖定時間值

            (U_TIME:300us)

            0xFFFF

            M_TIME

            [15:0]

            MPLL對于FCLK,HCLK,PCLK的鎖定時間值(M_TIME:300us)

            0xFFFF

            FCLK與Fin的倍數(shù)通過MPLLCON寄存器設(shè)置,三者之前有以下關(guān)系:

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

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

            當(dāng)設(shè)置完MPLL之后,就會自動進(jìn)入LockTime變頻鎖定期間,LockTime之后,MPLL輸出穩(wěn)定時鐘頻率。

            表2-9 MPLL配置寄存器(MPLLCON)

            寄存器名

            地址

            是否讀寫

            描述

            復(fù)位默認(rèn)值

            MPLLCON

            0x4C000004

            R/W

            MPLL配置寄存器

            0x00096030

            MPLLCON

            描述

            初始值

            MDIV

            [19:12]

            分頻器控制位

            0x96

            PDIV

            [9:4]

            預(yù)分頻器控制位

            0x03

            SDIV

            [1:0]

            后分頻器控制位

            0x0

            通過上述算法比較難以找到合適的PLL值,下表給出了官方推薦的一些MPLL參考設(shè)置:

            表2-10官方推薦MPLL

            FCLK,HCLK,PCLK三者之間的比例通過CLKDIVN寄存器進(jìn)行設(shè)置,S3C2440時鐘設(shè)置時,還要額外設(shè)置CAMDIVN寄存器,如下表,HCLK4_HALF,HCLK3_HALF分別與CAMDIVN[9:8]對應(yīng),下表列出了各種時鐘比例:

            表2-11 FCLK HCLK PCLK設(shè)置比例

            如果HDIV設(shè)置為非0,CPU的總線模式要進(jìn)行改變,默認(rèn)情況下FCLK = HCLK,CPU工作在fast bus mode快速總線模式下,HDIV設(shè)置為非0后,F(xiàn)CLK與HCLK不再相等,要將CPU改為asynchronous bus mod異步總線模式,可以通過下面的嵌入?yún)R編代碼實現(xiàn):

            __asm{

            mrc p15, 0, r1, c1, c0, 0

            orr r1, r1, #0xc0000000

            mcr p15, 0, r1, c1, c0, 0

            }

            關(guān)于mrc與mcr指令,請查看MMU與內(nèi)存保護(hù)的實現(xiàn)章節(jié)。

            表2-12時鐘分頻器控制寄存器(CLKDIVN)

            寄存器名

            地址

            是否讀寫

            描述

            復(fù)位默認(rèn)值

            CLKDIVN

            0x4C000014

            R/W

            時鐘分頻器控制寄存器

            0x00000000

            CLKDIVN

            描述

            初始值

            DIV_UPLL

            [3]

            UCLK選擇寄存器(UCLK必須對USB提供48MHz)

            0:UCLK=UPLL clock

            1:UCLK=UPLL clock/2

            0

            HDIVN

            [2:1]

            00:HCLK = FCLK/1

            01:HCLK = FCLK/2

            10:HCLK = FCLK/4,當(dāng)CAMIVN[9]=0

            HCLK = FCLK/8,當(dāng)CAMIVN[9]=1

            11: HCLK = FCLK/3,當(dāng)CAMIVN[8]=0

            HCLK = FCLK/6,當(dāng)CAMIVN[8]=1

            0

            PDIVN

            [0]

            0:PCLK是和HCLK/1相同時鐘

            1:PCLK是和HCLK/2相同時鐘

            0

            表2-13攝像頭時鐘分頻控制寄存器(CAMDIVN)

            寄存器名

            地址

            是否讀寫

            描述

            復(fù)位默認(rèn)值

            CAMDIVN

            0x4C000018

            R/W

            攝像頭時鐘分頻控制寄存器

            0x00000000

            CAMDIVN

            描述

            初始值

            HCLK4_HALF

            [9]

            HDIVN分頻因子選擇位(當(dāng)CLKIVN[2:1]位為10b時有效)

            0: HCLK=FCLK/4

            1: HCLK=FCLK/8

            0

            HCLK3_HALF

            [8]

            HDIVN分頻因子選擇位(當(dāng)CLKIVN[2:1]位為11b時有效)

            0: HCLK=FCLK/3

            1: HCLK=FCLK/6

            0

            2 時鐘驅(qū)動實驗

            系統(tǒng)時鐘驅(qū)動可以分別用ARM匯編和C語言兩個版本實現(xiàn)。

            ARM匯編版本:

            ;以下為時鐘相關(guān)寄存器地址

            LOCKTIME EQU 0x4c000000

            MPLLCON EQU 0x4c000004

            CLKDIVN EQU 0x4c000014

            CAMDIVN EQU 0x4c000018

            clock_init ; 時鐘初始化代碼

            ; 設(shè)置變頻鎖定時間

            ldr r0, =LOCKTIME

            ldr r1, =0x00ffffff

            str r1, [r0]

            ; 設(shè)置分頻比FCLK:HCLK:PCLK=1:4:8

            ; 由于CAMDIVN[9]位初始值為0,寄存器CAMDIVN未使用,這兒不用再設(shè)置其值

            ldr r0, =CLKDIVN

            mov r1, #0x05

            str r1, [r0]

            ; 修改CPU總線模式

            mrc p15, 0, r1, c1, c0, 0

            orr r1, r1, #0xc0000000

            mcr p15, 0, r1, c1, c0, 0

            ldr r0, =MPLLCON

            ldr r1, =0x5c011 ; MPLL = 400MHz

            str r1, [r0]

            mov pc, lr ; 函數(shù)調(diào)用返回

            該匯編代碼入口處先設(shè)置了變頻鎖定時間為0x00ffffff,然后設(shè)置FCLK:HCLK:PCLK的分頻比,由于系統(tǒng)時鐘已經(jīng)改變,需要修改CPU總線模式,最后設(shè)置系統(tǒng)時鐘工作頻率。

            C語言版本:

            LOCKTIME = 0x00ffffff;

            CLKDIVN = 0x05;

            __asm{

            mrc p15, 0, r1, c1, c0, 0

            orr r1, r1, #0xc0000000

            mcr p15, 0, r1, c1, c0, 0
            }

            MPLLCON = MPLL_400MHz;

            }

            C語言版本與匯編版本一樣,只是由于修改CPU總線模式時要使用mrc指令,因此只能使用C語言嵌入?yún)R編方式來實現(xiàn)。

            系統(tǒng)時鐘驅(qū)動實驗:

            ;

            ;系統(tǒng)時鐘初始化實驗

            ;

            WTCON EQU 0x53000000 ; 看門狗控制寄存器

            WTDAT EQU 0x53000004 ; 看門狗數(shù)據(jù)寄存器

            LOCKTIME EQU 0x4c000000 ; 變頻鎖定時間寄存器

            MPLLCON EQU 0x4c000004 ; MPLL寄存器

            CLKDIVN EQU 0x4c000014 ; 分頻比寄存器

            GPBCON EQU 0x56000010 ; LED控制寄存器

            GPBDAT EQU 0x56000014 ; LED數(shù)據(jù)寄存器

            GPBUP EQU 0x56000018 ; 上拉電阻設(shè)置寄存器

            DELAYVAL EQU 0x8fff ; 延時數(shù)值

            AREA CLOCK, CODE, READONLY

            ENTRY
            start

            ldr r0, = 0x53000000 ; 看門狗關(guān)閉代碼

            mov r1, #0

            str r1, [r0]

            bl clock_init ; 調(diào)用時鐘初始化函數(shù)

            bl led_on ; 調(diào)用點亮Led函數(shù)

            clock_init ; 時鐘初始化代碼

            ; 設(shè)置鎖頻時間

            ldr r0, =LOCKTIME ; 取得LOCKTIME寄存器地址

            ldr r1, =0x00ffffff ; LOCKTIME寄存器設(shè)置數(shù)據(jù)

            str r1, [r0] ; 將LOCKTIME設(shè)置數(shù)據(jù)寫入LOCKTIME寄存器

            ; 設(shè)置分頻數(shù)

            ldr r0, =CLKDIVN ; 取得CLKDIVN寄存器地址

            mov r1, #0x05 ; CLKDIVN寄存器設(shè)置數(shù)據(jù)

            str r1, [r0] ; 將CLKDIVN設(shè)置數(shù)據(jù)寫入CLKDIVN寄存器

            ; 修改CPU總線模式

            mrc p15, 0, r1, c1, c0, 0

            orr r1, r1, #0xc0000000

            mcr p15, 0, r1, c1, c0, 0

            ldr r0, =MPLLCON

            ldr r1, =0x5c011 ; MPLL is 400MHz

            str r1, [r0]

            mov pc, lr

            led_on ; 亮點Led函數(shù)

            ; Led初始化開始

            ldr r0,=GPBCON ; 將LED控制寄存器地址放入r0

            ldr r1,[r0] ; 將控制寄存器里的值讀出放入r1

            bic r1,r1,#0x3fc00 ; 將r1里的值(控制寄存器里的值)

            ; bit[10]~bit[17]清位,其它位不變

            orr r1,r1,#0x15400 ; 設(shè)置控制寄存器

            str r1,[r0] ; 將r1里的值寫入控制寄存器

            ; 禁止GPF4-GPF7端口的上拉電阻

            ldr r0,=GPBUP

            ldr r1,[r0]

            orr r1,r1,#0x1e0

            str r1,[r0]

            ; Led初始化結(jié)束

            led_loop ; 循環(huán)點亮Led

            ldr r2,=GPBDAT ; 將LED數(shù)據(jù)寄存器的地址放入r2

            ldr r3,[r2] ; 將數(shù)據(jù)寄存器(r2)里的值放入r3

            bic r3,r3,#0x1e0 ; 清除bit[5]~bit[8],bit[n]代表led1~led4

            orr r3,r3,#0x1c0 ; 清對應(yīng)Led位-亮燈,設(shè)置相應(yīng)位-滅燈(點亮led1)

            str r3,[r2] ; 將控制亮燈數(shù)據(jù)寫入數(shù)據(jù)寄存器r2

            ldr r0,=DELAYVAL ; 設(shè)置延遲數(shù)

            bl delay ; 調(diào)用延遲子程序

            ldr r3,[r2] ; 將數(shù)據(jù)寄存器(r2)里的值放入r3

            bic r3,r3,#0x1e0 ; 清除bit[5]~bit[8],bit[n]代表led1~led4

            orr r3,r3,#0x1a0 ; 清對應(yīng)Led位-亮燈,設(shè)置相應(yīng)位-滅燈(點亮led2)

            str r3,[r2] ; 將控制亮燈數(shù)據(jù)寫入數(shù)據(jù)寄存器r2

            ldr r0,=DELAYVAL ; 設(shè)置延遲數(shù)

            bl delay ; 調(diào)用延遲子程序

            ldr r3,[r2] ; 將數(shù)據(jù)寄存器(r2)里的值放入r3

            bic r3,r3,#0x1e0 ; 清除bit[5]~bit[8],bit[n]代表led1~led4

            orr r3,r3,#0x160 ; 清對應(yīng)Led位-亮燈,設(shè)置相應(yīng)位-滅燈(點亮led3)

            str r3,[r2] ; 將控制亮燈數(shù)據(jù)寫入數(shù)據(jù)寄存器r2

            ldr r0,=DELAYVAL ; 設(shè)置延遲數(shù)

            bl delay ; 調(diào)用延遲子程序

            ldr r3,[r2] ; 將數(shù)據(jù)寄存器(r2)里的值放入r3

            bic r3,r3,#0x1e0 ; 清除bit[5]~bit[8],bit[n]代表led1~led4

            orr r3,r3,#0xe0 ; 清對應(yīng)Led位-亮燈,設(shè)置相應(yīng)位-滅燈(點亮led4)

            str r3,[r2] ; 將控制亮燈數(shù)據(jù)寫入數(shù)據(jù)寄存器r2

            ldr r0,=DELAYVAL ; 設(shè)置延遲數(shù)

            bl delay ; 調(diào)用延遲子程序

            b led_loop

            delay

            sub r0,r0,#1 ; r0=r0-1

            cmp r0,#0x0 ; 將r0的值與0相比較

            bne delay ; 比較的結(jié)果不為0,繼續(xù)調(diào)用delay

            mov pc,lr ; 返回

            END ; 程序結(jié)束符

            該實驗首先關(guān)閉了看門狗定時器,然后修改系統(tǒng)時鐘,將默認(rèn)系統(tǒng)工作頻率12MHz提高到400MHz,由于CPU工作在較高頻率下,其執(zhí)行速度明顯比未啟動系統(tǒng)時鐘時高的多,可以通過注釋掉系統(tǒng)時鐘初始化代碼跳轉(zhuǎn)指令bl clock_init,對比LED的跑馬燈效果可以證明。

            ++++++++++++++++++++++++++++++++++++++++++



            關(guān)鍵詞: S3C2440系統(tǒng)時

            評論


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

            關(guān)閉