S3C2440时钟设置

发布时间:2024-06-06  

S3C2440时钟设置

#define MDIV_405        0x7f << 12

#define PSDIV_405      0x21

#define LOCKTIME_OFFSET    0x00

#define MPLLCON_OFFSET      0x04

#define CLKCON_OFFSET      0x0c

#define CLKDIVN_OFFSET      0x14

#define CAMDIVN_OFFSET      0x18

/*******************************************************************************************

  * Reference to S3C2440 datasheet: Chap 7 Clock&Power Management

  *

  * Initialize System Clock FCLK=400MHz HCLK=100MHz PCLK=50MHz

  * FCLK is used by ARM920T

  * HCLK is used for AHB bus, which is used by the ARM920T, the memory controller,

  *      the interrupt controller, the LCD controller, the DMA and USB host block.

  * PCLK is is used for APB bus,which is used by the peripherals such as WDT,IIS,I2C,

  *      PWM timer,MMC interface,ADC,UART,GPIO,RTC and SPI.

  ******************************************************************************************/


  /*Set LOCKTIME as default value 0x00ffffff*/

    ldr r0, =ELFIN_CLOCK_POWER_BASE

    ldr r1, =0x00ffffff

    str r1, [r0, #LOCKTIME_OFFSET]  /*Set Clock Divider*/


 /*******************************************************************************************

  * Reference to S3C2440 datasheet: Chap 7-8 ~ Page 242

  *

  * Set the selection of Dividing Ratio between FCLK,HCLK and PCLK as FCLK:HCLK:PCLK = 1:4:8.

  * This ratio is determined by HDIVN(here is 2) and PDIVN(here is 1) control register.

  * Refer to the s3c2440 datasheet

  *******************************************************************************************/


    ldr r0, =ELFIN_CLOCK_POWER_BASE

    mov r1, #5

    str r1, [r0, #CLKDIVN_OFFSET]  /*Set Clock Divider*/

    mrc p15, 0, r1, c1, c0, 0

    orr r1, r1, #0xc0000000

    mcr p15, 0, r1, c1, c0, 0

 /***************************************************************************************

  *  Reference to S3C2440 datasheet: Chap 7-20 ~ Page 254

  *

  *  Set MPLLCON(0x4C000004) register as:

  *    [19:12]:  MDIV(Main Divider control)=0x7F

  *      [9:4]:  PDIV(Pre-devider control)=0x02

  *      [1:0]:  SDIV(Post divider control)=0x01

  *

  *  MPLL(FCLK) = (2 * m * Fin)/(p * 2^s)

  *  m=(MDIV+8), p=(PDIV+2), s=SDIV

  *

  *  So FCLK=((2*(127+8)*Fin)) / ((2+2)*2^1)

  *        = (2*135*12MHz)/8

  *        = 405MHz

  *  For FCLK:HCLK:PCLK=1:4:8, so HCLK=100MHz, PCLK=50MHz

  ***************************************************************************************/


    mov r1, #ELFIN_CLOCK_POWER_BASE

    mov r2, #MDIV_405

    add r2, r2, #PSDIV_405

    str r2, [r1, #MPLLCON_OFFSET]
 

    /* wait at least 200us to stablize all clock */

    mov r2, #0x10000

1:  subs    r1, r1, #1

    bne 1b

    mov pc, lr

    S3C2440 CPU默认的工作主频为12MHz或16.9344MHz,在我的2440的开发板上上使用的是12MHZ,这里使用最多的也是12M。使用PLL电路可以产生更高的主频供CPU及外围器件使用。

      S3C2440有两个PLL:MPLL和UPLL,UPLL专用与USB设备。MPLL用于CPU及其他外围器件。

      通过MPLL会产生三个部分的时钟频率:FCLK、HCLK、PLCK。FCLK用于CPU核,HCLK用于AHB总线的设备(比如SDRAM),PCLK用于APB总线的设备(比如UART)。

设置S3c2440的时钟频率就是设置MPLL的几个寄存器:

1、LOCKTIME:设为0x00ffffff

MPLL启动后需要等待一段时间(Lock Time),使得其输出稳定。位[23:12]用于UPLL,位[11:0]用于MPLL。使用确省值0x00ffffff即可。

2、CLKDIVN:用来设置FCLK:HCLK:PCLK的比例关系,默认为1:1:1

这里值设为0x05(HDIVN=2, PDIVN=1),即FCLK:HCLK:PCLK=1:4:8

3、MPLLCON:设为(0x7f << 12)|(0x02 << 4)|(0x01),即0x7f0021

对于MPLLCON寄存器,[19:12]为MDIV,[9:4]为PDIV,[1:0]为SDIV。有如下计算公式:

MPLL(FCLK) = (2 * m * Fin)/(p * 2^s)

 m=(MDIV+8), p=(PDIV+2), s=SDIV Fin 即默认输入的时钟频率12MHz。MPLLCON设为0x7f0021,可以计算出FCLK=400MHz,再由CLKDIVN的设置可知:HCLK=100MHz,PCLK=50MHz。

到这里我们应该彻底弄清楚了程序中经常出现的几个CLK:

Fin,MPLL,UPLL,FCLK,HCLK,PCLK.

Fin指CPU外围接的晶振本身的频率,通常为12MHz。

MPLL和UPLL分别指的是用于供整机系统的PLL和专用于USB的UPLL。

FCLK = MPLL = (m * Fin)/(p + 2^s);

HCLK,PCLK受CLKDIVN寄存器的影响,即当FCLK确定后,CLKDIVN决定了HCLK和PCLK


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>