娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年12月21日(星期六)

2021年12月21日 | Tiny4412裸機程序,時鐘操作

發布者:MagicGarden 來源: eefocus關鍵字:Tiny4412  裸機程序  時鐘操作 手機看文章 掃描二維碼
隨時隨地手機看文章

其實,Exynos 4412的IROM代碼已經設置了PLL,我們可以通過串口把IROM設置的PLL寄存器值打印出來,這些值打印出來是這樣的(摘自韋東山老師的《嵌入式Linux系統開發完全手冊_基于4412__上冊》):


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


現在來計算 ARMCLK的時鐘頻率:

由上一節《Exynos4412時鐘體系分析》的介紹我們知道,ARMCLK 有如下計算公式:

如下圖所示:

143304_r2UT_2888084.png

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

十六進制:0x01000001

二進制:0000 0001 0000 0000 0000 0000 0000 0001

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

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

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

143414_wID2_2888084.png

所以: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

本次實驗涉及3個小實驗:

  1. system_clock_disable_apll:不使用 APLL,讓CPU運行于 24MHz 頻率,觀察 LED 閃爍是否變慢

  2. system_clock_apll:重新設置APLL,讓 CPU 運行于1.4GHz頻率,觀察 LED 閃爍是否變快

  3. system_clock_plls:參考廠家提供的u-boot代碼,設置所有PLL供后續章節使用

第一個小實驗

實現的目標:不使用 APLL,讓CPU運行于 24MHz 頻率,觀察 LED 閃爍是否變慢


一、程序說明

我們在前一個實驗,《Tiny4412之C語言實現流水燈》的基礎上修改。

start.S大部分相同,只是增加一條函數調用語句


bl system_clock_init // 調用時鐘初始化函數


如下圖所示:

143609_qhN7_2888084.png

鏈接腳本system_clock.lds的內容和上一個實驗key.lds完全相同,只把名字改了改;Makefile的內容也大部分一樣,也只是改了改里邊文件的名字,led.c文件和LED實驗時完全相同,新增加了文件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)

 

/*

 * 函數名:

 * system_clock_init

 * 功能: 初始化4412的系統時鐘

 */

void system_clock_init(void)

{

/* IROM或BL1設置了APLL,

* 本程序設置不啟動APLL,

* 而是使在晶振時鐘, 以體驗一下LED閃燈變慢

*/

CLK_SRC_CPU = 0x0;

}


沒什么可說的,很簡單,前部分是后期會用到的一些寄存器地址的定義,主要的是下邊system_clock_init這個函數,在這個函數中將CLK_SRC_CPU寄存器的值設為0,這樣ARMCLK的頻率將走下面這條路徑,設置為24MHZ:

143739_IAPZ_2888084.png

二、編譯、燒寫實驗

按照前幾節介紹的方法,將程序上傳到服務器編譯,并燒寫到SD卡上,給開發板上電,可以明顯感覺到LED閃爍的頻率大大降低,說明我們設置的時鐘起作用了,這里就不上圖了(上了圖大家也看不出來)。

第二個小實驗

實現的目標:重新設置APLL,讓 CPU 運行于1.4GHz頻率,觀察 LED 閃爍是否變快

一、程序說明

文件同第一個小實驗,只是在它的基礎上對system_clock.c文件中的system_clock_init函數進行修改:



/*

* 函數名: system_clock_init

* 功 能: 初始化4412的系統時鐘

* 最終結果: APLL=1.4GHz

*/

void system_clock_init(void)

{

/*

* 1. 在設置APLL之前, 先設置時鐘源為晶振

*/

CLK_SRC_CPU = 0x0;

 

/*

* 2. 設置APLL

*/

 

/* 2.1 設置鎖定時間: APLL_CON0中PDIV=3, 所以APLL_LOCK = 270x3 */

APLL_LOCK = 270 * 3;

 

/* 2.2 設置分頻參數 */

/*

* 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 設置控制參數并使能PLL */

/* 默認值 */

APLL_CON1 = 0x00803800;

 

/*

* 設置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. 設置MUX, 使用APLL的輸出 */

CLK_SRC_CPU = 0x01000001;

}


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


二、編譯、燒寫實驗

按照前幾節介紹的方法,將程序上傳到服務器編譯,并燒寫到SD卡上,給開發板上電,可以明顯感覺到LED閃爍的頻率大大提高(比《Tiny4412之C語言實現流水燈》時閃爍的還要快,因為當時CPU運行在400MHZ,現在運行在1.4GHZ),說明我們設置的時鐘起作用了,這里就不上圖了(上了圖大家也看不出來)。


第三個小實驗

實現的目標:參考廠家提供的u-boot代碼,設置所有PLL供后續章節使用

一、程序說明

文件同第一個小實驗,只是在它的基礎上對system_clock.c文件中的system_clock_init函數進行修改:



/*

函數名:

system_clock_init

功能:

初始化4412的系統時鐘

最終結果:

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.設置CMU_CPU相關 */

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

 

/* 2.設置CMU_DMC相關 */

/*

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.設置CMU_TOP相關 */

/*

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.設置CMU_LEFTBUS相關 */

CLK_SRC_LEFTBUS = 0x10;

 

/*

GPL_RATIO = 0x1;

GDL_RATIO = 0x3;

*/

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

 

/* 4.設置CMU_RIGHTBUS相關 */

CLK_SRC_RIGHTBUS = 0x10;

 

/*

GPR_RATIO = 0x1;

GDR_RATIO = 0x3;

*/

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

 

/* 5.設置各個鎖相環(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.設置APLL = 1400000000 */

APLL_CON1 = 0x00803800;

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

 

/* 7.設置MPLL = 800000000 */

MPLL_CON1 = 0x00803800;

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

 

/* 8.設置EPLL = 96000000 */

EPLL_CON2 = 0x00000080;

EPLL_CON1 = 0x66010000;

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

 

/* 9.設置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;

}


二、編譯、燒寫實驗

按照前幾節介紹的方法,將程序上傳到服務器編譯,并燒寫到SD卡上,給開發板上電,現象和第二個小實驗完全相同。

關鍵字:Tiny4412  裸機程序  時鐘操作 引用地址:Tiny4412裸機程序,時鐘操作

上一篇:tiny4412 時鐘測試
下一篇:Tiny4412裸機程序之操作ICache

推薦閱讀

2018 年報指引符合預期,2019 年高速增長可期:公司發布 2018 年報業績預告,2018 年實現歸母凈利潤區間為 2.7-2.9 億元,同比增長 61.82%-73.81%,其中,Q4 實現歸母凈利潤區間為 0.79-0.99億元,同比增長 51.47%-89.82%,符合之前預期。公司作為國內面板檢測設備龍頭,2019 年有望繼續保持高速增長,維持之前盈利預測不變,預計公司 2018-2...
(圖源:Nexeon官網)據外媒報道,英國Nexeon公司獲得三套關鍵性專利,主要關于在鋰離子電池負極中使用硅材料的問題。這些專利全球有效,以前為Litarion GmbH所有,在該公司破產后被收購。專利總數為24項,包括納米硅顆粒的制造和使用(單獨或與石墨結合),以及使用氣相沉積法在碳顆粒上涂覆硅的方法。這一舉措使該公司在電池硅負極領域的知識產權實力進...
被譽為工控界“小華為”的匯川技術,今年前三季度工業機器人業務實現銷售收入約1.20億元,同比增長70.63%,取得較快速增長。匯川技術主要圍繞 " 核心部件 + 整機 + 視覺 + 工藝 " 經營策略,積極推進機器人整機和核心部件的開發工作;基于工業自動化業務對應的下游和客戶,匯川技術深度挖掘行業工藝,結合工業視覺產品的耦合,在3C、鋰電、玩具...
愛立信、Telstra和高通利用5G雙連接和載波聚合創造了約1Gbps的上行速率新紀錄2021年12月16日,圣迭戈——愛立信、Telstra和高通技術公司在澳大利亞昆士蘭州基于商用網絡的現場演示中,創造了最高上行峰值速率的新記錄。三方攜手實現約1Gbps的上行速率,為視頻直播和社交媒體內容分享等用例提供更流暢的體驗鋪平道路。本次演示基于Telstra提供的網絡,利用...

史海拾趣

問答坊 | AI 解惑

Q2406B型GPRS模塊在三害預防系統中的應用

在環境問題日益迫切的今天,以信息化促進環境保護、建設美麗家園已成為最有效有力的舉措之一。 北京xx科技有限公司的Q2406B型 GPRS無線數據傳輸產品,在環境監測、氣象、汛情測報中得到良好應用,成為了: 環境監測的"特種信號兵"; ...…

查看全部問答∨

java是否和c一樣 以后會廣泛用于ARM?

如題,偶是很想問一下,學嵌入式軟件(搞ARM的),有沒有必要學java呢? 各位大蝦給個指點吧!~ 期待中。。。…

查看全部問答∨

PT6311器件子程序集

PT6311器件子程序集…

查看全部問答∨

跟我一起制作大尺寸數碼管電子鐘

六位電子鐘我想是每個初學電子或者初學單片機程序的朋友必做的項目吧,大家基本都在學習板上利用小尺寸數碼管做過,但是如果讓大家用1.8寸以上數碼管甚至20寸數碼管制作,大家覺得會什么問題呢?下面開始就大尺寸數碼管電子鐘制作談談個人的設計思 ...…

查看全部問答∨

ethereal 的時候識別不到網卡

請問用 ethereal 的時候識別不到網卡,是怎么回事? 在選擇網卡的interface處只有下面一行,發現并不是我機器上的網卡。 Generic dialup adapter: \\Device\\NPF_GenericDialupAdapter 這個現象 是由于我用優化工具優化電腦,之后抓包工具就找不 ...…

查看全部問答∨

evc DirectDraw 中DirectDrawCreate創建失敗

LPDIRECTDRAW         pDD = NULL; hRet = ::DirectDrawCreate(NULL, &pDD, NULL); 返回-2005532450 不知道什么原因? 高手指點啊。…

查看全部問答∨

2440用TCP/IP往上位機發送文件 有些問題 新手求助

PC采用TCP&UDP測試工具接收2440發送的數據 新手求助 大家幫忙看看 問題:1.若發送內容只是一行字符的文件 只收到文件內容的第一個字符 TCP&UDP測試工具 計數顯示的數 是文件字符數2倍       2.若發送分辨率640X480 600K的b ...…

查看全部問答∨

有人在村田買過器件嗎?

本信息來自合作QQ群:電子工程師技術交流(12425841) 群主在壇子ID:Kata   有人在村田買過器件嗎…

查看全部問答∨

50hz3v左右正弦波變方波

本帖最后由 paulhyde 于 2014-9-15 09:27 編輯 50hz3v左右正弦波變方波,送430測頻率,方波效果最好的是哪種方法,最好和函數發生器效果一樣,因為我們能測函數發生器出來的方波,正弦波過零比較后的方波就不行了,方波上升沿那里放大后有小波動是 ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 普格县| 铁力市| 鄂尔多斯市| 钟祥市| 布拖县| 崇礼县| 南平市| 筠连县| 金川县| 河东区| 淮北市| 攀枝花市| 灵丘县| 余江县| 天全县| 凉山| 开平市| 陇南市| 额敏县| 涞水县| 长春市| 光泽县| 东辽县| 历史| 正蓝旗| 永和县| 长寿区| 澎湖县| 威宁| 三台县| 阳西县| 海丰县| 镇平县| 五河县| 华池县| 礼泉县| 金阳县| 静安区| 通化县| 西安市| 句容市|