This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F2808系统时钟配置不对,始终不能达到配置想要的晶振频率。



目前硬件上 X1  X2脚接了外部无源晶振20M,CLKIN接地。使用函数

void InitSysCtrl(void)
{

// Disable the watchdog
DisableDog();

// Initialize the PLL control: PLLCR and CLKINDIV
// DSP28_PLLCR and DSP28_CLKINDIV are defined in DSP280x_Examples.h
InitPll(DSP28_PLLCR,DSP28_CLKINDIV);

// Initialize the peripheral clocks
InitPeripheralClocks();
}

在“DSP280X_Eamples.h”中定义了

#define DSP28_CLKINDIV   0   // Enable /2 for SYSCLKOUT

#define DSP28_PLLCR   10

但是没有得到想要的晶振频率。从例子中也找不到配置使用X1 X2引脚的晶振。求解!!!!!!!!!!!!查看了很多例子InitSysCtrl()函数都一样,不知道是否还有其他文件有关时钟的配置???

可以确认硬件没有虚焊,晶振有起震。

附件为工程,请大神给予帮助

source.rar
  • PLL配置成

    #define DSP28_PLLCR   10, 

    #define DSP28_CLKINDIV   1

    得到100MHz,或者

    #define DSP28_PLLCR   5, 

    #define DSP28_CLKINDIV   0

    发个Demo例程的配置文件,注意晶振是10MHz的。

  • 不理解!!!!!!!!!

    按照这个文件的注释


    /*-----------------------------------------------------------------------------
    Specify the PLL control register (PLLCR) and clock in divide (CLKINDIV) value.

    if CLKINDIV = 0: SYSCLKOUT = (OSCCLK * PLLCR)/2
    if CLKINDIV = 1: SYSCLKOUT = (OSCCLK * PLLCR)
    -----------------------------------------------------------------------------*/
    #define DSP28_CLKINDIV 0 // Enable /2 for SYSCLKOUT
    //#define DSP28_CLKINDIV 1 // Disable /2 for SYSCKOUT

    #define DSP28_PLLCR 10
    //#define DSP28_PLLCR 9
    //#define DSP28_PLLCR 8
    //#define DSP28_PLLCR 7
    //#define DSP28_PLLCR 6 // Uncomment for 60 MHz devices [60 MHz = (20MHz * 6)/2]
    //#define DSP28_PLLCR 5
    //#define DSP28_PLLCR 4
    //#define DSP28_PLLCR 3
    //#define DSP28_PLLCR 2
    //#define DSP28_PLLCR 1
    //#define DSP28_PLLCR 0 // PLL is bypassed in this mode
    //----------------------------------------------------------------------------

    如果定义按照你的

    #define DSP28_PLLCR   10, 

    #define DSP28_CLKINDIV   1

    得到100MHz,或者

    #define DSP28_PLLCR   5, 

    #define DSP28_CLKINDIV   0

    第一种 10*10Mhz 第二种5*10Mhz/2=50Mhz

    我外部是20Mhz 

    PLL配置成

    #define DSP28_PLLCR   10, 

    #define DSP28_CLKINDIV   0

    按照注释 20*10/2=100MHZ

    ???????

  • 不能只看注释,注释很多情况都会误导你,你更应该以手册为准,这边的DSP28_CLKINDIV位应该是1有效,你可以查以下手册

  • 我实际的用 SCLKOU脚输出,配置那个CLKINDIV,验证的是0是使能CLKINDIV这个位的。只是晶振频率就是不对。配置CLKINDIV为1 和0 的时候刚好是2倍数关系

  • 实际输出是多少?或者再使用5倍频,不分频试试,看看这些设定后的比率是否正确,如果正确,可能是其他地方的问题。因为你使用的SCLKOU,那边输出一般也是有配置项的。

  • 现在头大的就是系统的时钟频率不对,好像跟外部的晶振没有什么关系,换20M和换4M的。使用的硬件电路就是 X1 X2 接20M 。引脚CLKIN接地。我上面一开始有附件工程的,能否麻烦哪位大神看下,帮我配置下,我来测试下。实在不知道哪里的原因了。

  • 按照这个表格配置,PLLCR[DIV] = 10, PLLSTS[CLKINDIV] = 0, 20*10/2 =100MHz; 或PLLCR[DIV] = 5, PLLSTS[CLKINDIV] = 1, 20*10/1 = 100MHz;或者按照发的文件直接只配置PLLCR[DIV] = 10即可,这个是TI的例程。你是如何测试CPU时钟的正确性的?还有外部的电路确认过吗?电容的值等。