I'm having trouble getting the 32kHz oscillator to work with the MSP4152. Whenever I include this code snippet, the code gets stuck repeating this loop, so it appears the oscillator fault flag keeps going high:
do
{
IFG1 &= ~OFIFG; // Clear OSCFault flag
for (i = 0x47FF; i > 0; i--); // Time for flag to set
}
while ((IFG1 & OFIFG)); // OSCFault flag still set?
I've tried switching out oscillators and MCUs, but still have the same problem - when I probe XIN, I get 3V, when I probe XOUT, I get 0V. I've also tried the example below (msp430x41x2_LFxtal_nmi.c), I just changed the output port that is toggled. It always enters the NMI, never toggles at 1sec intervals. Any suggestions of what to try next?
#include <msp430x41x2.h>
volatile unsigned int i;
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
FLL_CTL0 |= XCAP10PF; // Configure load caps
IE2 |= BTIE; // Enable BT interrupt
BTCTL = BT_ADLY_1000; // 1s Interrupt
P7DIR |= 0x20; // Set P7.5 to output direction
// An immedate Osc Fault will occur next
IE1 |= OFIE; // Enable Osc Fault
__bis_SR_register(LPM3_bits + GIE); // Enter LPM3 w/ interrupts
}
// Basic Timer interrupt service routine
#pragma vector=BASICTIMER_VECTOR
__interrupt void basic_timer(void)
{
P7OUT ^= 0x20; // Toggle P7.5 using exclusive-OR
}
#pragma vector=NMI_VECTOR
__interrupt void nmi_ (void)
{
do
{
IFG1 &= ~OFIFG; // Clear OSCFault flag
for (i = 0xFFF; i > 0; i--); // Time for flag to set
P7OUT ^= 0x20; // Toggle P7.5 using exclusive-OR
}
while ((IFG1 & OFIFG)); // OSCFault flag still set?
IE1 |= OFIE; // Enable Osc Fault
}