zth_gyj的个人空间 https://bbs.21ic.com/?1515268 [收藏] [复制] [RSS]

日志

[原创]SylixOS的BSP开发实例之S3C2416 【第一篇】时钟配置

已有 623 次阅读2015-6-26 11:02 |个人分类:S3C2416|系统分类:ARM| 开发

   由于本日志不能上传附件,所以 SylixOS 与 S3C2416的常用文档请参见 pan.baidu.com/s/1bnwI77p。

    在SylixOSBSP中时钟的初始化文件位置在“bsp_zth2416\SylixOS\bsp\targetInit.c”中,其中“bsp_zth2416”为BSP工程名,其中通过RealCoder打开“BASE工程”与“BSP工程”如下图所示。


其中时钟配置说明如下图所示。

External Crystal 12M
    MPLLCLK = 800M
    EPLLCLK = 96M, ARMCLK = 400M, HCLK = 133M, DDRCLK = 266M, SSMCCLK = 66M, PCLK = 66M, HSMMC1 = 24M

    ARMCLK = MPLLout / ARMCLK Ratio = MPLLout / (ARMDIV + 1) = 800 / 2 = 400MHz
    HCLK   = MPLLout / HCLK Ratio   = MPLLout / ((PREDIV+1) * (HCLKDIV + 1)) = 800 / (3 * 2) = 133MHz
    PCLK   = HCLK    / PCLKDIV      = 133 / 2 = 66MHz

    ARMDIV  1/1 = 3'b000 1/2 = 3'b001 1/3 = 3'b010 1/4 = 3'b011 1/6 = 3'b101 1/8 = 3'b111
    PREDIV  2'b00 2'b01 2'b02 2'b03
    HCLKDIV 2'b00 2'b01 2'b03
    PCLKDIV 1'b0 1'b1

  Page 89
  PLL output frequency = 800MHz
    ARMCLK = 400MHz, HCLK = 133MHz, PCLK = 66MHz, DDRCLK = 266MHz SSMCCLK = 66MHz
    ARMDIV = 3'b001, PREDIV = 2'b10, HCLKDIV = 2'b01, PCLKDIV = 1'b1 HALKHCLK = 1'b1

  PLL output frequency = 533MHz
    ARMCLK = 266MHz, HCLK = 133MHz, PCLK = 66MHz, DDRCLK = 266MHz SSMCCLK = 66MHz
    ARMDIV = 3'b0001, PREDIV = 2'b01, HCLKDIV = 2'b01, PCLKDIV = 1'b1 HALKHCLK = 1'b1


PLL配置函数如下:

/*********************************************************************************************************
** 函数名称: pllInit
** 功能描述: 初始化 PLL
** 输  入  : NONE
** 输  出  : NONE
** 全局变量:
** 调用模块:
*********************************************************************************************************/
static void  pllInit (void)
{
    volatile int        i;

    /*
     *  ARMCLK Ratio    = (ARMDIV  + 1)                  = 2
     *  HCLK Ratio      = (PREDIV  + 1) * (HCLKDIV + 1)  = 6
     *  pCLK Ratio      = (PCLKDIV + 1)                  = 2
     *
     *  ARMCLK          = MCLK / ARMCLK Ratio            = 400   MHZ
     *  HCLK            = MCLK / HCLK Ratio              = 133   MHZ
     *  PCLK            = HCLK / pCLK Ratio              = 66    MHZ
     *  HALF(SSMC)CLK   = HCLK / 2                       = 66    MHZ
     */
    rCLKDIV0 = (1 << 9) |                                               /*  ARMDIV                      */
               (2 << 4) |                                                  /*  PREDIV                      */
               (1 << 3) |                                               /*  HALFHCLK                    */
               (1 << 2) |                                                  /*  PCLKDIV                     */
               (1 << 0);                                                  /*  HCLKDIV                     */

    rLOCKCON0 = 0x00000E10;

    rCLKDIV1 = 1 << 4;                                                    /*  USB 的固定时钟 48MHz         */

    rCLKSRC |=  (3 << 7);                                               /*  10 XTAL 11 EXTCLK           */
    rCLKSRC |=  (1 << 6);                                                  /*  EPLL Out                    */
    rCLKSRC |=  (1 << 4);                                                  /*  MPLL Out                    */

    rLOCKCON1 = 0x00001780;

    for (i = 0; i < 0x10000; i++) {
    }
}

CLOCK配置如下:

/*********************************************************************************************************
** 函数名称: clockInit
** 功能描述: 时钟初始化
** 输  入  : NONE
** 输  出  : NONE
** 全局变量:
** 调用模块:
*********************************************************************************************************/
static void  clockInit (void)
{
    /*
     * MCLK = 800 MHZ
     */
    rMPLLCON = (0    << 24) |                                              /*  MPLL ON                     */
               (400  << 14) |                                             /*  MDIV                        */
               (3    <<  5) |                                           /*  PDIV                        */
               (1    <<  0);                                            /*  SDIV                        */

    /*
     * ECLK = 96 MHZ (48 MHz 晶振)
     * 这里各种依赖于ECLK的外设时钟不配置
     * 由具体的驱动去配置
     */
    rEPLLCON = (0  << 25) |                                                /*  EPLL 在停止模式时关闭       */
               (0  << 24) |                                             /*  使能 EPLL                   */
                (32 << 16) |                                              /*  MDIV                        */
               (1  <<  8) |                                               /*  PDIV                        */
               (4  <<  0);                                                /*  SDIV                        */
    rEPLLCON_K = 0x0000;                                                /*  KDIV                        */

    armAsyncBusMode();                                                  /*  异步总线工作模式            */
}



路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)