打印
[MCU]

MSP430时钟倍频设置 亲测 MSP430F5529有效

[复制链接]
805|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
laocuo1142|  楼主 | 2020-11-6 11:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void initClock()
{
     UCSCTL6 &= ~XT1OFF; //启动XT1
     P5SEL |= BIT2 + BIT3; //XT2引脚功能选择
     UCSCTL6 &= ~XT2OFF;          //打开XT2
//      PMMCTL0 |=PMMPW+ PMMCOREV_3;
      PMMCTL0_H = 0xA5;                                         //开PMM电源管理
      SVSMLCTL |= SVSMLRRL_1 + SVMLE;                            //配置SVML电压
      PMMCTL0 =  PMMPW + PMMCOREV_2;                             //配置内核电压
      while((PMMIFG & SVSMLDLYIFG ) == 0);                       //等待设置完成
      PMMIFG &= ~(SVMLVLRIFG + SVMLIFG + SVSMLDLYIFG);
      if((PMMIFG & SVMLIFG) == 1)                                //判断内核电压是否上升到VSVML
            while((PMMIFG & SVMLVLRIFG) == 0);                   //如果没有等待
      SVSMLCTL &= ~SVMLE;                                        //关掉SVML模块
      PMMCTL0_H = 0X00;                                          //锁存配置
     __bis_SR_register(SCG0);
     UCSCTL0 = DCO0+DCO1+DCO2+DCO3+DCO4; //选择DCO频率区域
     UCSCTL1 = DCORSEL_5;       //DCO频率范围在28.2MHZ以下
     UCSCTL2 = FLLD_4 + 2;       //D=16,N=1    16*2*(4/8)=16
     UCSCTL3 = SELREF_5 + FLLREFDIV_3;    //n=8,FLLREFCLK时钟源为XT2CLK;DCOCLK=D*(N+1)*(FLLREFCLK/n);DCOCLKDIV=(N+1)*(FLLREFCLK/n);
     UCSCTL4 = SELA_4 + SELS_3 +SELM_3;    //ACLK的时钟源为DCOCLKDIV,MCLK\SMCLK的时钟源为DCOCLK
     UCSCTL5 = DIVA_5 +DIVS_1;      //ACLK由DCOCLKDIV的32分频得到,SMCLK由DCOCLK的2分频得到
                 //最终MCLK:24MHZ,SMCLK:12MHZ,ACLK:48KHZ
     __bic_SR_register(SCG0);                   //Enable the FLL control loop
}

void initClock()
{
     UCSCTL6 &= ~XT1OFF; //启动XT1
     P5SEL |= BIT2 + BIT3; //XT2引脚功能选择
     UCSCTL6 &= ~XT2OFF;          //打开XT2
//      PMMCTL0 |=PMMPW+ PMMCOREV_3;
     PMMCTL0_H = 0xA5;                                         //开PMM电源管理
      SVSMLCTL |= SVSMLRRL_1 + SVMLE;                            //配置SVML电压
      PMMCTL0 =  PMMPW + PMMCOREV_2;                             //配置内核电压
      while((PMMIFG & SVSMLDLYIFG ) == 0);                       //等待设置完成
      PMMIFG &= ~(SVMLVLRIFG + SVMLIFG + SVSMLDLYIFG);
      if((PMMIFG & SVMLIFG) == 1)                                //判断内核电压是否上升到VSVML
            while((PMMIFG & SVMLVLRIFG) == 0);                   //如果没有等待
      SVSMLCTL &= ~SVMLE;                                        //关掉SVML模块
      PMMCTL0_H = 0X00;                                          //锁存配置
     __bis_SR_register(SCG0);
     UCSCTL0 = DCO0+DCO1+DCO2+DCO3+DCO4; //选择DCO频率区域
     UCSCTL1 = DCORSEL_4;       //DCO频率范围在28.2MHZ以下
     UCSCTL2 = FLLD_4 +1;       //D=16,N=1    16*2*(4/8)=16
     UCSCTL3 = SELREF_5 + FLLREFDIV_3;    //n=8,FLLREFCLK时钟源为XT2CLK;DCOCLK=D*(N+1)*(FLLREFCLK/n);DCOCLKDIV=(N+1)*(FLLREFCLK/n);
     UCSCTL4 = SELA_4 + SELS_3 +SELM_3;    //ACLK的时钟源为DCOCLKDIV,MCLK\SMCLK的时钟源为DCOCLK
     UCSCTL5 = DIVA_5 +DIVS_1;      //ACLK由DCOCLKDIV的32分频得到,SMCLK由DCOCLK的2分频得到
                 //最终MCLK:16MHZ,SMCLK:8MHZ,ACLK:32KHZ
     __bic_SR_register(SCG0);                   //Enable the FLL control loop
}
void initClock()
{
     UCSCTL6 &= ~XT1OFF; //启动XT1
     P5SEL |= BIT2 + BIT3; //XT2引脚功能选择
     UCSCTL6 &= ~XT2OFF;          //打开XT2
     PMMCTL0_H = 0xA5;                                         //开PMM电源管理
      SVSMLCTL |= SVSMLRRL_1 + SVMLE;                            //配置SVML电压
      PMMCTL0 =  PMMPW + PMMCOREV_2;                             //配置内核电压
      while((PMMIFG & SVSMLDLYIFG ) == 0);                       //等待设置完成
      PMMIFG &= ~(SVMLVLRIFG + SVMLIFG + SVSMLDLYIFG);
      if((PMMIFG & SVMLIFG) == 1)                                //判断内核电压是否上升到VSVML
            while((PMMIFG & SVMLVLRIFG) == 0);                   //如果没有等待
      SVSMLCTL &= ~SVMLE;                                        //关掉SVML模块
      PMMCTL0_H = 0X00;                                          //锁存配置
     __bis_SR_register(SCG0);
     UCSCTL0 = DCO0+DCO1+DCO2+DCO3+DCO4;
     UCSCTL1 = DCORSEL_4;       //DCO频率范围在28.2MHZ以下
     UCSCTL2 = FLLD_4 + 1;       //D=16,N=1
     UCSCTL3 = SELREF_5 + FLLREFDIV_3;    //n=8,FLLREFCLK时钟源为XT2CLK;DCOCLK=D*(N+1)*(FLLREFCLK/n);DCOCLKDIV=(N+1)*(FLLREFCLK/n);
     UCSCTL4 = SELA_4 + SELS_3 +SELM_3;    //ACLK的时钟源为DCOCLKDIV,MCLK\SMCLK的时钟源为DCOCLK
     UCSCTL5 = DIVA_5 +DIVS_4;      //ACLK由DCOCLKDIV的32分频得到,SMCLK由DCOCLK的2分频得到
                 //最终MCLK:16MHZ,SMCLK:1MHZ,ACLK:32KHZ
     __bic_SR_register(SCG0);                   //Enable the FLL control loop
}

使用特权

评论回复

相关帖子

沙发
wakayi| | 2020-12-2 16:07 | 只看该作者
代码非常不错啊 感谢楼主的分享哈

使用特权

评论回复
板凳
wowu| | 2020-12-2 16:09 | 只看该作者
这个倍频的倍数是多少啊

使用特权

评论回复
地板
xiaoqizi| | 2020-12-2 16:10 | 只看该作者
这样看有些乱  复制到keil上就好了

使用特权

评论回复
5
木木guainv| | 2020-12-2 16:20 | 只看该作者
倍频的额范围是多少啊

使用特权

评论回复
6
aoyi| | 2020-12-2 16:21 | 只看该作者
可以随时更改这个倍数吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1191

主题

5220

帖子

12

粉丝