TMS320F28069使用内部振荡或者使用外部晶体工作均正常,使用外部时钟输入出现问题,具体情况如下:
硬件连接:X1——接地;X2——悬空,有源晶振产生的时钟从GPIO19或GPIO38输入。
软件设置如下:InitSysCtrl();中采用ExtOscSel()
// IntOsc1Sel();
ExtOscSel();
//XtalOscSel ();
其中ExtOscSel()代码如下:
void ExtOscSel (void) {
EALLOW;
SysCtrlRegs.XCLK.bit.XCLKINSEL = 1; // 1-GPIO19 = XCLKIN, 0-GPIO38 = XCLKIN
SysCtrlRegs.CLKCTL.bit.XTALOSCOFF = 1; // Turn on XTALOSC
SysCtrlRegs.CLKCTL.bit.XCLKINOFF = 0; // Turn on 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;
}
现在的问题是:如果时钟从GPIO38接入,工作正常,但是从GPIO19接入,就不能工作。当然,以上ExtOscSel()函数中SysCtrlRegs.XCLK.bit.XCLKINSEL都做好了相应的设置。
更为奇怪的是:如果时钟从GPIO38接入,无论SysCtrlRegs.XCLK.bit.XCLKINSEL设置为0或者1,都可以正常工作;而如果时钟从GPIO19接入,无论SysCtrlRegs.XCLK.bit.XCLKINSEL怎么设置,都不能正常工作。仿佛这个设置从来就没有起作用!?
从手册上看,28069默认的外部时钟输入口是GPIO38,如果使用GPIO38就会和JTAG时钟冲突,怎么把它切换到GPIO19呢?除了上述的SysCtrlRegs.XCLK.bit.XCLKINSEL设置以外,是否还需要其他的硬件或软件设置。
谢谢大家!