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时选择器
新闻热点
疑难解答