專題7-ARM時鐘初始化

1.1 時鐘脈衝信號:按照一定的電壓幅度,一定的時間間隔連續發出的脈衝信號。

1.2 時鐘脈衝頻率:單位時間內(1秒)產生的時鐘脈衝的個數。

1.3 信號源:
1)晶振:晶振全稱晶體振盪器,是用石英晶體經精密切割磨削並渡上電極焊上引線做成。
優點:結構簡單、噪聲低
缺點:成本高、交貨週期長、難以獲得標準的頻率

2)PLL(鎖相環):需要一個外部晶振幷包含一個能夠對晶體的特定頻率加倍或分頻的集成鎖相環電路。
優點:成本低、面積小、頻率靈活

2440:
晶振頻率:12Mhz
兩個PLL:
MPLL:FCLK(ARM核)、HCLK(AHB總線:LCD、DMA等)、PCLK(APB總線:UART、GPIO等)
UPLL:UCLK(USB總線:USB主從口)

6440:
晶振頻率也是12Mhz
3個PLL:
APLL:ACLK(ARM核)
MPL:HCLK(AHB總線)、PCLK(APB總線)
EPLL:SCLK(USB總線)

210:
晶振頻是:24Mhz
4個PLL:
APLL、MPLL、EPLL、VPLL

CPU上電之後:CPU的頻率一開始是等於外部晶振的頻率的,以2440爲例,爲12Mhz 。所以經過時鐘初始化,有一個由低頻到高頻的過程。
觀察時鐘初始化的時序圖:
這裏寫圖片描述
完成鎖相環的配置後,進入了locktime,在locktime時,處理器是不工作的,locktime後,ARM核按照配置的頻率來工作。

1.3 時鐘初始化軟件要完成哪些工作:
2440:
1) 配置LockTime(默認值,省略)
2) 設置分頻係數(例如:FCLK:HCLK:PCLK=1:2:4,即HCLK的頻率爲FCLK的1/2)
3) 如果FCLK不等於HCLK(通常都不相等),要設置CPU爲異步工作模式
這裏寫圖片描述

4) 配置FCLK的時鐘頻率
(外部晶振12MHz,將內核時鐘FCLK配置爲405Mhz)
這裏寫圖片描述

即配置寄存器MPLLCON:
這裏寫圖片描述

LOCLTIME寄存器:(使其爲默認值,不需要去設置)
首先查看uboot,發現其分頻係數設置爲1:4:8,查看datasheet發現對應此頻率的HDIVN是2、PDVIN是1(HDIVN和PDVIN分別位於寄存器CLKDIVN(地址爲0x4C000014)的1:2位和0位)
這裏寫圖片描述

代碼如下:

%設置分頻係數  1:4:8
#define CLKDIVN 0x4C000014
clock_init:
ldr r0,= CLKDIVN
mov r1,#0x5
str r1,[r0]

%設置cpu爲異步工作模式
mrc p15,0,r0,c1,c0,0   %讀取c1寄存器的值到r0 ,異步模式設置見2440手冊243頁,c1寄存器見核手冊36頁
orr r0,r0,#0xc0000000
mcr p15,0,r0,c1,c0,0

%設置FCLK頻率
#define MPLLCON 0x4c000004
%因爲FCLK的頻率由鎖相環MPLL決定,若要配置其頻率爲405Mhz,則可以通過查表得:MDIV等於127,PDIV等於2,SDIV等於1,分別位於寄存器MPLLCON的[1912]、[9:4]、[1:0]

#define MPLL_405MHZ ((127<<12)|(2<<4)|(1<<0))
ldr r0,= MPLLCON
ldr r1,= MPLL_405MHZ
str r1,[r0]
mov pc,lr

6410:

#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))

init_clock:
%設置分頻係數
    ldr r0, =CLK_DIV0
    ldr r1, =DIV_VAL
    str r1, [r0]
%設置異步模式
    ldr r0, =OTHERS
    ldr r1, [r0]
    bic r1,r1,#0xc0
    str r1, [r0]
%設置APLL的輸出頻率    
    ldr r0, =APLL_CON
    ldr r1, =PLL_VAL
    str r1, [r0]
%設置MPLL的輸出頻率    
    ldr r0, =MPLL_CON
    ldr r1, =PLL_VAL
    str r1, [r0]
%選擇器,參考146頁的時鐘選擇寄存器和126頁的時鐘樹
    ldr r0, =CLK_SRC
    mov r1, #0x3
    str r1, [r0]
    mov pc, lr

備註:分頻係數一般去查看uboot,時鐘的輸出頻率需要去配置時鐘控制寄存器,CLK_SRC時選擇器

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章