情况是这样的,硬件我用的是28027的开发板LAUNCHXL-F28027 C2000 Piccolo LaunchPad 。上面有12MHz的外部晶振,程序中我想改用外部晶振作为时钟源,在DSP2802x_SysCtrl.c里,我屏蔽了内部晶振初始化函数,加上了外部晶振初始化函数:
//IntOsc1Sel();
XtalOscSel ();
而XtalOscSel ()函数就是下面这个:
void XtalOscSel (void) {
EALLOW;
SysCtrlRegs.CLKCTL.bit.XTALOSCOFF = 0; // Turn on XTALOSC
SysCtrlRegs.CLKCTL.bit.XCLKINOFF = 1; // Turn off XCLKIN
SysCtrlRegs.CLKCTL.bit.OSCCLKSRC2SEL = 0; // Switch to external clock
SysCtrlRegs.CLKCTL.bit.OSCCLKSRCSEL = 1; // Switch from INTOSC1 to INTOSC2/ext clk
SysCtrlRegs.CLKCTL.bit.WDCLKSRCSEL = 1; // Switch Watchdog Clk Src to external clock
SysCtrlRegs.CLKCTL.bit.INTOSC2OFF = 1; // Turn off INTOSC2
SysCtrlRegs.CLKCTL.bit.INTOSC1OFF = 1; // Turn off INTOSC1
EDIS;
}
然后相应对PLL倍频数进行了修改。
完了之后编译成功,烧写到FLASH中没问题,但是运行就不正确。比如说采样是不对的,另外我定义的一个全局变量,在程序初始化中只对它赋值一次,后面就没有修改它的值了,但它却一直在0和所设定的值之间跳变。这些问题在我使用内部晶振作为时钟源时是不会发生的。
请问下,这是什么问题呢?改用外部晶振作为时钟源,除了上面的步骤,是不是还有什么步骤我漏了呢?
Green Deng:具体怎么修改时钟的设置的?
另外你可以测一下芯片的XCLKOUT引脚,看看你配置的时钟是否正确。
情况是这样的,硬件我用的是28027的开发板LAUNCHXL-F28027 C2000 Piccolo LaunchPad 。上面有12MHz的外部晶振,程序中我想改用外部晶振作为时钟源,在DSP2802x_SysCtrl.c里,我屏蔽了内部晶振初始化函数,加上了外部晶振初始化函数:
//IntOsc1Sel();
XtalOscSel ();
而XtalOscSel ()函数就是下面这个:
void XtalOscSel (void) {
EALLOW;
SysCtrlRegs.CLKCTL.bit.XTALOSCOFF = 0; // Turn on XTALOSC
SysCtrlRegs.CLKCTL.bit.XCLKINOFF = 1; // Turn off XCLKIN
SysCtrlRegs.CLKCTL.bit.OSCCLKSRC2SEL = 0; // Switch to external clock
SysCtrlRegs.CLKCTL.bit.OSCCLKSRCSEL = 1; // Switch from INTOSC1 to INTOSC2/ext clk
SysCtrlRegs.CLKCTL.bit.WDCLKSRCSEL = 1; // Switch Watchdog Clk Src to external clock
SysCtrlRegs.CLKCTL.bit.INTOSC2OFF = 1; // Turn off INTOSC2
SysCtrlRegs.CLKCTL.bit.INTOSC1OFF = 1; // Turn off INTOSC1
EDIS;
}
然后相应对PLL倍频数进行了修改。
完了之后编译成功,烧写到FLASH中没问题,但是运行就不正确。比如说采样是不对的,另外我定义的一个全局变量,在程序初始化中只对它赋值一次,后面就没有修改它的值了,但它却一直在0和所设定的值之间跳变。这些问题在我使用内部晶振作为时钟源时是不会发生的。
请问下,这是什么问题呢?改用外部晶振作为时钟源,除了上面的步骤,是不是还有什么步骤我漏了呢?
mangui zhang:时钟问题外时钟的频率内部倍数分频数不是能对边改的
情况是这样的,硬件我用的是28027的开发板LAUNCHXL-F28027 C2000 Piccolo LaunchPad 。上面有12MHz的外部晶振,程序中我想改用外部晶振作为时钟源,在DSP2802x_SysCtrl.c里,我屏蔽了内部晶振初始化函数,加上了外部晶振初始化函数:
//IntOsc1Sel();
XtalOscSel ();
而XtalOscSel ()函数就是下面这个:
void XtalOscSel (void) {
EALLOW;
SysCtrlRegs.CLKCTL.bit.XTALOSCOFF = 0; // Turn on XTALOSC
SysCtrlRegs.CLKCTL.bit.XCLKINOFF = 1; // Turn off XCLKIN
SysCtrlRegs.CLKCTL.bit.OSCCLKSRC2SEL = 0; // Switch to external clock
SysCtrlRegs.CLKCTL.bit.OSCCLKSRCSEL = 1; // Switch from INTOSC1 to INTOSC2/ext clk
SysCtrlRegs.CLKCTL.bit.WDCLKSRCSEL = 1; // Switch Watchdog Clk Src to external clock
SysCtrlRegs.CLKCTL.bit.INTOSC2OFF = 1; // Turn off INTOSC2
SysCtrlRegs.CLKCTL.bit.INTOSC1OFF = 1; // Turn off INTOSC1
EDIS;
}
然后相应对PLL倍频数进行了修改。
完了之后编译成功,烧写到FLASH中没问题,但是运行就不正确。比如说采样是不对的,另外我定义的一个全局变量,在程序初始化中只对它赋值一次,后面就没有修改它的值了,但它却一直在0和所设定的值之间跳变。这些问题在我使用内部晶振作为时钟源时是不会发生的。
请问下,这是什么问题呢?改用外部晶振作为时钟源,除了上面的步骤,是不是还有什么步骤我漏了呢?
rookiecalf:查看锁相环配置是否正确,参考数据手册的时钟配置章节