日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

歷史上的今天

今天是:2024年10月14日(星期一)

正在發(fā)生

2018年10月14日 | Exynos4412裸機(jī)程序,時(shí)鐘操作

發(fā)布者:誰(shuí)與爭(zhēng)鋒1 來(lái)源: eefocus關(guān)鍵字:Exynos4412  裸機(jī)程序  時(shí)鐘操作 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

有了上一節(jié)《Exynos4412時(shí)鐘體系分析》的基礎(chǔ),這一節(jié)我們來(lái)做幾個(gè)和時(shí)鐘有關(guān)的實(shí)驗(yàn)。

其實(shí),Exynos 4412的 IROM代碼已經(jīng)設(shè)置了PLL,我們可以通過(guò)串口把IROM設(shè)置的PLL寄存器值打印出來(lái),這些值打印出來(lái)是這樣的(摘自韋東山老師的《嵌入式Linux系統(tǒng)開(kāi)發(fā)完全手冊(cè)_基于4412__上冊(cè)》):

CLK_SRC_CPU = 0x01000001

CLK_DIV_DMC0 = 0x00111713

CLK_DIV_DMC1 = 0x01011171

CLK_SRC_TOP0 = 0x01110000

CLK_SRC_TOP1 = 0x00001000

CLK_DIV_TOP = 0x00015470

CLK_SRC_LEFTBUS = 0x00000001

CLK_DIV_LEFTBUS = 0x00000013

CLK_SRC_RIGHTBUS = 0x00000001

CLK_DIV_RIGHTBUS = 0x00000013

APLL_LOCK = 0x00000960

MPLL_LOCK = 0x00000000

EPLL_LOCK = 0x00000FFF

VPLL_LOCK = 0x00000FFF

CLK_DIV_CPU0 = 0x00773730

CLK_DIV_CPU1 = 0x00000077

APLL_CON1 = 0x00003800

APLL_CON0 = 0xA0640301

MPLL_CON1 = 0x00003800

MPLL_CON0 = 0xA0640301

EPLL_CON2 = 0x00000080

EPLL_CON1 = 0x66010000

EPLL_CON0 = 0x00600302

VPLL_CON2 = 0x00000080

VPLL_CON1 = 0x66016000

VPLL_CON0 = 0x006F0302

CLK_SRC_CPU = 0x01000001

CLK_SRC_DMC = 0x00111000

CLK_SRC_TOP0 = 0x01110000

CLK_SRC_TOP1 = 0x00001000

現(xiàn)在來(lái)計(jì)算 ARMCLK的時(shí)鐘頻率:

由上一節(jié)《Exynos4412時(shí)鐘體系分析》的介紹我們知道,ARMCLK 有如下計(jì)算公式:

如下圖所示:

CLK_DIV_CPU0

由上邊打印的寄存器CLK_SRC_CPU 的值為:

十六進(jìn)制:0x01000001

二進(jìn)制:0000 0001 0000 0000 0000 0000 0000 0001

① BIT[0] 控制第1個(gè)MUX (即 MUXAPLL) ,該位值為1.

② BIT[16]控制 第2個(gè) MUX( 即MUXCORE) ,該位值為0.

所以由此看出ARMCLK時(shí)鐘走的是如下的路線:

ARM CLK

所以:ARMCLK = MUXCORE的輸出 / DIVCORE / DIVCORE2

ARMCLK = MDIV x FIN / (PDIV x 2 ^ SDIV) / (CORE_RATIO + 1) / (CORE2_RATIO + 1)

= 0x64 x 24MHz / (3 x 2 ^ 1) / (0 + 1) / (0 + 1)

= 400 MHz

 

本次實(shí)驗(yàn)涉及3個(gè)小實(shí)驗(yàn):

① 4.system_clock_disable_apll:不使用 APLL,讓CPU運(yùn)行于 24MHz 頻率,觀察 LED 閃爍是否變慢

② 5.system_clock_apll:重新設(shè)置APLL,讓 CPU 運(yùn)行于1.4GHz頻率,觀察 LED 閃爍是否變快

③ 6.system_clock_plls:參考廠家提供的u-boot代碼,設(shè)置所有PLL供后續(xù)章節(jié)使用

第一個(gè)小實(shí)驗(yàn)

實(shí)現(xiàn)的目標(biāo):不使用 APLL,讓CPU運(yùn)行于 24MHz 頻率,觀察 LED 閃爍是否變慢

一、程序說(shuō)明

我們?cè)谇耙粋€(gè)實(shí)驗(yàn),《Tiny4412之C語(yǔ)言實(shí)現(xiàn)流水燈》的基礎(chǔ)上修改。

start.S大部分相同,只是增加一條函數(shù)調(diào)用語(yǔ)句:

bl system_clock_init // 調(diào)用時(shí)鐘初始化函數(shù)

如下圖所示:

啟動(dòng)文件

啟動(dòng)文件

鏈接腳本system_clock.lds的內(nèi)容和上一個(gè)實(shí)驗(yàn)key.lds完全相同,只把名字改了改;Makefile的內(nèi)容也大部分一樣,也只是改了改里邊文件的名字,led.c文件和LED實(shí)驗(yàn)時(shí)完全相同,新增加了文件system_clock.c,代碼如下:

// CMU_CPU

#define CLK_SRC_CPU (*(volatile unsigned int *)0x10044200)

#define CLK_DIV_CPU0 (*(volatile unsigned int *)0x10044500)

#define CLK_DIV_CPU1 (*(volatile unsigned int *)0x10044504)

// CMU_DMC

#define CLK_SRC_DMC (*(volatile unsigned int *)0x10040200)

#define CLK_DIV_DMC0 (*(volatile unsigned int *)0x10040500)

#define CLK_DIV_DMC1 (*(volatile unsigned int *)0x10040504)

// CMU_TOP

#define CLK_SRC_TOP0 (*(volatile unsigned int *)0x1003C210)

#define CLK_SRC_TOP1 (*(volatile unsigned int *)0x1003C214)

#define CLK_DIV_TOP (*(volatile unsigned int *)0x1003C510)

// CMU_LEFTBUS

#define CLK_SRC_LEFTBUS (*(volatile unsigned int *)0x10034200)

#define CLK_DIV_LEFTBUS (*(volatile unsigned int *)0x10034500)

// CMU_RIGHTBUS

#define CLK_SRC_RIGHTBUS (*(volatile unsigned int *)0x10038200)

#define CLK_DIV_RIGHTBUS (*(volatile unsigned int *)0x10038500)

// locktime

#define APLL_LOCK (*(volatile unsigned int *)0x10044000)

#define MPLL_LOCK (*(volatile unsigned int *)0x10044008)

#define EPLL_LOCK (*(volatile unsigned int *)0x1003C010)

#define VPLL_LOCK (*(volatile unsigned int *)0x1003C020)

// APLL

#define APLL_CON1 (*(volatile unsigned int *)0x10044104)

#define APLL_CON0 (*(volatile unsigned int *)0x10044100)

// MPLL

#define MPLL_CON0 (*(volatile unsigned int *)0x10040108)

#define MPLL_CON1 (*(volatile unsigned int *)0x1004010c)

// EPLL

#define EPLL_CON2 (*(volatile unsigned int *)0x1003C118)

#define EPLL_CON1 (*(volatile unsigned int *)0x1003C114)

#define EPLL_CON0 (*(volatile unsigned int *)0x1003C110)

// VPLL

#define VPLL_CON0 (*(volatile unsigned int *)0x1003C120)

#define VPLL_CON1 (*(volatile unsigned int *)0x1003C124)

#define VPLL_CON2 (*(volatile unsigned int *)0x1003C128)

 

//函數(shù)名:

//system_clock_init

//功能: 初始化4412的系統(tǒng)時(shí)鐘

void system_clock_init(void)

{

  // IROM或BL1設(shè)置了APLL,

  //本程序設(shè)置不啟動(dòng)APLL,

  //而是使在晶振時(shí)鐘, 以體驗(yàn)一下LED閃燈變慢

  CLK_SRC_CPU = 0x0;

}

沒(méi)什么可說(shuō)的,很簡(jiǎn)單,前部分是后期會(huì)用到的一些寄存器地址的定義,主要的是下邊system_clock_init這個(gè)函數(shù),在這個(gè)函數(shù)中將CLK_SRC_CPU寄存器的值設(shè)為0,這樣ARMCLK的頻率將走下面這條路徑,設(shè)置為24MHZ:

ARM CLK_SETD

二、編譯、燒寫實(shí)驗(yàn)

按照前幾節(jié)介紹的方法,將程序上傳到服務(wù)器編譯,并燒寫到SD卡上,給開(kāi)發(fā)板上電,可以明顯感覺(jué)到LED閃爍的頻率大大降低,說(shuō)明我們?cè)O(shè)置的時(shí)鐘起作用了,這里就不上圖了(上了圖大家也看不出來(lái))。

第二個(gè)小實(shí)驗(yàn)

實(shí)現(xiàn)的目標(biāo):重新設(shè)置APLL,讓 CPU 運(yùn)行于1.4GHz頻率,觀察 LED 閃爍是否變快

一、程序說(shuō)明

文件同第一個(gè)小實(shí)驗(yàn),只是在它的基礎(chǔ)上對(duì)system_clock.c文件中的system_clock_init函數(shù)進(jìn)行修改:

//函數(shù)名: system_clock_init

//功 能: 初始化4412的系統(tǒng)時(shí)鐘

//最終結(jié)果: APLL=1.4GHz

void system_clock_init(void)

{

    // 1. 在設(shè)置APLL之前, 先設(shè)置時(shí)鐘源為晶振

    CLK_SRC_CPU = 0x0;

    // 2. 設(shè)置APLL

    

    // 2.1 設(shè)置鎖定時(shí)間: APLL_CON0中PDIV=3, 所以APLL_LOCK = 270x3 

    APLL_LOCK = 270 * 3;

     

    // 2.2 設(shè)置分頻參數(shù) 

    // CORE2_RATIO = 0;

    // APLL_RATIO = 2;

    // PCLK_DBG_RATIO = 1;

    // ATB_RATIO = 6;

    // PERIPH_RATIO = 7;

    // COREM1_RATIO = 7;

    // COREM0_RATIO = 3;

    // CORE_RATIO = 0;

    CLK_DIV_CPU0 = ((0<<28) | (2<<24) | (1<<20) | (6<<16) | (7<<12) | (7<<8) | (3<<4) | 0);

     

    // CORES_RATIO = 5;

    // HPM_RATIO = 0;

    // COPY_RATIO = 6;

    CLK_DIV_CPU1 = ((5 << 8) |(0 << 4) | (6));

     

    // 2.3 設(shè)置控制參數(shù)并使能PLL 

    // 默認(rèn)值 

    APLL_CON1 = 0x00803800;

     

    // 設(shè)置APLL的M,P,S值, APLL輸出 = 0xAF x 24MHz / (3 x 2 ^ 0) = 1.4GHz

    // 使能APLL

    APLL_CON0 = (1<<31 | 0xAF<<16 | 3<<8 | 0x0);

     

    // 3. 設(shè)置MUX, 使用APLL的輸出 

    CLK_SRC_CPU = 0x01000001;

}

注釋的已經(jīng)很清楚了,需要注意的就是:上電之后 IROM設(shè)置了APLL ,CPU工作于APLL提供的時(shí)鐘;當(dāng)我們要改變 APLL時(shí),要先使得CPU工作于另一個(gè)時(shí)鐘源,即晶振。設(shè)置完APLL后,再讓CPU重新工作于APLL提供的時(shí)鐘。

二、編譯、燒寫實(shí)驗(yàn)

按照前幾節(jié)介紹的方法,將程序上傳到服務(wù)器編譯,并燒寫到SD卡上,給開(kāi)發(fā)板上電,可以明顯感覺(jué)到LED閃爍的頻率大大提高(比《Tiny4412之C語(yǔ)言實(shí)現(xiàn)流水燈》時(shí)閃爍的還要快,因?yàn)楫?dāng)時(shí)CPU運(yùn)行在400MHZ,現(xiàn)在運(yùn)行在1.4GHZ),說(shuō)明我們?cè)O(shè)置的時(shí)鐘起作用了,這里就不上圖了(上了圖大家也看不出來(lái))。

第三個(gè)小實(shí)驗(yàn)

實(shí)現(xiàn)的目標(biāo):參考廠家提供的u-boot代碼,設(shè)置所有PLL供后續(xù)章節(jié)使用

一、程序說(shuō)明

文件同第一個(gè)小實(shí)驗(yàn),只是在它的基礎(chǔ)上對(duì)system_clock.c文件中的system_clock_init函數(shù)進(jìn)行修改:

// 函數(shù)名:

// system_clock_init

// 功能:

// 初始化4412的系統(tǒng)時(shí)鐘

// 最終結(jié)果:

// A=1400000000, M=800000000, E=96000000 V=350000000

// ARMCLK=1500000000, DMC=400000000, ACLK200=160000000

// ACLK100=100000000, ACLK160=160000000, ACLK133=133333333

void system_clock_init(void)

{

    // 1.設(shè)置CMU_CPU相關(guān) 

    CLK_SRC_CPU = 0x0; // 設(shè)置CMU_CPU部分中所有的MUX的源

     

    // 2.設(shè)置CMU_DMC相關(guān) 

    //

    CORE_TIMERS_RATIO = 0x0;

    COPY2_RATIO = 0x0;

    DMCP_RATIO = 0x1;

    DMCD_RATIO = 0x1;

    DMC_RATIO = 0x1;

    DPHY_RATIO = 0x1;

    ACP_PCLK_RATIO = 0x1;

    ACP_RATIO = 0x3;

    

    CLK_DIV_DMC0 = ((0x0 << 28) | (0x0 << 24) | (0x1 << 20) | (0x1 << 16) | (0x1 << 12) | (0x1 << 8) | (0x1 << 4) | (0x3));

    CLK_DIV_DMC1 = 0x07071713;

     

    // 3.設(shè)置CMU_TOP相關(guān) 

    //

    MUX_ONENAND_SEL = 0x0;

    MUX_ACLK_133_SEL = 0x0;

    MUX_ACLK_160_SEL = 0x0;

    MUX_ACLK_100_SEL = 0x0;

    MUX_ACLK_200_SEL = 0x0;

    MUX_VPLL_SEL = 0x1;

    MUX_EPLL_SEL = 0x1;

    

    CLK_SRC_TOP0 = ((0x0 << 28) | (0x0 << 24) | (0x0 << 20) | (0x0 << 16) | (0x0 << 12) | (0x1 << 8) | (0x1 << 4));

    CLK_SRC_TOP1 = 0x01111000;

     

    //

    ACLK_400_MCUISP_RATIO = 0x1;

    ACLK_266_GPS_RATIO = 0x2;

    ONENAND_RATIO = 0x1;

    ACLK_133_RATIO = 0x5;

    ACLK_160_RATIO = 0x4;

    ACLK_100_RATIO = 0x7;

    ACLK_200_RATIO = 0x4;

    

    CLK_DIV_TOP = ((0x1 << 24) | (0x2 << 20) | (0x1 << 16) | (0x5 << 12) | (0x4 << 8) | (0x7 << 4) | (0x4));

     

    // 3.設(shè)置CMU_LEFTBUS相關(guān) 

    CLK_SRC_LEFTBUS = 0x10;

     

    //

    GPL_RATIO = 0x1;

    GDL_RATIO = 0x3;

    

    CLK_DIV_LEFTBUS = ((0x1 << 4) | (0x3));

     

    // 4.設(shè)置CMU_RIGHTBUS相關(guān) 

    CLK_SRC_RIGHTBUS = 0x10;

     

    //

    GPR_RATIO = 0x1;

    GDR_RATIO = 0x3;

    

    CLK_DIV_RIGHTBUS = ((0x1 << 4) | (0x3));

     

    // 5.設(shè)置各個(gè)鎖相環(huán)(PLL)的locktime 

    APLL_LOCK = (0x3 * 270);

    MPLL_LOCK = (0x3 * 270);

    EPLL_LOCK = (0x2 * 3000);

    VPLL_LOCK = (0x2 * 3000);

    //

    APLL_RATIO = 0x2;

    CORE_RATIO = 0x0;

    CORE2_RATIO = 0x0;

    COREM0_RATIO = 0x3;

    COREM1_RATIO = 0x7;

    PERIPH_RATIO = 0x7;

    ATB_RATIO = 0x6;

    PCLK_DBG_RATIO = 0x1;

    

    CLK_DIV_CPU0 = ((0x0 << 28) | (0x2 << 24) | (0x1 << 20) | (0x6 << 16) | (0x7 <<12) | (0x7 << 8) | (0x3 << 4) | (0x0));

    //

    CORES_RATIO = 0x5;

    HPM_RATIO = 0x0;

    COPY_RATIO = 0x6;

    

    CLK_DIV_CPU1 = ((0x5 << 8) |(0x0 << 4) | (0x6));

     

    // 6.設(shè)置APLL = 1400000000 

    APLL_CON1 = 0x00803800;

    APLL_CON0 = (1<<31 | 0xAF<<16 | 0x3<<8 | 0x0);

     

    // 7.設(shè)置MPLL = 800000000 

    MPLL_CON1 = 0x00803800;

    MPLL_CON0 = (1<<31 | 0x64<<16 | 0x3<<8 | 0x0);

     

    // 8.設(shè)置EPLL = 96000000 

    EPLL_CON2 = 0x00000080;

    EPLL_CON1 = 0x66010000;

    EPLL_CON0 = (1<<31 | 0x40<<16 | 0x2<<8 | 0x3);

     

    // 9.設(shè)置VPLL = 350000000 

    VPLL_CON2 = 0x00000080;

    VPLL_CON1 = 0x66010000;

    VPLL_CON0 = (1<<31 | 0x48<<16 | 0x2<<8 | 0x3);

     

    //10.修改源

    CLK_SRC_CPU = 0x01000001;

    CLK_SRC_DMC = 0x00011000;

    CLK_SRC_TOP0 = 0x00000110;

    CLK_SRC_TOP1 = 0x01111000;

}

二、編譯、燒寫實(shí)驗(yàn)

按照前幾節(jié)介紹的方法,將程序上傳到服務(wù)器編譯,并燒寫到SD卡上,給開(kāi)發(fā)板上電,現(xiàn)象和第二個(gè)小實(shí)驗(yàn)完全相同。


關(guān)鍵字:Exynos4412  裸機(jī)程序  時(shí)鐘操作 引用地址:Exynos4412裸機(jī)程序,時(shí)鐘操作

上一篇:Exynos4412裸機(jī)程序之操作ICache
下一篇:Exynos4412時(shí)鐘體系分析

推薦閱讀

上一篇文章Tiny4412裸機(jī)程序之DDR工作原理與時(shí)序(一)我們學(xué)習(xí)了DDR SDRAM的工作原理,這一節(jié)我們接著講一下DDR2的一些知識(shí),看看與DDR、SDRAM 有什么不同,這一節(jié)的內(nèi)容也基本來(lái)自于網(wǎng)絡(luò)。DDR的發(fā)展沿著更高數(shù)據(jù)傳輸頻率,更大內(nèi)存容量的方向發(fā)展,DDR2中做到更高數(shù)據(jù)傳輸頻率,由DDR的2-bit pretetch向4-bit pretetch發(fā)展,而擴(kuò)展容量,除了增加每個(gè)L...
說(shuō)到人工智能硬件,我們向來(lái)事無(wú)巨細(xì)。WikiChip密切關(guān)注的一家公司是Mythic。這家公司還沒(méi)有完全公開(kāi)他們的架構(gòu)和產(chǎn)品,但一些細(xì)節(jié)已經(jīng)開(kāi)始慢慢浮出水面。在最近的人工智能硬件峰會(huì)上,該公司的創(chuàng)始人兼首席執(zhí)行官M(fèi)ike Henry紹了該芯片的最新情況。這家位于奧斯汀的初創(chuàng)公司由Mike Henry和Dave Fick于2012年創(chuàng)立,最近完成了7000萬(wàn)美元的B輪融資,總?cè)?..
Kuka推出了新系列的SCARA機(jī)器人。該公司表示,新型KR SCARA關(guān)節(jié)臂機(jī)器人是工業(yè)生產(chǎn)的“可靠助手”,在小零件裝配,材料處理和檢查任務(wù)等應(yīng)用中表現(xiàn)出色。Kuka稱,在6公斤以下的有效載荷類別中,很難找到適合替代Kuka SCARA機(jī)器人的產(chǎn)品。庫(kù)卡(Kuka)的新型KR SCARA臥式關(guān)節(jié)臂機(jī)器人超緊湊,同時(shí)提供“最大的成本效益”方案。KR SCARA機(jī)器人的作用范圍...
近日,煙臺(tái)市科學(xué)技術(shù)局發(fā)布2022年煙臺(tái)市重大科技創(chuàng)新工程揭榜掛帥項(xiàng)目榜單,涉及新材料、新能源與高效節(jié)能、電子信息、先進(jìn)制造等領(lǐng)域。在新材料領(lǐng)域,包括大規(guī)模集成電路平坦化關(guān)鍵材料研發(fā)與應(yīng)用、高端顯示用二氟甲氧橋類液晶材料的研發(fā)及產(chǎn)業(yè)化、有機(jī)無(wú)機(jī)雜化的光刻膠制備等項(xiàng)目;在電子信息領(lǐng)域,包括半導(dǎo)體泵浦激光器制造技術(shù)等項(xiàng)目。大規(guī)模集成電路...

史海拾趣

小廣播
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開(kāi)發(fā)圈

 
機(jī)器人開(kāi)發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved