ARM9 mini2451裸机学习——裸机时钟

来源:互联网 发布:买水果的软件 编辑:程序博客网 时间:2024/06/06 20:43


       PLL:锁相环

       MPLL:main PLL 主锁相环,和系统相关

       EPLL:extra PLL 产生特殊功能的模块时钟

 

       MPLL:ARMCLK(533Mhz),HCLK(800/6=133.3M),DDRCLK,SSMCLK,PCLK(66M)

       ARMCLK(内核时钟,主频)

HCLK 用在AHB总线(总线时钟,包括USB时钟)

PCLK 用在APB总线(I/O接口时钟)

      

       系统倍频前,S3C2451运行时钟是12m(外部输入晶振)

       倍频最高800M

 

时钟初始化步骤:

1) 设置锁相环(MPLLCON),设置MPLLout频率

2) 设置分频(CLKDIV0),共需设置4项,分别为 ARMDIV,  PREDIV, PCLKDIV,  HCLKDIV

3) 设置锁定时间(LOCKCON0),设置锁定时间

4) 设置时钟源(CLKSRC),选择MPLL输出

 

 

 

1) 设置锁相环(MPLLCON),设置MPLLout频率

从Datasheet查的MPLLON的地址


查表,根据需要的到的频率,得到MDIV,PDIV,SDIV的参数



 

2) 设置分频(CLKDIV0),共需设置4项,分别为 ARMDIV,  PREDIV, PCLKDIV,  HCLKDIV

 

查得CLKDIV0的地址

1.设置ARMCLK (内核时钟,主频)

       ARMCLK= MPLLout(总频率 800m)/ARM ratio

       其中ARMCLK ratio = ARMDIV + 1

2.设置HCLK(总线时钟,包括USB时钟)

       HCLK= MPLLout / HCLK ratio

       其中HCLK ratio = (PREDIV + 1) *(HCLKDIV + 1)

3.设置PCLK (I/O接口时钟)

       PCLK= HCLK 或HCLK/2




3) 设置锁定时间(LOCKCON0),设置锁定时间

 

锁定时间 t = (1/12M)* 0xffff

锁定时间约为5.46ms

 

4) 设置时钟源(CLKSRC),选择MPLL输出

 


即时钟开不开倍频,1:开倍频(800m)0:不开(12m)

 

 

 


#define LOCKCON0 (*(volatile unsignedlong*)0x4C000000)#define MPLLCON  (*(volatile unsigned long*)0x4C000010)#define CLKSRC   (*(volatile unsigned long*)0x4C000020)#define CLKDIV0  (*(volatile unsigned long*)0x4C000024) #define MPLL_EN 0#define MDIV    400#define PDIV    3#define SDIV    1 #defineARMDIV  1#define PREDIV  2#define HCLKDIV 1#define PCLKDIV 1 #define SELMPLL 1 void clock_init(){       MPLLCON= (MPLL_EN << 24) | (MDIV << 14) | (PDIV << 5) | (SDIV); //设置MPLLout = 800M       CLKDIV0= (ARMDIV << 9) | (PREDIV << 4) | (HCLKDIV) | (PCLKDIV << 2);//设置分频       LOCKCON0= 0Xffff; //锁定时间约为5.46ms       CLKSRC= (SELMPLL << 4);//设置时钟源} 



2 0
原创粉丝点击