zoukankan      html  css  js  c++  java
  • ADI的SHARC系列处理器的内核PLL管理(4.2)

    SHARC处理器使用PLL来获得比时钟源(CLKIN)更高频率的时钟。PLL产生处理器的外设、处理器内核和内部存储器所需的时钟。在硬件上电期间,处理器的CLK_CFG1-0引脚选择处理器内核时钟(CCLK)与CLKIN之比,通过开关来选择比值,比值包括6:1,16:1,32:1。电源管理控制寄存器(PMCTL)可实现由软件对PLL的动态编程。PMCTL用于选择硬件引脚不支持的CCLK与CLKIN的比值。

    PLL的框图如图所示:

    它包括单输入分频器、乘法器和一个产生CCLK的分频器。
    对于ADSP-2136x和ADSP-2137x处理器来说PCLK是CCLK的一半。

    下面介绍一下PLL编程步骤:
    在设置了乘法器的值之后,仅使用乘法器对PLL编程时,应用程序应将PLL设置为旁路模式并等待PLL锁定在新频率。在旁路模式,处理器内核运行频率为CLKIN。PLL在4096个CCLK周期(在本例是CLKIN周期)之后才能锁定于编程频率。一旦PLL锁定,应将旁路模式取消。

    仅使用分频器对PLL编程时,分频器的值通过PLLDx位设置,在同一指令中用DIVEN位将分频器使能。

    同时使用分频器和乘法器对PLL进行编程有两种方法:
    (1)方法一
    设置PLL乘法器和分频器的值,并将DIVEN位设置为1使能分频器;
    一个CCLK时钟周期之后,通过设置旁路位(PLLBP)为1将PLL设置为旁路模式。在对PMCTL寄存器进行写操作之前将DIVEN位清除;
    在旁路状态等待最少4096个周期直到PLL锁定;
    通过清除旁路位(PLLBP=0)撤销PLL旁路模式。在对PMCTL寄存器进行写操作之前确保已经清除了DIVEN位。

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    //Address 0x2000,
        pmctlsetting= *pPMCTL;
        pmctlsetting &= ~(0xFF); //Clear

        // CLKIN= 24.576 MHz, Multiplier= 27, Divisor= 2, CCLK_SDCLK_RATIO 2.
        // Core clock = (24.576 MHz * 27) /2 = 331.776 MHz
        // SDRAM Clock=[(24.576MHz*27)/2]/2=166MHz
        //PLL enable
        pmctlsetting= SDCKR2|PLLM27|PLLD2|DIVEN;  
        *pPMCTL= pmctlsetting;
        pmctlsetting|= PLLBP; 
        *pPMCTL= pmctlsetting; 
       
        pmctlsetting^=DIVEN; //异或,同则0,非同,则1  
        //在设置PMCTL寄存器的DIVEN位和将PLL设置为旁路模式之间有一个内核周期的延时
        //Wait for around 4096 cycles for the pll to lock.
        for (i=0; i<4096; i++)
              asm("nop;");

        *pPMCTL ^= PLLBP;       //Clear Bypass Mode  
        *pPMCTL |= (CLKOUTEN);  //and start clkout


    (2)方法二
    设置PLL乘法器和分频器的值并将旁路位(PLLBP)设置为1使PLL处于旁路状态;
    在旁路状态等待最少4096个周期直到PLL锁定;
    通过清除旁路位(PLLBP=0)撤销PLL旁路模式;
    等待一个CCLK周期;
    通过设置DIVEN位使能分频器。
    对PMCTL寄存器编程时需要考虑下面几个问题:
    使用乘法器和分频器对PLL编程时,在同一个CCLK周期不要同时对DIVEN和PLLBP位编程。对它们编程时至少间隔一个CCLK周期。
    在用户应用程序中,根据下述条件选择PLL乘法器的值:
    如果输入分频器未使能(INDIV=0),CLKIN和PLLM的乘积不要超过400MHz;
    如果输入分频器使能了(INDIV=1),CLKIN和PLLM的乘积不要超过800MHz.
    最大的VCO频率不能超过800MHz.VCO频率按照下面的式子计算:
    VCO频率计算:fVCO = 2 * PLLM * fINPUT
    CCLK频率计算:fCCLK = (2 * PLLM * fINPUT) / (2 * PLLN)
    式中:fVCO=VCO频率,fCCLK =CCLK频率;PLLM=乘法器编程值;PLLN=分频器编程值;fINPUT =PLL输入频率;fINPUT=CLKIN(当禁用输入分频器时),或CLKIN/2(当使能输入分频器时)。
    (3)将PLL设置为旁路模式(通过将PLLBP位设置为1)或者取消PLL的旁路模式(清除PLLBP位)过程中在写PMCTL寄存器时要清除DIVEN位。
    (4)在PMCTL寄存器中设置CCLK与SDCLK之比时要对DIVEN位置位。

    PLL用于产生内核时钟和外设时钟。如果对PLL编程错误,PLL不会锁定在需要的频率上。这会使处理器内核和外设的运行出现异常。

  • 相关阅读:
    硬盘SSD、HDD和SSHD都是什么意思?哪种类型硬盘最好?
    记录vlookup的小问题
    找到两个字符串中相同的部分| 对字符串list后的奇妙发现
    jiayan:Cannot read model 'jiayan.klm' (utilfile.cc:74 in util::OpenReadOrThrow threw ErrnoException because `-1 == (ret = _open(name,
    windows下装kenlm
    每日一题力扣98 验证二叉搜索树
    每日一题力扣230 二叉搜索树中的第K小的元素
    每日一题力扣538 把二叉搜索树转换为累加树
    每日一题力扣530 二叉搜索树的最小绝对查
    每日一题力扣700 二叉搜索树中的搜索
  • 原文地址:https://www.cnblogs.com/itxiaocaiyidie/p/2399853.html
Copyright © 2011-2022 走看看