打印

MSP430内部晶振的设置

[复制链接]
3956|27
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ddfha1|  楼主 | 2018-4-24 12:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
gx_huang| | 2018-4-24 13:21 | 只看该作者
没用过MSP430,帮顶。
不喜欢有人把内部RC振荡器写成“晶振”,命名不是一个概念的东西。

使用特权

评论回复
板凳
hxfxt| | 2018-4-24 16:25 | 只看该作者
是内部RC振荡器,参考官网例程。。。

使用特权

评论回复
地板
dirtwillfly| | 2018-4-24 16:34 | 只看该作者
msp430内部有dco,一般都是用这个

使用特权

评论回复
5
ddfha1|  楼主 | 2018-4-24 17:26 | 只看该作者
具体怎样做呢,我没有例程

使用特权

评论回复
6
Rospiers| | 2018-4-25 09:40 | 只看该作者
内部dco是不是得配置一下才能打开的

使用特权

评论回复
7
comeon201208| | 2018-4-25 21:35 | 只看该作者
430的内部晶振还是挺准的

使用特权

评论回复
8
Snow7| | 2018-4-29 10:22 | 只看该作者
内部时钟是RC振荡器产什么的

使用特权

评论回复
9
10299823| | 2018-5-6 16:08 | 只看该作者
(1)XT1处于LF模式作为XT1CLK时钟源。ACLK选通为XT1CLK。
(2)MCLK选通为DCOCLKDIV
(3)SMCLK选通为DCOCLKDIV
(4)FLL使能,且将XT1CLK作为FLL参考时钟。
(5)XIN和XOUT脚设置为通用IO,XIN和XOUT配置为XT1功能前,XT1保持禁用。
(6)如果可用的话,XT2IN和XT2OUT被设置为通用IO且保持禁止状态。

使用特权

评论回复
10
jimmhu| | 2018-5-6 16:09 | 只看该作者
DCO模块运行需要参考时钟REFCLK,REFCLK可以来自REFOCLK、XT1CLK和XT2CLK,通过UCSCTL3的SELREF选择,默认使用的XT1CLK,但如果XT1CLK不可用则使用REFOCLK。

使用特权

评论回复
11
lihuami| | 2018-5-6 16:09 | 只看该作者
理解TI官方例子中的代码了,官方代码中的相关部分如下:
if (fsystem <= 630)            //           fsystem < 0.63MHz  
  UCSCTL1 = DCORSEL_0;  
else if (fsystem <  1250)      // 0.63MHz < fsystem < 1.25MHz  
  UCSCTL1 = DCORSEL_1;  
else if (fsystem <  2500)      // 1.25MHz < fsystem <  2.5MHz  
  UCSCTL1 = DCORSEL_2;  
else if (fsystem <  5000)      // 2.5MHz  < fsystem <    5MHz  
  UCSCTL1 = DCORSEL_3;  
else if (fsystem <  10000)     // 5MHz    < fsystem <   10MHz  
  UCSCTL1 = DCORSEL_4;  
else if (fsystem <  20000)     // 10MHz   < fsystem <   20MHz  
  UCSCTL1 = DCORSEL_5;  
else if (fsystem <  40000)     // 20MHz   < fsystem <   40MHz  
  UCSCTL1 = DCORSEL_6;  
else  
  UCSCTL1 = DCORSEL_7;  

使用特权

评论回复
12
xiaoyaozt| | 2018-5-6 16:10 | 只看该作者
DCOCLK倍频到25M吗?

使用特权

评论回复
13
uptown| | 2018-5-6 16:10 | 只看该作者
用软件编写内部DCO振荡器 分频可以  例如BCSCTL2 |= SELM_3;  //主时钟8分频

使用特权

评论回复
14
cehuafan| | 2018-5-6 16:11 | 只看该作者
WDTCTL = WDTPW + WDTHOLD;        // 关闭看门狗定时器
        BCSCTL1 |= XT2OFF;        //XT2关闭    ACLK=32768hz DCO为默认值约800k
        BCSCTL3 |= LFXT1S_2;        // LFXT1 = VLO =12khz(大约)
//        BCSCTL3 |= LFXT1S_0;        // LFXT1 = 32.768khz (大约)
        IE1 &= ~OFIE;                        //清除时钟错误中断
        IFG1 &= ~OFIFG;                // Clear OSCFault flag
        BCSCTL2 |= SELM_3+SELS;// mclk时钟源为LFXT1CLK,smclk=LFXT1CLK=32768hz
//        BCSCTL2 |= SELM_0+SELS;        // mclk时钟源为DCOCLK,smclk=LFXT1CLK=32768hz
        __delay_cycles(1000);        //小延时等待振荡稳定

使用特权

评论回复
15
usysm| | 2018-5-6 16:12 | 只看该作者
DCOCTL:控制DCO振荡器

使用特权

评论回复
16
typeof| | 2018-5-6 16:12 | 只看该作者
DCO的设置:通过设置DCOCTL和BCSCTL1,设置DCO的频率

使用特权

评论回复
17
yujielun| | 2018-5-6 16:12 | 只看该作者
//DCOCTL初始值为60H,即DCOCTL |= DCO1 + DCO2;
  DCOCTL |= DCO0 + DCO1 + DCO2;              // Max DCO

使用特权

评论回复
18
pl202| | 2018-5-6 16:13 | 只看该作者
默认情况下由DCOCLK作MCLK与SMCLK的时钟信号,由于DCOCTL初始值为60H

使用特权

评论回复
19
uptown| | 2018-5-6 16:13 | 只看该作者
MSP430的时钟设置包括3个寄存器,DCOCTL、BCSCTL1、BCSCTL2、BCSCTL3
DCOCTL,DCO控制寄存器,地址为56H,初始值为60H
DCO2        DCO1        DCO0        MOD4        MOD3        MOD2        MOD1        MOD0
DCO0~DCO2: DCO Select Bit,定义了8种频率之一,而频率由注入直流发生器的电流定义。
MOD0~MOD4: Modulation Bit,频率的微调。
一般不需要DCO的场合保持默认初始值就行了。

使用特权

评论回复
20
xiaoyaozt| | 2018-5-6 16:13 | 只看该作者


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;
}

void main(void) {
  WDTCTL = WDTPW+WDTHOLD;
  P1SEL &= ~BIT1;
  P1DIR |= BIT1;
  
  P1SEL |= BIT0; //ACLK
  P1DIR |= BIT0;
  P2SEL |= BIT2; //SMCLK
  P2DIR |= BIT2;
  P7SEL |= BIT7; //MCLK
  P7DIR |= BIT7;

  P5SEL |= BIT4|BIT5;
  UCSCTL6 |= XCAP_3;
  UCSCTL6 &= ~XT1OFF;

  SetVcoreUp(1); //一次提高Vcore电压等级,具体请参考手册
  SetVcoreUp(2);
  SetVcoreUp(3);

  __bis_SR_register(SCG0);
  UCSCTL0 = 0;
  UCSCTL1 = DCORSEL_6;
  UCSCTL2 = FLLD_1 | 380;
  __bic_SR_register(SCG0);
  __delay_cycles(782000);

  /*
   * 默认状态下:ACLK=FLLREFCLK=XT1 SMCLK=MCLK=DCOCLKDIV XT2关闭
   * 为了不产生XT1LFOFFG,将ACLK和FLLREFCLK设置为REFOCLK
   * 并打开XT2OFF,否则XT2将处于无法使用状态
   * */
  //UCSCTL6 &= ~(XT2DRIVE0|XT2DRIVE1|XT2OFF);

  while (SFRIFG1 & OFIFG) {                               // Check OFIFG fault flag
    UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);         // Clear OSC flaut Flags
    SFRIFG1 &= ~OFIFG;                                  // Clear OFIFG fault flag
  }

  UCSCTL4 = UCSCTL4&(~(SELS_7|SELM_7))|SELS_3|SELM_3;

  while(1){
    P1OUT ^= BIT1;
    delay();
  }
}

使用特权

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

本版积分规则

14

主题

18

帖子

0

粉丝