为什么MSP430单片机一开高频模式(XTS置位)并且设置了XT1后,XT1HFOFFG就会置位
以下是CCS上的MSP430F5438A的例程(删掉了两处),这个程序的运行后发现UCSCTL7中的XT1HFOFFG标志位一直为1,导致程序死在}while (SFRIFG1&OFIFG); 这一步。附图中为UCSCTL7寄存器的值。希望解答,谢谢!
// MSP430F543xA Demo - LFXT1 HF Xtal + Internal DCO
#include "msp430x54xA.h"
//#include "hal_pmm.h" 此处删掉 此处删掉 此处删掉 此处删掉 此处删掉 此处删掉 此处删掉 此处删掉 此处删掉
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
// SetVCore(PMMCOREV_2); // Set VCore to 1.8MHz for 20MHz 此处删掉 此处删掉 此处删掉 此处删掉 此处删掉 此处删掉 此处删掉
P11DIR = BIT2 + BIT1 + BIT0; // P11.2,1,0 to output direction
P11SEL = BIT2 + BIT1 + BIT0; // P11.2 to output SMCLK, P11.1
// to output MCLK and P11.0 to
// output ACLK
P7SEL |= 0x03; // Port select XT1
UCSCTL3 |= SELREF_2; // FLL Ref = REFO
UCSCTL6 &= ~XT1OFF; // Set XT1 On
UCSCTL6 |= XT1DRIVE_3 + XTS; // Max drive strength, adjust
// according to crystal frequency.
// LFXT1 HF mode
// Loop until XT1,XT2 & DCO stabilizes
do {
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG); // Clear XT2,XT1,DCO fault flags
SFRIFG1 &= ~OFIFG; // Clear fault flags
}while (SFRIFG1&OFIFG); // Test oscillator fault flag
UCSCTL4 = SELA_0 + SELS_4 + SELM_0; // Select ACLK = LFXT1
// SMCLK = DCO
// MCLK = LFXT1
while(1); // Loop in place
}