从教你学DSP 28335可以看到,这两个是外部晶振导入
如果在28069上这样连接,在X1和X2之间连接晶振,XCLKIN接地,此时选用的是外部时钟还是内部时钟,如果XCLKIN不接地,有无影响
您好,
在内部,XCLKIN由CLKCTL寄存器中的禁用位门控,强烈建议将此引脚接地,以便在不使用外部时钟时不会将噪音耦合到输入时钟。
如果CLKCTL[OSCCLKSRCSEL]设置为1 (使用外部时钟源),并且CLKCTL[XCLKINOFF]被清除为0,则任何内部时钟源或其他外部时钟源都将无法为设备计时。 希望这能回答您的问题。 请尝试查看数据表中的时钟树图(图8-11)以获得更清晰的信息。
如果您按照图6-11连接了 XTAL、则需要将 CLKCTL[XTALLOSCOFF]设置为"1"、并将 CLKCTL[XCLKINOFF]设置为"1"以启用外部晶体为器件计时。 是否有您尝试运行的示例代码?
这个我之前就试过的 会卡死在flash传递到Rom的地方
函数默认不是XTALOSCOFF 为0吗
void
XtalOscSel(void)
{
EALLOW;
SysCtrlRegs.CLKCTL.bit.XTALOSCOFF = 0; // Turn on XTALOSC
//
// Wait for 1ms while XTAL starts up
//
DELAY_US(1000);
SysCtrlRegs.CLKCTL.bit.XCLKINOFF = 1; // Turn off XCLKIN
SysCtrlRegs.CLKCTL.bit.OSCCLKSRC2SEL = 0; // Switch to external clock
//
// Switch from INTOSC1 to INTOSC2/ext clk
//
SysCtrlRegs.CLKCTL.bit.OSCCLKSRCSEL = 1;
//
// Clock Watchdog off of INTOSC1 always
//
SysCtrlRegs.CLKCTL.bit.WDCLKSRCSEL = 0;
SysCtrlRegs.CLKCTL.bit.INTOSC2OFF = 1; // Turn off INTOSC2
SysCtrlRegs.CLKCTL.bit.INTOSC1OFF = 0; // Leave INTOSC1 on
EDIS;
}
您好, 是的,这是启用外部Crystal的正确函数调用。 您能否描述在切换到外部晶体之前采取的步骤? 您正在运行的测试是否首先使用INTOSC,然后再尝试切换到XTAL? 可能在切换时钟源之间,设备遇到缺少时钟,导致系统挂起。 另外,您能否指定您尝试使用的晶体频率以及PLL设置是什么?
使用 XtalOscSel()函数启用 XTAL 后、您是否立即运行 InitPll ()函数、然后运行 InitPeripheralClocks ()?
这个我之前就试过的 会卡死在flash传递到Rom的地方
好的、您之前提到过代码会卡在闪存中至 ROM 中? 您能否更详细地解释这一点或更好地说明一下、您能在代码卡住的地方捕获一个代码片段吗? 希望我们可以跟踪导致代码卡住的原因。
死循环在这里
memCopy((uint16_t *)&RamfuncsLoadStart,(uint16_t *)&RamfuncsLoadEnd,(uint16_t *)&RamfuncsRunStart);
void memCopy(uint16_t *srcStartAddr,uint16_t *srcEndAddr,uint16_t *dstAddr)
{
while(srcStartAddr <= srcEndAddr)
{
*dstAddr++ = *srcStartAddr++;
}
return;
}
修改成 memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (Uint32)&RamfuncsLoadSize);
也是在这里死循环