找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2251|回复: 1
收起左侧

msp430F5529超频到40Mhz以上(官方给的25Mhz)

[复制链接]
ID:884304 发表于 2021-9-4 12:01 | 显示全部楼层 |阅读模式
CCS10环境下的工程文件,使用4Mhz的XT2晶振分频后,作为FLL参考频率

单片机源程序如下:
  1. //#include <msp430.h>
  2. #include "msp430F5529.h"
  3. /*
  4. * Jeason 2019.05.09 于 青岛大学
  5. */
  6. void clock_init(unsigned char Fre);
  7. // 主频初始化函数 可以设置指定的频率
  8. // 理论参数是 1~ 40+ 的整数 建议不要超过45  (具体性能还要考虑自身芯片体质!!!)
  9. //实际使用中建议参数大于5  当参数小于5以后会导致频率卡在3.5MHz,原因未知
  10. void main(void)
  11. {
  12.     int i;
  13.     WDTCTL = WDTPW | WDTHOLD;       // stop watchdog timer
  14.     clock_init(45);
  15.     P2DIR |= BIT2;  // 配置P2.2为输出模式
  16.     P2SEL |= BIT2;  // 功能复用:SMCLK输出 (子系统主时钟)
  17.     P7DIR |= BIT7;  // 配置P7.7为输出模式
  18.     P7SEL |= BIT7;  // 功能复用:MCLK输出    (主系统时钟)
  19.     P1DIR |= BIT0;  // 配置P1.0为输出模式
  20.     while(1)
  21.     {
  22.     }
  23. }

  24. void clock_init(unsigned char Fre)
  25. {

  26.     P5SEL |= BIT2|BIT3|BIT4|BIT5;//开启外部两个时钟

  27.     UCSCTL6 |= XCAP_3|XT1OFF;          // XT1 相关 配置
  28.     UCSCTL6 |= XT2DRIVE_0 |XT2OFF;     // XT2 相关 配置
  29. //以下是提升核心电压部分的代码
  30.     PMMCTL0_H = 0xA5;                                         //开PMM电源管理
  31.     SVSMLCTL |= SVSMLRRL_1 + SVMLE;                            //配置SVML电压
  32.     PMMCTL0 =  PMMPW + PMMCOREV_3;                             //配置内核电压
  33.     while((PMMIFG & SVSMLDLYIFG ) == 0);                       //等待设置完成
  34.     PMMIFG &= ~(SVMLVLRIFG + SVMLIFG + SVSMLDLYIFG);
  35.     if((PMMIFG & SVMLIFG) == 1)                                //判断内核电压是否上升到VSVML
  36.          while((PMMIFG & SVMLVLRIFG) == 0);                    //如果没有等待
  37.     SVSMLCTL &= ~SVMLE;                                        //关掉SVML模块
  38.     PMMCTL0_H = 0X00;

  39.     __bis_SR_register(SCG0);                 //该语法为固定格式,意为将括号内的变量置位,SCG0与系统工作模式有关,此时 MCLK 暂停工作
  40.     UCSCTL0 = 0;                             //先清零,FLL 运行时,该寄存器系统会自动配置,不用管
  41.     UCSCTL6 = (UCSCTL6&(~(XT2OFF|XT1OFF))|XCAP_3|XT2DRIVE_0);
  42.     UCSCTL3 = (5<<4)|(2<<0);                 // 选择 XTAL2 的时钟信号作为参考信号 并且分频到1MHz
  43.     if(Fre < 5)
  44.         UCSCTL1 = DCORSEL_2;
  45.     else if(Fre<15)
  46.         UCSCTL1 = DCORSEL_4;
  47.     else
  48.         UCSCTL1 = DCORSEL_7;
  49.    UCSCTL2 = (Fre-1);
  50.     __bic_SR_register(SCG0);
  51.     __delay_cycles(782000);
  52.     while (SFRIFG1 & OFIFG) {                               // Check OFIFG fault flag
  53.       UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);           // Clear OSC flaut Flags
  54.       SFRIFG1 &= ~OFIFG;                                    // Clear OFIFG fault flag
  55.     }
  56.     UCSCTL4 = UCSCTL4&(~(SELS_7|SELM_7))|SELS_3|SELM_3;
  57. }
复制代码
51hei.png
以上代码51hei附件下载:
bilink.7z (34.61 KB, 下载次数: 5)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:767423 发表于 2021-9-17 15:34 | 显示全部楼层
厉害了,原来单片机也可以这样干的。以前接外部晶振的单片机都不敢超一点点。玩玩应该可以,做产品可不敢超频用。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表