DSP2335的时钟PLL配置

本文详细介绍了PLL模块的工作原理,包括xclkin和振荡器时钟的区别,以及PLLSTS和PLLCR寄存器的作用。着重讲解了锁相环的控制流程,如何配置倍频和分频,以及初始化函数中处理时钟丢失和分频选择的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PLL模块框图

xclkin是直接进来的外部时钟;

而下面的是振荡器(晶振出来)的时钟

PLLSTS 锁相环状态寄存器     PLLCR  锁相环控制寄存器

PLLSTS【oscoff】 决定着外部时钟的输入

PLLSTS【plloff】   锁相器关闭位  0使能PLL

锁相环控制寄存器用于控制芯片 PLL 的倍数,在向 PLL 控制寄存器进行写操
作之前,需要具备以下两个条件。
(1)在 PLL 完全锁住后,即 PLLSTS[PLLLOCKS]=1。
(2)芯片不能工作在 LIMP 模式,即 PLLSTS[MCLKSTS]=0。

PLLSTS寄存器

mclksts判断此位不能是1,如果是1

使用mclkclr位写1,mclksts清零此位

PLLCR 寄存器

DIV就是旁路PLL,即pLL配置了,不通给不作为系统时钟;

使用此PLLCR寄存器额外注意需要PLLSTS  DIVSEL=0;

DIV设置好了,等待锁相环锁住就完成配置了

使用此寄存器倍频后,等待PLLSTS寄存器的PLLLOCK位=1完全锁住如下说明

最后通过PLLSTS【DIVSEL】分频送进系统时钟

最终的系统频率=输入时钟*DIV/DIVSEL   div 有对应的表  DIVSEL也是

程序

void InitPll(Uint16 val, Uint16 divsel)//12 2
{
   volatile Uint16 iVol;


   if (SysCtrlRegs.PLLSTS.bit.MCLKSTS != 0)//时钟信号丢失位  1为丢失
   {
      EALLOW;

      SysCtrlRegs.PLLSTS.bit.MCLKCLR = 1;//时钟信号丢失 清除/复位
      EDIS;
      asm("        ESTOP0");     // Uncomment for debugging purposes
   }


   if (SysCtrlRegs.PLLSTS.bit.DIVSEL != 0)//如果分频了
   {
       EALLOW;
       SysCtrlRegs.PLLSTS.bit.DIVSEL = 0;//设置为不分
       EDIS;
   }

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

      EALLOW;

      SysCtrlRegs.PLLSTS.bit.MCLKOFF = 1;//丢失时钟检测关闭位  关闭
      SysCtrlRegs.PLLCR.bit.DIV = val;//倍频
      EDIS;
      DisableDog();

      while(SysCtrlRegs.PLLSTS.bit.PLLLOCKS != 1)//等待锁相器锁上 等于1
      {

      }

      EALLOW;
      SysCtrlRegs.PLLSTS.bit.MCLKOFF = 0;//丢失时钟检测关闭位   开启
      EDIS;
    }
    if((divsel != 2))  //
    {
        EALLOW;
        SysCtrlRegs.PLLSTS.bit.DIVSEL = divsel;//采用2分
        EDIS;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值