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

来源:互联网 发布:网络词吃狗粮的意思 编辑:程序博客网 时间:2024/05/22 15:52

 由于本日志不能上传附件,所以 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();                                                  /*  异步总线工作模式            */}

SylixOS技术讨论群(32537017) SylixOS开发者联盟群(216907470)

系统常用链接:
【1】系统主页  www.sylixos.com
【2】系统百科  wiki.sylixos.com/index.php/%E9%A6%96%E9%A1%B5
【3】系统下载  git.sylixos.com/cgit/
【4】系统论坛  bbs.sylixos.com/forum.php
【5】社区新闻  bbs.sylixos.com/forum.php
【6】清华镜像站点 coop.tuna.tsinghua.edu.cn/git  coop.tuna.tsinghua.edu.cn/git (改版中)
【7】北邮镜像站点(建设中)


0 0
原创粉丝点击