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

 由于本日志不能上传附件,所以 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值