在XT接了一个32768的晶振,在XT2接了一个8M的晶振,
初始化时涉及时钟语句:
FLL_CTL0 |= XCAP14PF;
FLL_CTL1 = SELM_XT2 + SELS;
FLL_CTL1 = FLL_CTL1 & ~XT2OFF;
用示波器观察P1口的时钟,
发现SMCLK和ACLK的输出都对,只有MCLK的输出达不到8M(MCLK的
输出是由SCFQCTL控制了),请高手看看怎么回事?,谢谢。
另外,我要用449做从机,接收一个1Mhz时钟的SPI信号,
不知IO口的速度能不能达到1M以上,
我用以下语句测试
while(1)
{
P3OUT |= 0x02;
P3OUT &= 0xfd;
}
发现P3.1的翻转频率只能在400k,有没有办法解决呢?
MCLK输出不是8M可能是8M晶体未完全起振的原因,最好是先判断失败标志位有效再切换,参考如下:
#include "msp430x44x.h"
void main(void)
{
unsigned int i;
WDTCTL = WDTPW + WDTHOLD; // stop watchdog timer
FLL_CTL0 |= XCAP18PF; // set load capacitance for 32k xtal
FLL_CTL1 = FLL_CTL1 & ~XT2OFF; // clear bit = high freq xtal on
do // loop until flag is clear
{
FLL_CTL0 = FLL_CTL0 & ~XT2OF; // clear high freq oscillator fault flag
for (i = 50000; i; i--); // delay for crystal to start and FLL to lock
}
while (FLL_CTL0 & XT2OF); // test high freq oscillator fault flag
// if flag remained clear then -
FLL_CTL1 = SELS; // switch SMCLK = HF xtal
P1DIR = 0x32; // P1.1, P1.4 & P1.5 to outputs
P1SEL = 0x32; // P1.1, P1.4 & P1.5 functions to output
// MCLK, SMCLK & ACLK
while(1); // loop in place
}
另外,按您的要求在8M频率下只执行while(1)循环理论上是可以达到2MHz,但只限于执行while(1)循环,您只出现400K,可能是MCLK未能达到8M。
谢谢版主回答,
但MCLK的问题仍然没能解决,现在输出的MCLK只受SCFQCTL的控制,最高只能到4M(128×32768),想选XT2为MCLK不成功,而且也没有XT2失效的标记,
因为SMCLK的输出是正确的。翻看以前的帖子,发现有网友有同样的问题,但没有解决方法。采用的方式还有摘开JTAG仿真口,提高工作电压到3.6V。不知有什么办法可以提高MCLK了,最起码也要到8M吧。郁闷ing
忘记问Vcc是几伏,在8M晶体频率下,Vcc最好保证是3.6V,否则出现工作不正常。
您用参考例程试试。应该是可以的。
版主,问题解决了,
又仔细看了看资料,发现和FLL+有关的寄存器IFG1也有振荡失效标志,
在例程需要再加一句
IFG1 = IFG1 & ~OFIFG;就可以实现MCLK的8M输出了。
现在的工作电压是3V,不用拔下JTAG仿真头。