LCD实验学习笔记(四):系统时钟

mac2022-06-30  41

一般CPU频率(FCLK)高于内存、网卡等设备频率(HCLK),而串口、USB、I2C等设备频率(PCLK)更低。

系统时钟:

  系统时钟源为晶振,初始频率12MHz。

  通过设置MPLLCON寄存器的MDIV、PDIV、SDIV(s3c2440手册上有时钟设置取值表),可设置系统时钟FCLK。

  [19:12]设置MDIV,[9:4]设置PDIV,[1:0]设置SDIV。

  设置公式:

    * S3C2410: MPLL(FCLK) = (m * Fin)/(p * 2^s)    * S3C2410: MPLL(FCLK) = (2 * m * Fin)/(p * 2^s)    * 其中: m = MDIV + 8, p = PDIV + 2, s = SDIV    * 对于jz2440开发板,Fin = 12MHz

分频:

  CPU工作于FCLK时钟;FCLK分倍频1/2或1/4等给内存、网卡、Nand flash等设备使用,即HCLK时钟;HCLK分倍频给串口、USB、I2C等低速设备,即PCLK时钟。

  通过设置CLKDIV寄存器,可以设置FCLK:HCLK:PCLK比例。[2:1]设置FCLK/HCLK,[0]设置HCLK/PCLK。

  s3c2440手册上有表可查,比如设置FCLK:HCLK=2:1,[2:1]取值01;设置HCLK=PCLK,需[0]=0;设HCLK:PCLK=2:1,需设置[0]=1。

锁定时间:

  提高系统时钟频率,需要一个时钟停止的时间段,这段时间CPU停摆。通过设置LOCKTIME寄存器可以设置这个锁定时间,一般用默认值即可。

例子:

  比如设置CPU时钟FCLK=200MHz,需设置MPLLCON的PDIV=0x5c,PDIV=1,SDIV=2;

  设置HCLK=100MHz,PCLK=50MHz,需设置CLKDIV,使其[2:1]为01,[0]为1。

  代码如下:


/*clock registers*/

#define LOCKTIME (*(volatile unsigned long *)0x4c000000)#define MPLLCON (*(volatile unsigned long *)0x4c000004)#define UPLLCON (*(volatile unsigned long *)0x4c000008)#define CLKCON (*(volatile unsigned long *)0x4c00000c)#define CLKSLOW (*(volatile unsigned long *)0x4c000010)#define CLKDIVN (*(volatile unsigned long *)0x4c000014)

#define FCLK 200000000#define HCLK 100000000#define PCLK 50000000#define S3C2410_MPLL_200MHZ ((0x5c<<12)|(0x04<<4)|(0x00))#define S3C2440_MPLL_200MHZ ((0x5c<<12)|(0x01<<4)|(0x02))void clock_init(void){   // LOCKTIME = 0x00ffffff; // 使用默认值即可   CLKDIVN = 0x03; // FCLK:HCLK:PCLK=1:2:4, HDIVN=1,PDIVN=1

  /* s3c2440手册十几个定的设置:如果HDIVN非0,CPU的总线模式应该从“fast bus mode”变为“asynchronous bus mode” */  __asm__(     "mrc p15, 0, r1, c1, c0, 0\n" /* 读出控制寄存器 */     "orr r1, r1, #0xc0000000\n" /* 设置为“asynchronous bus mode” */     "mcr p15, 0, r1, c1, c0, 0\n" /* 写入控制寄存器 */   );

  /* 判断是S3C2410还是S3C2440 */   if ((GSTATUS1 == 0x32410000) || (GSTATUS1 == 0x32410002))   {     MPLLCON = S3C2410_MPLL_200MHZ; /* 现在,FCLK=200MHz,HCLK=100MHz,PCLK=50MHz */   }   else   {     MPLLCON = S3C2440_MPLL_200MHZ; /* 现在,FCLK=200MHz,HCLK=100MHz,PCLK=50MHz */   } }


 

转载于:https://www.cnblogs.com/sekon/p/6440686.html

最新回复(0)