S5PV210 時鐘配置解析

2021-06-20 08:38:00 字數 3222 閱讀 7463

s5pv210時鐘體系

s5pv210中包含3大類時鐘domain,分別是主系統時鐘domain (簡稱msys,下面將使用簡稱來進行相關講解)、顯示相關的時鐘domain (dsys)、外圍裝置的時鐘domain (psys)。

1) msys:用來給cortex a8處理器,dram控制器,

3d,iram,irom,中斷控制器等提供時鐘;

2) dsys:用來給顯示相關的部件提供時鐘,包括fimc, fimd, jpeg, and ********** 

ips;

3) psys:用來給外圍裝置提供時鐘,如i2s, spi,i2c,uart等

mini210s外接的晶振頻率(簡稱fin)為24mhz,通過時鐘控制邏輯pll可以提高系統時鐘。s5pv210共有4個倍頻器,即pll,包括 apll(供msys使用),mpll(供dsys使用),epll(供psys使用),vpll(供video相關的時鐘使用)。3大類時鐘 domain中,可以使用不同的分頻,使其給不同部件輸出所需要的時鐘,各類時鐘的關係如下圖:

s5pv210時鐘分類圖

如何確定各類時鐘的值,晶元手冊上給出了參考值,我們按照參考值設定即可,各類時鐘的參考值如下圖:

s5pv210時鐘設定參考值圖

具體如何設定上述各種各樣的時鐘,可參考下圖:

s5pv210時鐘設定參考圖

該圖十分重要,依據上圖我們就可以設定好所有硬體部件所需的工作時鐘(實際上我們並不需要設定好所有部件的工作時鐘,我們只需設定好我們需要使用的硬體部件的工作時鐘即可),在本章第二節中,我們將以上圖為基礎,通過設定時鐘相關的暫存器,達到初始化時鐘的目的。

程式例子:

分別用了組合語言和c語言來編寫,詳細**見鏈結。下面以c語言**來講解:

1. start.s

在呼叫main函式之前,呼叫了時鐘初始化函式clock_init,進行時鐘相關的設定。

2. clock.c

clock_init()在clock.c中定義,具體**如下: 

void clock_init() 

上述**共有5個步驟,下面我們一一講解每乙個步驟:

第一步 、設定各種時鐘開關,暫時不使用pll

根據時鐘設定圖,下面是放大圖:

首先我們需要選擇使用外接24mhz晶振,由上圖可知,apll和mpll的時鐘源由「fin_pll」決定,在晶元手冊中搜尋「fin_pll」,可知相關暫存器為clk_src0,見下圖:

在未設定pll和各種分頻係數之前,我們不能使用pll,為了保險起見,暫時直接使用頻率較低的外接的24mhz晶振,待設定好pll和分頻係數後再重新設定各種時鐘開關。

第二步 、設定鎖定時間

設定pll後,時鐘從fin提公升到目標頻率時,需要一定的時間,即鎖定時間。

第三步 、設定分頻

現在我們來根據本章第一節中給出的時鐘設定參考值來設定該暫存器。

第四步 、設定pll

pll即倍頻器,用來放大執行頻率。設定好分頻後,我們就需要設定pll了。apll/mpll的啟動是通過設定apll_con0/mpll_con暫存器,我們逐個來設定。

alpp_con0負責設定apll,finpll=24mhz,經過apll後,我們將輸 出fout=1000mhz的時鐘頻率,fout的計算公式如下: fout=mdiv*fin/(pdiv*2^(sdiv-1)) = 1000 mhz 

由於fin=24mhz,fout=1000mhz,我們可以這樣取值: mdiv= 0x7d,pdiv= 0x3,sdiv=1。這3個值並不是固定死的,只要能使fout=1000mhz,任意搭配都是可以的。

mpll_con暫存器負責設定mpll,經過mpll後,我們將輸出fout=667mhz的時鐘頻率,fout的計算公式如下: fout=mdiv*fin/(pdiv*2^sdiv) = 667 mhz 

由於fin=24mhz,fout=667mhz,我們可以這樣取值: mdiv=0x29b, pdiv= 0xc,sdiv=1。這3個值並不是固定死的,只要能使fout=667mhz,任意搭配都是可以的。

第五步 設定各種時鐘開關

s5pv210時鐘設定參考圖

在上圖中,所有的mux都是用來選擇時鐘的,相關暫存器是clk_src0, 見下圖:

參考s5pv210時鐘設定參考圖,設定各種時鐘開關: 

apll_sel=1,使用foutapll 

mpll_sel=1,使用foutmpll 

epll_sel=1,使用foutepll 

vpll_sel=1,使用foutvpll 

mux_msys_sel=0,使用sclkapll 

mux_dsys_sel=0,使用sclkmpll 

mux_psys_sel=0,使用sclkmpll 

onenand_sel=1,使用hclk_dsys 

所以clk_src0=0x10001111;

3. main.c

在main函式中實現led閃爍的功能,與前面的**大同小異。

s5pv210 時鐘系統

根據推薦值來設定相應的mux開關 pll鎖相環倍頻 div分頻器的值來得到相應的時鐘。1 設定鎖定週期,一般為預設值。因為pll倍頻需要一定時間才能達到相應的頻率。1 用來開啟或關閉pll電路,設定倍頻引數,檢視pll鎖定狀態等。設定apll的倍頻率 fout mdiv x fin pdiv 2 s...

S5PV210 裸機中斷

這裡我以外部中斷為例畫出了中斷響應的過程。當外部中斷得到響應,會由硬體自動轉到異常向量表,執行對應的異常處理程式。在這裡指的就是irq的處理程式。在異常處理程式irq handle中將會執行現場的保護與恢復,以及最重要的中斷處理函式 注意,這裡就來到了中斷處理部分,而不是異常處理了,相當於是乙個兩級...

S5PV210控制蜂鳴器

s5pv210帶有乙個蜂鳴器,十分吵鬧,本章將學習如何控制蜂鳴器。相關引腳 蜂鳴器的操作十分簡單,原理跟操作led一樣,通過控制gpdo o這個引腳就可以達到控制蜂鳴器的目的。1.start.s start.s做了下面3件事 第一步 關看門狗 第二步 設定棧,以便呼叫c函式 第三步 呼叫main函式...