ARM9 mini2451裸機學習 裸機時鐘

2021-07-15 03:38:34 字數 1896 閱讀 7547

pll:鎖相環

epll:extra pll 產生特殊功能的模組時鐘

mpll:armclk(533mhz),hclk(800/6=133.3m),ddrclk,ssmclk,pclk(66m)

armclk(核心時鐘,主頻)

hclk 用在ahb匯流排(匯流排時鐘,包括usb時鐘)

pclk 用在apb匯流排(i/o介面時鐘)

系統倍頻前,s3c2451執行時鐘是12m(外部輸入晶振)

倍頻最高800m

時鐘初始化步驟:

1) 設定鎖相環(mpllcon),設定mpllout頻率

2) 設定分頻(clkdiv0),共需設定4項,分別為 armdiv,  prediv, pclkdiv,  hclkdiv

3) 設定鎖定時間(lockcon0),設定鎖定時間

4) 設定時鐘源(clksrc),選擇mpll輸出

1) 設定鎖相環(mpllcon),設定mpllout頻率

從datasheet查的mpllon的位址

查表,根據需要的到的頻率,得到mdiv,pdiv,sdiv的引數

2) 設定分頻(clkdiv0),共需設定4項,分別為 armdiv,  prediv, pclkdiv,  hclkdiv

查得clkdiv0的位址

1.設定armclk (核心時鐘,主頻)

armclk= mpllout(總頻率 800m)/arm ratio

其中armclk ratio = armdiv + 1

2.設定hclk(匯流排時鐘,包括usb時鐘)

hclk= mpllout / hclk ratio

其中hclk ratio = (prediv + 1) *(hclkdiv + 1)

3.設定pclk (i/o介面時鐘)

pclk= hclk 或hclk/2

3) 設定鎖定時間(lockcon0),設定鎖定時間

鎖定時間 t = (1/12m)* 0xffff

鎖定時間約為5.46ms

4) 設定時鐘源(clksrc),選擇mpll輸出

即時鐘開不開倍頻,1:開倍頻(800m)0:不開(12m)

#define lockcon0 (*(volatile unsignedlong*)0x4c000000)

#define mpllcon (*(volatile unsigned long*)0x4c000010)

#define clksrc (*(volatile unsigned long*)0x4c000020)

#define clkdiv0 (*(volatile unsigned long*)0x4c000024)

#define mpll_en 0

#define mdiv 400

#define pdiv 3

#define sdiv 1

#definearmdiv 1

#define prediv 2

#define hclkdiv 1

#define pclkdiv 1

#define selmpll 1

void clock_init()

學習arm裸機程式

兩個星期,打通了以mini2440為基礎,找別人借了個見jlink,編譯軟體用的是mdk4.22,打通了arm裸機的大部分程式,包括io 定時器 串列埠 中斷 ad等等,其中最重要的和微控制器的不同是位址問題 原先微控制器的c語言不需要管位址,但現在需要了,特別是rom ram的設定 其中比較重要的...

基於mini2451開發板的裸機開發 電子相簿

前段時間學習了arm,使用的是友善之臂的mini2451開發板,晶元型號為s3c2451,核心為arm92ej 學習後利用它開發了乙個電子相簿的專案,用於回味自己的學習結果 現在總結一下,並說明一下它的功能 電子相簿共有四個功能 1 時鐘功能 2 主介面功能 3 相簿手動切換功能 4 相簿自動切換功...

ARM裸機基礎學習 彙編語法和指令

一直對彙編不感冒的我,為了學好arm 裸機開發,我再次學習組合語言和指令,值得高興的是今天看著資料自己編寫出了自己的第乙個匯程式設計序。用彙編實現1加到 100的和,源 如下 i為迴圈因子 sum為總和變數 for i 0 i 10 i sum i 設sum為r0 i為r1 i sum 均為無符號整...