S3C2440之提高系統時鐘
一、S3C2440時鐘體系:
1、S3C2440可以使用外接晶振,然後通過內部產生時鐘源;也可以直接使用外部時鐘源。時鐘控制邏輯提供FCLK、HCLK、PCLK三種時鐘,FCLK用於CPU核、HCLK用於AHB匯流排(主要用於高效能模組之間連線)、PCLK用於APB匯流排(主要用於低頻寬周邊外設之間連線)。
2、當S3C2440 CPU核工作電壓為1.2V時,主頻可達到300MHz;工作電壓為1.3V時,主頻可達400MHz。
3、上電時,PLL並沒有啟動,此時FCLK等於外部輸入的時鐘(Fin)。若提高時鐘,則需要軟體配置啟動PLL。上電後。晶體振盪器開始振盪,在幾毫秒後,當nRESET在穩定OSC (XTIpll)時鐘後才會被釋放。
二、程式設計提高執行時鐘:
1、設定LOCKTIME暫存器(LOCK TIME COUNT REGISTER),此暫存器用於設定Lock time的長度。MPLL啟動後需要等待一段時間(Lock time),使其輸出穩定。一般來說,使用預設值0xFFFFFFFF即可;
2、設定CLKDIVN暫存器(CLOCK DIVIDER CONTROL (CLKDIVN) REGISTER),此暫存器用於設定FCLK、HCLK、PCLK之間比例;
3、設定CPU工作與非同步模式;
4、設定MPLLCON暫存器(MPLL CONTROL REGISTER),此暫存器用於設定FCLK與Fin的倍數。公式為:
Mpll = (2 * m * Fin) / (p * 2S)
m = (MDIV + 8), p = (PDIV + 2), s = SDIV
三、程式碼:
/* LOCKTIME(0x4C000000) = 0xFFFFFFFF */ ldr r0, =0x4C000000 ldr r1, =0xFFFFFFFF str r1, [r0] /* 設定MPLL, FCLK : HCLK : PCLK = 400m : 100m : 50m */ /* CLKDIVN(0x4C000014) = 0X5, tFCLK:tHCLK:tPCLK = 1:4:8 */ ldr r0, =0x4C000014 ldr r1, =0x5 str r1, [r0] /* 設定CPU工作於非同步模式 */ mrc p15,0,r0,c1,c0,0 orr r0,r0,#0xc0000000 //R1_nF:OR:R1_iA mcr p15,0,r0,c1,c0,0 /* 設定MPLLCON(0x4C000004) = (92<<12)|(1<<4)|(1<<0) * m = MDIV+8 = 92+8=100 * p = PDIV+2 = 1+2 = 3 * s = SDIV = 1 * FCLK = 2*m*Fin/(p*2^s) = 2*100*12/(3*2^1)=400M */ ldr r0, =0x4C000004 ldr r1, =(92<<12)|(1<<4)|(1<<0) str r1, [r0]
注:1、一旦設定PLL, 就會鎖定lock time直到PLL輸出穩定然後CPU工作於新的頻率FCLK
2、orr r0,r0,#0xc0000000 //R1_nF:OR:R1_iA 是對協處理器的操作,nF和iA是控制CPU匯流排模式的,意思是讓CPU的匯流排模式從“fast bus mode”變為“asynchronous bus mode”