MSP430:__ delay_cycles()很慢/ MCLK可能很慢

时间:2015-12-14 00:48:56

标签: c microcontroller msp430 texas-instruments code-composer

我担心MSP430F5529启动板可能出现问题,因为我无法让__delay_cycles正常运行。它总是用来工作正常,但现在突然似乎有问题。我只是使用一个计时器模块来引起延迟,但是当前的程序已经使用了所有这些,我宁愿让它们专门用于他们的任务。我只需要在初始化期间有几个延迟,所以“尝试不使用__delay_cycles”的典型警告因为它停止了程序并不是真正的问题。

所以问题是使用__delay_cycles()的时间比它应该的要长,尽管事实上我最近在另一个没有问题的程序中使用它。我尝试在默认设置的不同项目上使用相同的代码,并确保我的代码没有做一些奇怪的事情我做了一个快速的程序,只需在一秒钟的延迟后打开一个LED:

void main(void){

WDTCTL = WDTPW | WDTHOLD;     // Stop watchdog timer

P1OUT &= ~(BIT0);
P1DIR |= BIT0;
P1REN |= BIT0;

__delay_cycles(25000000);

P1OUT |= BIT0;
}

由于MCLK在25MHz下运行,延迟2500万次循环应该会产生大约1秒的延迟,相反,在调试器中启动程序后,LED需要大约25秒才能打开。这让我担心MCLK在我的微控制器上有问题,虽然我觉得这不太可能,但在我知道之后,我似乎无法找到另一个原因,据我所知,没有改变任何东西。由于LED开启需要25秒,因此MCLK似乎在1MHz运行,或者出于某种原因,该功能来自SMCLK。

我一直都很高,MCLK在使用__delay_cycles()时始终以1MHz运行吗?我只是没注意到,因为之前“成功”使用的延迟只有几毫秒?我发誓默认情况下MCLK的频率是25MHz,唯一的变化方法是通过代码设置它。所以在我看来要么:

  • A)默认情况下,MSP430不以25MHz运行,也没有 编纂已经明显
  • B)__ delay_cycles()在执行期间更改MCLCK的速度 我从未注意到,因为我需要的延误是如此之快
  • C)我在编译器中意外更改了一些设置,或者 某些原因编译器优化器搞砸了 编译__delay_cycles()
  • D)我的MCLK坏了/半破坏

顺便提一下,我的编译器是Code Composer Studio 6.1.0.00104,如果该信息是相关的。

有没有人有智慧分享可能出错的地方?

感谢。

1 个答案:

答案 0 :(得分:3)

用户指南在第5.2节中说:

  

在PUC之后,UCS模块的默认配置为:

     
      
  • 选择LF模式下的XT1作为XT1CLK的振荡器源。
  •   
  • 为MCLK选择了DCOCLKDIV。
  •   
  • 启用FLL操作并选择XT1CLK作为FLL参考时钟FLLREFCLK。
  •   
     

[...] XT1将保持禁用状态,直到与晶体引脚相关的PSEL位置1。

以及第5.2.12节:

  

当在LF模式下使用XT1操作作为FLL的参考源(SELREF = {0})时,晶振故障会自动导致FLL参考源FLLREFCLK由REFO提供。

默认FLL配置(FLLN = 0x1F,FLLD = 1)导致DCO频率为64×32768 Hz = 2.097152 MHz,MCLK频率为1.048576 MHz(如果REFO精确到足以证明此精度)

要以25 MHz运行CPU,必须重新编程FLL(并增加PMMCOREV)。