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.

F5529的SPI选择XT2不工作的问题

您好

我的5529之前调试SPI的时候,选择上电默认的时钟情况,即SMCLK选择DCO   1.048M的时钟的时候

SPI的收发正常  但是现在觉得数据速率不太够用 于是想用外部高频晶振24M的XT2   但是调试了几天都不能正常工作 

请问是什么原因

现在附上代码,代码大部分是例程里的

//------------------时钟配置---------------------------------------
  P2DIR |= BIT2;                            // SMCLK set out to pins
  P2SEL |= BIT2;                            
  P7DIR |= BIT7;                            // MCLK set out to pins
  P7SEL |= BIT7;
  
  P5SEL |= BIT2+BIT3;                       // Port select XT2

  UCSCTL6 &= ~XT2OFF;                       // Enable XT2 
  UCSCTL3 |= SELREF_2;                      // FLLref = REFO
                                            // Since LFXT1 is not used,
                                            // sourcing FLL with LFXT1 can cause
                                            // XT1OFFG flag to set
  UCSCTL4 |= SELA_2;                        // ACLK=REFO,SMCLK=DCO,MCLK=DCO

  // Loop until XT1,XT2 & DCO stabilizes - in this case loop until XT2 settles
  do
  {
    UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);
                                            // Clear XT2,XT1,DCO fault flags
    SFRIFG1 &= ~OFIFG;                      // Clear fault flags
  }while (SFRIFG1&OFIFG);                   // Test oscillator fault flag

  UCSCTL6 &= ~XT2DRIVE0;                    // Decrease XT2 Drive according to
                                            // expected frequency
  UCSCTL4 |= SELS_5 + SELM_5;               // SMCLK=MCLK=XT2
  
  UCSCTL5 |= DIVS__16;       //分频这里我经常调

一般情况下  这段代码是都能正常工作的 在P2.2那里能看到时钟信号 (24M的时钟信号看起来像是正弦的样子)

//---------------------UCB1 SPI setup-------------------------  
    P4SEL |= BIT1+BIT2+BIT3;                       // P4.1-3 option select 3-PIN SPI
    P4DIR |= BIT1;                                 // SIMO output
    P4DIR &= ~BIT2;                                // SOMI input
    P4DIR |= BIT3;                                 // CLK output
    
    //P4OUT |= BIT0;                                 //P4.0输出高电平 /CS disabled
    //P4DIR |= BIT0;                                 //P4.0 for CS
    
    UCB1CTL1 |= UCSWRST;                      // **Put state machine in reset**
    UCB1CTL0 |= UCSYNC+UCMST+UCMSB+UCCKPL;                 //  SPI master  
    UCB1CTL0 &= ~UC7BIT;                      //  8-bit
    UCB1CTL0 &= ~UCCKPH;

    UCB1CTL1 |= UCSSEL_2;                     // SMCLK
    UCB1BR0 = 0;                              // 我有时候会在这里分频
    UCB1BR1 = 0;                              //
    
    UCB1CTL1 &= ~UCSWRST;
    UCB1IE  = 0;
    
//---------------发送数据-------------------------------------------------    

    //for(i=50;i>0;i--);                       // Wait for slave to initialize
    while(1)
    {
      for(i = 0;i < 255 ; i++)
        {
        MST_Data = i;                          // Initialize data values
    
        while (!(UCB1IFG&UCTXIFG));               // USCI_A0 TX buffer ready?
        UCB1TXBUF = MST_Data;                     // Transmit first character
        
        }
  //__bis_SR_register(LPM0_bits + GIE);       // CPU off, enable interrupts

    }

这段是SPI的设置和数据传输的设置 这两天调试的时候要是直接go的话 就老跑飞……一步一步调试 有时候就没问题 在寄存器那里和示波器上都能一部分看到

发送的SCLK和发送的数据,但是也经常会跑跑就飞了……

请问有没有大大遇到过我这种情况?是晶振不稳定么?我的程序有时候用UCSCTL5分频  有时候用UCB1BR分频,但总会有些问题。

我的XT2是焊了2个15pF的电容,是UCS里设置哪儿不太对么? 因为调SPI时候原来选DCO的时候十分稳定,不会跑飞