浮名此生分享 http://blog.sciencenet.cn/u/hailangww 工学博士

博文

[转载]官方锁相环初始化例程

已有 1483 次阅读 2022-9-27 13:14 |系统分类:科研笔记|文章来源:转载

/*

 * 函数名称:InitPll

 * 函数输入:倍频参数val,分频参数divsel

 *            val取值为0到10,表示倍频数;divsel取值0到4,0和1表示4分频,2表示2分频,3表示不分频

 * 函数输出:无

 * 函数调用:InitPll(10,2);

 * 先将外部时钟倍频10倍,在分频1/2,最后产生的时钟CLKIN输入CPU28x

 */

void InitPll(unsigned short div, unsigned short divsel)

{


   // 确保PLL不是工作在limp mode下,即有外部时钟进入PLL

   if (SysCtrlRegs.PLLSTS.bit.MCLKSTS != 0)

   {

      //检测到无外部时钟,软件要采集恰当的措施保证系统不出现事故,该措施包括

      //使系统停机、复位等

      //用适合的函数替换下面一行

      // SystemShutdown(); function.

      asm("        ESTOP0");

   }


   // PLLCR从0x0000改变前,PLLSTS[DIVSEL]必须为0

   // 外部RST复位信号会使PLLSTS[DIVSEL]复位

   // 此时分频为1/4

   if (SysCtrlRegs.PLLSTS.bit.DIVSEL != 0)

   {

       EALLOW;

       SysCtrlRegs.PLLSTS.bit.DIVSEL = 0;

       EDIS;

   }


   // 前面条件都满足后,可以改变PLLCR[DIV]

   if (SysCtrlRegs.PLLCR.bit.DIV != val)

   {


      EALLOW;

      // 在设置PLLCR[DIV]前,要禁用主振荡器检测逻辑

      //Missing clock detect logic

      SysCtrlRegs.PLLSTS.bit.MCLKOFF = 1;

      SysCtrlRegs.PLLCR.bit.DIV = div;

      EDIS;


      //等待PLL稳定且处于锁定状态,即PLLSTS[LOCKS]置位

      //等待稳定的时间可能略长,需要禁用看门狗或者循环喂狗


      //屏蔽注释,禁用看门够

      DisableDog();


      while(SysCtrlRegs.PLLSTS.bit.PLLLOCKS != 1)

      {

          //屏蔽注释,喂狗

          // ServiceDog();

      }


      EALLOW;

      SysCtrlRegs.PLLSTS.bit.MCLKOFF = 0;

      EDIS;

    }


    // 如果需要分频1/2

    if((divsel == 1)||(divsel == 2))

    {

        EALLOW;

        SysCtrlRegs.PLLSTS.bit.DIVSEL = divsel;

        EDIS;

    }


    //注意:下面代码只有在PLL是旁路或者关闭模式时,才可被执行,其他模式禁止。

    //倍频时一定要分频,不倍频时才允许不分频

    //如果需要切换分频到1/1

    // * 首先从默认1/4分频切换到1/2分频,让电源稳定

    //   稳定所需要的时间依赖于系统运行速度,此处延时50us只是作为一个特例

    // * 稳定后,再切换到1/1

    if(divsel == 3)

    {

        EALLOW;

        SysCtrlRegs.PLLSTS.bit.DIVSEL = 2;

        DELAY_US(50L);

        SysCtrlRegs.PLLSTS.bit.DIVSEL = 3;

        EDIS;

    }

}


版权声明:本文为CSDN博主「扶摇之上」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/lygoflying/article/details/50445489




https://blog.sciencenet.cn/blog-54347-1357039.html

上一篇:[转载]初始化外设时钟
下一篇:[转载]解除代码安全模式
收藏 IP: 58.34.184.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-23 16:02

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部