S3C6410時鐘初始化

2021-08-27 15:45:22 字數 2613 閱讀 9858

s3c6410有三個pll,分別為apll、mpll和epll。

其中apll產生aclk,給arm core使用,

mpll產生hclkx2、hclk和pclk,

epll產生特殊的時鐘,比如為usb提供48mhz時鐘

可以看到,外部時鐘(一般為12m)經過apll後再經過設定分頻係數divarm後產生供arm核使用的armclk;

外部時鐘經過mpll後經過分頻係數div_hclkx2後產生時鐘hclkx2;

時鐘hclkx2經過分頻係數div_hclk後產生時鐘hclk;

時鐘hclkx2經過分頻係數div_pclk後產生時鐘pclk;

一般在設定時鐘時,三星官網有推薦的值,那麼我們只需設定官方提供的幾個係數就ok了。

s3c6410 系統時鐘初始化步驟:

1.設定同步或非同步模式;

2.設定時鐘分頻係數;

3.設定 pll 控制器;

4.選擇 pll 輸出時鐘為系統時鐘源。

時鐘的設定涉及到如下幾個暫存器的設定:

#define clk_div0 0x7e00f020

#define others 0x7e00f900

#define mpll_con 0x7e00f010

#define apll_con 0x7e00f00c

#define clk_src 0x7e00f01c

#define div_val ((0x0<<0)|(0x1<<9)|(0x1<<8)|(0x3<<12))

#define pll_val ((1<<31)|(266<<16)|(3<<8)|(1<<0))

1,設定同步非同步是通過others暫存器完成:

設定成同步模式通過如下**完成:

ldr r0, =others

ldr r1, [r0]

bic r1,r1,#0xc0

str r1, [r0]

2.設定時鐘分頻係數:

首先需要設定hclkx2_ratio,然後再設定arm_ratio、pclk_ratio、hclk_ratio,在這裡我們設定arm_ratio=0、pclk_ratio=1、hclk_ratio=1、hclkx2_ratio=1,設定**如下:

ldr r0, =clk_div0

ldr r1, =div_val

str r1, [r0]

3設定pll控制器:

pll控制暫存器有apll_con和mpll_con

在這裡設定mdiv=266 pdiv=3 sdiv =1;

**如下:

ldr r0, =mpll_con

ldr r1, =pll_val

str r1, [r0]

經過設定後,根據上圖中fout的計算公式:fout= 266*12、(2*3) = 533m hz;

apll_con的設定相似:

在這裡設定mdiv=266 pdiv=3 sdiv =1;

計算結果亦為533m hz

4 時鐘源設定

通過設定clk_src的第0位和第一位,使後端的時鐘分別為apll 和mpll,

設定如下:

ldr r0, =clk_src

mov r1, #0x3

str r1, [r0]

這樣,設定完成後armclk為533m hz

hclkx2= 533/(1+1) = 266m hz

hclk = hclkx2 / (1+1 ) = 133mhz

pclk = hclkx2 /(3+1) = 66m hz

S3C6410同步 非同步時鐘配置

在配置s3c6410的時鐘時有乙個叫other的暫存器,位址為0x7e00 f900 其中syncmode配置同步或非同步模式,syncmuxsel選擇hclk是由mpll提供還是apll提供。這裡就有乙個問題了,那什麼時候選同步模式,什麼時候選非同步模式呢?s3c6410手冊裡沒找到答案,不過另乙...

s3c6410儲存器對映

1.引導映象區 0x0000 0000 0x07ff ffff 2.內部儲存區 1 內部rom 0x0800 0000 0x0bff ffff 2 內部sram 0x0c00 0000 0x0fff ffff 3.靜態儲存區 0x1000 0000 0x3fff ffff 4.動態儲存區 0x400...

S3C6410啟動模式介紹

目前的arm處理器都支援多種啟動模式,s3c6410和以前的samsung的arm處理器一樣,通過外部管腳om 4 0 的拉高拉低來決定是從哪個儲存裝置上啟動。我認為s3c6410的user manual並沒有說的很清楚,所以我在最開始使用的時候,也對其啟動模式有一些誤解,下面就我個人的理解,介紹一...