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 0x4C000014clock_init:ldr r0,= CLKDIVNmov r1,#0x5str r1,[r0]%設置cpu為異步工作模式mrc p15,0,r0,c1,c0,0 %讀取c1寄存器的值到r0 ,異步模式設置見2440手冊243頁,c1寄存器見核手冊36頁orr r0,r0,#0xc0000000mcr p15,0,r0,c1,c0,0%設置FCLK頻率#define MPLLCON 0x4c000004%因為FCLK的頻率由鎖相環MPLL決定,若要配置其頻率為405Mhz,則可以通過查表得:MDIV等于127,PDIV等于2,SDIV等于1,分別位于寄存器MPLLCON的[19:12]、[9:4]、[1:0]#define MPLL_405MHZ ((127<<12)|(2<<4)|(1<<0))ldr r0,= MPLLCONldr r1,= MPLL_405MHZstr r1,[r0]mov pc,lr6410:
#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時選擇器
新聞熱點
疑難解答