s3c2410 cpu預設的工作主頻為12mhz,使用pll電路可以產生更高的主頻供cpu及外圍器件使用。s3c2410有兩個pll:mpll和upll,upll專用與usb裝置。mpll用於cpu及其他外圍器件。
通過mpll會產生三個部分的時鐘頻率:fclk、hclk、plck。fclk用於cpu核,hclk用於ahb匯流排的裝置(比如sdram),pclk用於apb匯流排的裝置(比如uart)。從時鐘結構圖中可以檢視到使用不同時鐘頻率的硬體。
figure 7-1. clock generator block diagram
(注:這裡要注意從圖中看出,uart
使用的是
pclk
,後面uart
實驗會用到)
下面介紹mpll
的啟動流程:
(注:下面內容部分直接摘錄自《
s3c2410
完全開發流程》,
clock
部分寫了非常好)
s3c2410 datasheet 224頁「figure 7-4. power-on reset sequence」展示了上電後
mpll啟動的過程
請跟隨fclk的影象了解啟動過程:
1、上電幾毫秒後,晶振輸出穩定,fclk=晶振頻率,nreset訊號恢復高電平後,
cpu開始執行指令。
2、我們可以在程式開頭啟動
mpll,在設定mpll的幾個暫存器後,需要等待一段時間(lock time),mpll的輸出才穩定。在這段時間(lock time)內,fclk停振,cpu停止工作。lock time的長短由暫存器locktime設定。 3
、lock time之後,mpll輸出正常,cpu工作在新的fclk下。
設定s3c2410的時鐘頻率就是設定mpll的幾個暫存器:
1、locktime
:設為0x00ffffff
前面說過,mpll啟動後需要等待一段時間(lock time),使得其輸出穩定。位[23:12]用於upll,位[11:0]用於mpll。使用確省值
0x00ffffff即可。 2
、clkdivn
:用來設定fclk:hclk:pclk的比例關係,預設為1:1:1
這裡值設為0x03,即fclk:hclk:pclk=1:2:4
clkdivn不同的設定及對應的時鐘比例關係如下圖:
3、mpllcon:設為(0x5c << 12)|(0x04 << 4)|(0x00),即0x5c0040
對於mpllcon暫存器,[19:12]為mdiv,[9:4]為pdiv,[1:0]為sdiv。有如下計算公式:
mpll(fclk) = (m * fin)/(p * 2^s)
其中: m = mdiv + 8, p = pdiv + 2
fin 即預設輸入的時鐘頻率12mhz。mpllcon設為0x5c0040,可以計算出fclk=200mhz,再由clkdivn的設定可知:hclk=100mhz,pclk=50mhz。
通常我們將如上時鐘初始化的過程寫成clock_init函式供其他函式呼叫,**如下:
void clock_init(void)
檔案:clock.rar
大小:0kb
ARM9硬體介面學習之一 WatchDog
watchdog是整個arm體系結構中相對比較簡單的介面,控制 只有幾行,寫起來比較容易。首先選擇學習watchdog,可以快速入門,先對底層硬體工作原理有個初步的認識。watchdog即通常我們所說的 看門狗 watchdog原理上就是乙個定時器。定時器timer對時鐘進行計數,當定時器溢位時,產...
ARM9學習筆記之 MMU
我記得有一次我去應聘arm linux軟體工程師。結果被問到arm中的虛擬記憶體是怎麼管理的。由於我只對x86平台下的mmu了解,所以我被問倒了。原來我所學的只是皮毛。還有很多東西值得我去深入。要做arm linux下的驅動,熟悉虛擬記憶體應該是必須的。arm9中的虛擬記憶體是怎麼實現的呢?以下是我...
ARM9學習筆記之 彙編
arm系列晶元與pc系列 可能我說法不太準確 晶元在指令設計上就有本質的區別。arm中每條指令是精簡指令集要麼是32位,要麼是16位。而pc的指令是複雜指令集,一條指令可以由多個位元組組成。1.關於函式呼叫方法 在arm彙編中,函式呼叫非常靈活。1 bl指令 bl initmem 呼叫 initme...