TI中文支持网
TI专业的中文技术问题搜集分享网站

msp430f5529倍频

msp430f5529倍频到25M为啥出来的是三角波,不是方波,我用的是官方例程代码,

#include <msp430f5529.h>

void SetVcoreUp (unsigned int level);

void main(void)
{
  volatile unsigned int i;
  WDTCTL = WDTPW+WDTHOLD;                   // Stop WDT
  P1DIR |= BIT1;                            // P1.1 output
  P1DIR |= BIT0;                            // ACLK set out to pins
  P1SEL |= BIT0;                             P2DIR |= BIT2;                            // SMCLK set out to pins
  P2SEL |= BIT2;                             P7DIR |= BIT7;                            // MCLK set out to pins
  P7SEL |= BIT7;          
  // Increase Vcore setting to level3 to support fsystem=25MHz
  // NOTE: Change core voltage one level at a time..
  SetVcoreUp (0x01);
  SetVcoreUp (0x02);   SetVcoreUp (0x03);    UCSCTL3 = SELREF_2;                       // Set DCO FLL reference = REFO
  UCSCTL4 |= SELA_2;                        // Set ACLK = REFO
  __bis_SR_register(SCG0);                  // Disable the FLL control loop
  UCSCTL0 = 0x0000;                         // Set lowest possible DCOx, MODx
  UCSCTL1 = DCORSEL_7;                      // Select DCO range 50MHz operation
  UCSCTL2 = FLLD_1 + 762;                   // Set DCO Multiplier for 25MHz
                                            // (N + 1) * FLLRef = Fdco
                                            // (762 + 1) * 32768 = 25MHz
                                            // Set FLL Div = fDCOCLK/2
  __bic_SR_register(SCG0);                  // Enable the FLL control loop
  // 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 25 MHz / 32,768 Hz ~ 780k MCLK cycles for DCO to settle
  __delay_cycles(782000);
  // Loop until XT1,XT2 & DCO stabilizes – In this case only DCO has to stabilize
  do
  {
    UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);
                                            // Clear XT2,XT1,DCO fault flags
    SFRIFG1 &= ~OFIFG;                      // Clear fault flags
  }while (SFRIFG1&OFIFG);                   // Test oscillator fault flag
  
  while(1)
  {
    P1OUT ^= BIT1;                          // Toggle P1.0
    __delay_cycles(600000);                 // Delay
  }
}
void SetVcoreUp (unsigned int level)
{
  // Open PMM registers for write
  PMMCTL0_H = PMMPW_H;               // Set SVS/SVM high side new level
  SVSMHCTL = SVSHE + SVSHRVL0 * level + SVMHE + SVSMHRRL0 * level;
  // Set SVM low side to new level
  SVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 * level;
  // Wait till SVM is settled
  while ((PMMIFG & SVSMLDLYIFG) == 0);
  // Clear already set flags
  PMMIFG &= ~(SVMLVLRIFG + SVMLIFG);
  // Set VCore to new level
  PMMCTL0_L = PMMCOREV0 * level;
  // Wait till new level reached
  if ((PMMIFG & SVMLIFG))
    while ((PMMIFG & SVMLVLRIFG) == 0);
  // Set SVS/SVM low side to new level
  SVSMLCTL = SVSLE + SVSLRVL0 * level + SVMLE + SVSMLRRL0 * level;
  // Lock PMM registers for write access
  PMMCTL0_H = 0x00;
}

user4973021:

再有半个月要参加电子设计大赛,希望知道的能指点迷津,谢谢

灰小子:

回复 user4973021:

还真没观察过那么高频率的msp430时钟输出。

观察2.5MHz的时候是矩形波。

造成这个现象的可能原因:阻抗匹配,测量这个波形信号时,实际上信号也要对测量电路充放电,也有可能造成这种情况

user4973021:

回复 灰小子:

这种情况下,频率是25M,我在使用定时器去出PWM波,出来的波也不对,出来不了PWM波,我想用25M频率出PWM波,求解程序,

user4973021:

问题已解决,输出波形确实是那样的,与定时器A结合输出方波不对,与定时器B结合输出波形正常,真是也许简单的问题对初学者来说却是很难很难的,谢谢dirtwillfly的帮助

赞(0)
未经允许不得转载:TI中文支持网 » msp430f5529倍频
分享到: 更多 (0)