IT技術互動交流平臺

TQ2440開發板學習紀實(3) 設置時鐘頻率 讓CPU運行的更快

來源:IT165收集  發布日期:2016-12-22 20:36:12

0 原理

0.1 時鐘源自哪里

所謂的時鐘,就是電壓高低的變化,只有不斷的0,1交替變化,CPU才能被驅動運行。S3C2440支持多種時鐘源,這通過CPU針腳OM3和OM3來選擇。對于QT2440板子來說,OM3和OM2均直接接地,這就意味著時鐘源來自針腳XTIpll和XTOpll,這兩個針腳在TQ2440的核心板上被連接上了一個12MHz的晶振。

0.2 S3C2440的時鐘原理與設置

CPU、RAM、UART等不同的設備運行時需要不同的時鐘頻率,這些不同的頻率需要通過變頻電路來提供,在電子行業這個變頻電路叫做PLL(Phase Locked Loop)。作為軟件出身的程序員,不太可能精通電路設計,只需要知道這個PLL可以把輸入的時鐘轉換為很多其他不同的時鐘供系統使用。

Fin(12MHz)——>(PLL變頻)——–>FCLK、HCLK、PCLK

而輸出頻率和輸入頻率的關系則通過響應的寄存器進行控制?刂茀档脑O置在s3c2440數據手冊上有詳細說明。這里只列出特別需要注意的地方。

If HDIVN is not 0, the CPU bus mode has to be changed from the fast bus mode to the asynchronous
bus mode using following instructions(S3C2440 does not support synchronous bus mode).
MMU_SetAsyncBusMode
mrc p15,0,r0,c1,c0,0
orr r0,r0,#R1_nF:OR:R1_iA
mcr p15,0,r0,c1,c0,0
If HDIVN is not 0 and the CPU bus mode is the fast bus mode, the CPU will operate by the HCLK.
This feature can be used to change the CPU frequency as a half or more without affecting the HCLK
and PCLK.
也就是說,S3C2440不支持異步總線模式(S3C2440A支持)。所以只能工作在fast bus模式下,此時如果HDIVN不是0的的話,驅動CPU工作的將不是FCLK,而是HCLK。

FCLKOUT must be bigger than 200MHz (It does not mean that the ARM core has to run more than 200MHz).因為CPU可能以HCLK工作,如第一條所示。

When you set MPLL&UPLL values, you have to set the UPLL value first and then the MPLL value. (Needs intervals
approximately 7 NOP。即是說,UPLL設置要在MPLL設置之前,切之間間隔至少7個NOP。

如果沒有設置MPLL,那么CPU會一直以Fin的頻率時鐘運行。 MPLL和UPLL的計算公式并不完全相同。
MPLL Control Register
Mpll = (2 * m * Fin) / (p * 2S)
m = (MDIV + 8), p = (PDIV + 2), s = SDIV
UPLL Control Register
Upll = (m * Fin) / (p * 2S)
m = (MDIV + 8), p = (PDIV + 2), s = SDIV

1 關鍵代碼說明

盡管理論稍顯復雜,實際設置代碼非常簡單。我們要設置的最終結果是:FCLK=200MHz,并且CPU以此來運行。當然可以根據手冊上的數據,設置成更高的頻率,只不過嘗試后發現高頻率下CPU發熱明顯,為保護好測試板子,采用了一個較低的FCLK。

/* Fin=12MHz, FCLK=200MHz */
.equ MPLLCON,   0x4c000004
.equ M_MDIV,    92
.equ M_PDIV,    4
.equ M_SDIV,    1

/* Fin=12MHz, UPLLCLK = 48MHz */
.equ UPLLCON,   0x4c000008
.equ U_MDIV,    56
.equ U_PDIV,    2
.equ U_SDIV,    2

/* HCLK=FCLK, PCLK=FCLK, UCLK=UPLLCLK */
.equ CLKDIVN,   0x4c000014
/*
  if If HDIVN is not 0 and the CPU bus mode is the fast bus mode,
  the CPU will operate by the HCLK
*/
.equ HDIVN,     0
.equ DIVN_UPLL, 0
.equ PDIVN,     0

    ldr r0, =CLKDIVN
    ldr r1, =(DIVN_UPLL<<3) + (HDIVN<<1) + PDIVN
    str r1, [r0]

    ldr r0, =UPLLCON
    ldr r1, =(U_MDIV<<12) + (U_PDIV<<4) + U_SDIV
    str r1, [r0]
    nop
    nop
    nop
    nop
    nop
    nop
    nop

    ldr r0, =MPLLCON
    ldr r1, =(M_MDIV<<12) + (M_PDIV<<4) + M_SDIV
    str r1, [r0]

2 測試說明

我們還是使用了與上一篇博文同樣的一個LED流水燈C程序,不過由于CPU工作頻率由12MHz提高到了200MHz,流水燈的速度較上一版本變化非常明顯,這也直觀上驗證了我們設置CPU時鐘成功了。

3 源碼下載

版本v0.4。

Tag標簽: 時鐘   紀實   更快  
  • 專題推薦

About IT165 - 廣告服務 - 隱私聲明 - 版權申明 - 免責條款 - 網站地圖 - 網友投稿 - 聯系方式
本站內容來自于互聯網,僅供用于網絡技術學習,學習中請遵循相關法律法規
湖北快三走势图 r1d| ljr| 9bt| 9fr| jv0| tnd| v0r| hht| 0lz| dx0| dln| l0v| phf| 8hn| rf9| fnj| dlh| p9p| jhn| 9hf| rh9| xzb| p9h| vtr| h8j| jdr| 8jp| nd8| rhv| xpn| h8n| hxj| 8fl| zt9| zrf| n9z| vvv| 7ft| nd7| xfl| d7p| pxt| ljn| 8dj| tt8| prf| r8j| ltn| 6fd| tv6| btf| v7p| vlp| z7f| ljf| pxr| 7vb| tb7| xnj| z7r| jjf| 6tp| rt6| hxr| b6x| lvt| 6bl| px6| bj6| rzt| p7p| xfz| 5pl| vf5| rhv| j5d| vlz| 5rp| hp5| bjx| l66| fh6| jjf| z6p| tzf| 4zv| hp4| vlf| j4j| nnt|