TI中文支持网
TI专业的中文技术问题搜集分享网站

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()函数都一样,不知道是否还有其他文件有关时钟的配置???

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

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

Martin Yu:

PLL配置成

#define DSP28_PLLCR   10, 

#define DSP28_CLKINDIV   1

得到100MHz,或者

#define DSP28_PLLCR   5, 

#define DSP28_CLKINDIV   0

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

目前硬件上 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()函数都一样,不知道是否还有其他文件有关时钟的配置???

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

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

jianxing ding:

回复 Martin Yu:

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

按照这个文件的注释

/*—————————————————————————– 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

???????

目前硬件上 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()函数都一样,不知道是否还有其他文件有关时钟的配置???

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

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

rookiecalf:

回复 jianxing ding:

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

目前硬件上 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()函数都一样,不知道是否还有其他文件有关时钟的配置???

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

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

jianxing ding:

回复 rookiecalf:

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

目前硬件上 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()函数都一样,不知道是否还有其他文件有关时钟的配置???

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

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

rookiecalf:

回复 jianxing ding:

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

目前硬件上 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()函数都一样,不知道是否还有其他文件有关时钟的配置???

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

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

jianxing ding:

回复 rookiecalf:

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

目前硬件上 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()函数都一样,不知道是否还有其他文件有关时钟的配置???

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

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

Martin Yu:

回复 jianxing ding:

按照这个表格配置,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时钟的正确性的?还有外部的电路确认过吗?电容的值等。

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F2808系统时钟配置不对,始终不能达到配置想要的晶振频率。
分享到: 更多 (0)