//******************************************************************************
// MSP-FET430P140 Demo - Basic Clock, MCLK Sourced from HF XTAL XT2
//
// Description: Proper selection of an external HF XTAL for MCLK is shown
// by first polling the OSC fault until XTAL is sta××e - only then is MCLK
// sourced by XT2. MCLK is on P5.4.
// ACLK= n/a, MCLK= XT2, SMCLK= DCO,
// //* HF XTAL NOT INSTALLED ON FET *//
// //* Min Vcc required varies with MCLK frequency - refer to datasheet *//
//
// MSP430F149
// -----------------
// /|\| XT2IN|-
// | | | XTAL (455k - 8Mhz)
// --|RST XT2OUT|-
// | |
// | P5.4|-->MCLK = XTAL
//
//
// M. Buccini
// Texas Instruments Inc.
// Feb 2005
// Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.21A
//******************************************************************************
同意楼上。唯一需要改变一点的就是把for (i = 0xFF; i > 0; i--); // Time for flag to set
改成for (i = 0xFFFF; i > 0; i--); 因为之前做过测试发现 即使跳出
do
{
IFG1 &= ~OFIFG; // Clear OSCFault flag
for (i = 0xFF; i > 0; i--); // Time for flag to set
}
while ((IFG1 & OFIFG)); // OSCFault flag still set?
这个循环也不能肯定XT2已经稳定 退出这个循环之后 OFIFG还是又可能置位的
晶振稳定过程是一个“上下抖动”的过程 它时而置位OFIFG 时而又没有置位OFIFG 所以即使程序能够跳出
do
{
IFG1 &= ~OFIFG; // Clear OSCFault flag
for (i = 0xFF; i > 0; i--); // Time for flag to set
}
while ((IFG1 & OFIFG)); // OSCFault flag still set?
这个循环 也不意味着 此时IFG & OFIFG 就肯定是0