Other Parts Discussed in Thread: MSP430F2272, MSP430FR5969
I am working with a new board with a msp430fr58891. I keep getting a oscillator fault. I would like to have someone double check my code before I ask the PCB designer to move the crystal closer to the chip. The LFX pins are floating and we have asked they be terminated in the next version. Section 4.6 gives advise on unused pins but give no advise on unused LFX pins, should that be tied to Vss?
So is there anything I am doing wrong in my code that would cause a OSC Fault in SFRIFG1_bit.OFIFG?
I have made multiple changes trying to correct but nothing helps.
I switched to the MCLK and SMCLK to the internal DCO running at 4 and 16MHz but that did not help.
I increased the HFDRIVE but again nothing.
I have a LaunchPad Demo board with 5969 but I have the same problem with the DCO (the LaunchPad does not have a crystal installed for HFX (XT2)).
static void Start_XT1( void ) {
uint16_t i;
uint16_t status;
CSCTL0 = 0xA500; //PWD GAA
// CSCTL1 = 0x0006; //DC0 Range Sel: 4MHz GAA
CSCTL1 = 0x0048; //DC0 Range Sel: 16MHz GAA
CSCTL2 = 0x0055; //ACLK=LFXT(or VLOCLK), SMCLK=HFXT(or DCOCLK), MCLK=HFXT(or DCOCLK) GAA
// CSCTL2 = 0x0033; //ACLK=LFXT(or VLOCLK), SMCLK=DCOCLK, MCLK=DCOCLK GAA
// CSCTL3 = 0x0000; //ACLKDIV=1, SMCLKDIV=1, MCLKDIV=1 GAA
CSCTL3 = 0x0011; //ACLKDIV=1, SMCLKDIV=2, MCLKDIV=2 GAA
// CSCTL4 = 0x0000; //HFXT,LFXT: HFXTDRIVE= 00, HFFREQ= 00 0-4MHz 5969 GAA
// CSCTL4 = 0x0800; //HFXT,LFXT: HFXTDRIVE= 00, HFFREQ= 01 8-16MHz GAA
// CSCTL4 = 0x4800; //HFXT,LFXT: HFXTDRIVE= 01, HFFREQ= 01 8-16MHz GAA
// CSCTL4 = 0x8800; //HFXT,LFXT: HFXTDRIVE= 10, HFFREQ= 01 8-16MHz GAA
CSCTL4 = 0xC800; //HFXT,LFXT: HFXTDRIVE= 11, HFFREQ= 01 8-16MHz GAA
CSCTL5 = 0x0080; //LFXT&HFXT FaultCntrEnable: HFXT Fault Flags Enabled
// CSCTL6 = 0x0000; //MODCLK,SMCLK,MCLK,ACLK request enable: all disabled
CSCTL6 = 0x000F; //MODCLK,SMCLK,MCLK,ACLK request enable: all enabled
PJSEL1_bit.PJSEL1_6 =0; // msp430fr58891 64-pin: HFXOUT PJ.7 pin54 HFXIN PJ.6 pin55
PJSEL0_bit.PJSEL0_6 =1;
/do {
SFRIFG1_bit.OFIFG = 0; // Clear the OSC Fault Flag IFG1_bit.OFIFG = 0;
for(i = 0; i < 1000; ++i) { dummy++;};
} while( SFRIFG1_bit.OFIFG ); // Don't continue if still set IFG1_bit.OFIFG
status =1;
}