This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC430F5137初始化完振荡器后,再次配置振荡器OFIFG置位,程序停在NMI中断服务程序中无法执行

Other Parts Discussed in Thread: CC430F5137

您好,在使用CC430F5137时出现标题所描述的问题,下面是振荡器配置函数,以及调用的位置,请帮忙看看如何解决这个问题,谢谢。

配置函数:
void InitSys123(void)
{
SetVCore(PMMCOREV_3);                     // Set VCore = 3 for 20MHz clock
   P5SEL |= BIT0 + BIT1;                     // Port select XT1
UCSCTL6 |= XCAP_3;                        // Internal load cap
// Select SMCLK, ACLK source and DCO source                                            
   UCSCTL4 = SELA__XT1CLK + SELS__DCOCLK + SELM__DCOCLK;
UCSCTL3 = SELREF__XT1CLK;
// Loop until XT1 fault flag is cleared
  do
  {
UCSCTL7 &= ~XT1LFOFFG;                  // Clear XT1 fault flags
  }while (UCSCTL7&XT1LFOFFG);               // Test XT1 fault flag
  // Initialize DCO to 2.45MHz
  __bis_SR_register(SCG0);                  // Disable the FLL control loop
  UCSCTL0 = 0x0000;                         // Set lowest possible DCOx, MODx
  UCSCTL1 = DCORSEL_3;                      // Set RSELx for DCO = 4.9 MHz
  UCSCTL2 = FLLD_0 + 121;                    // Set DCO Multiplier for 2.45MHz
// (N + 1) * FLLRef = Fdco
// (74 + 1) * 32768 = 2.45MHz
// Set FLL Div = fDCOCLK/2
  __bic_SR_register(SCG0);                  // Enable the FLL control loop
  
  // Startup LFXT1 32 kHz crystal
do{
status = LFXT_Start_Timeout(XT1DRIVE_0, 50000);
} while(status == UCS_STATUS_ERROR);
  // Worst-case settling time for the DCO when the DCO range bits have been
  // changed is n x 32 x 32 x f_MCLK / f_FLL_reference. See UCS chapter in 5xx
  // UG for optimization.
  // 32 x 32 x 2.45 MHz / 32,768 Hz = 76563 = MCLK cycles for DCO to settle
  __delay_cycles(76563);
}
调用的方式:
void main(void)
{
   unsigned char RfSendDat[10];
   unsigned char *p;
WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
__disable_interrupt();
initMCU();
InitSys123();
// InitSys();
// InitSysSpeedNormal();
// InitSysSpeedSlow();
   init_Dat();
//   Init_SPI();
// InitAS3933();
// ResetRadioCore();    
// InitRadio(Snd_Nomal_Chanel);
/*  
  __bis_SR_register(SCG0);                  // Disable the FLL control loop
  UCSCTL0 = 0x0000;                         // Set lowest possible DCOx, MODx
  UCSCTL1 = DCORSEL_5;                      // Select DCO range 24MHz operation
  UCSCTL2 = FLLD_1 + 487;                   // Set DCO Multiplier for 12MHz
                                            // (N + 1) * FLLRef = Fdco
                                            // (374 + 1) * 32768 = 12MHz
                                            // Set FLL Div = fDCOCLK/2
  __bic_SR_register(SCG0);                  // Enable the FLL control loop
*/
//  SELECT_MCLK(SELM__XT2CLK);
//  MCLK_DIV(2);
 
//  Init_FLL_Settle(20000,763);
 
// UCSCTL6 |= XT2OFF;
Uart_Init();
  SFRIE1 |= OFIE;                           // Enable global oscillator fault flag
  __bis_SR_register(GIE);                   // Enable global interrupt
  InitSysTimerA1();
//  P2DIR |= BIT4;
//  P2OUT |= BIT4;
  P2DIR &= ~BIT4;
   
  InitSys123();
当程序执行到第二个 InitSys123();时,就出问题了!