首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MSP430:__delay_cycles()是缓慢的/MCLK可能是缓慢的

MSP430:__delay_cycles()是缓慢的/MCLK可能是缓慢的
EN

Stack Overflow用户
提问于 2015-12-14 00:48:55
回答 1查看 4K关注 0票数 3

我担心我的MSP430F5529启动板可能有问题,因为我不能让__delay_cycles正常运行。它过去总是工作得很好,但现在似乎突然间出现了问题。我只想使用一个计时器模块来造成延迟,但是当前的程序已经在使用它们了,我更愿意让它们专注于它们的任务。我只需要在初始化过程中延迟几次,所以典型的警告“尽量不要使用__delay_cycles”,因为它会使程序停止,在这里并不是真正的问题。

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

代码语言:javascript
运行
复制
void main(void){

WDTCTL = WDTPW | WDTHOLD;     // Stop watchdog timer

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

__delay_cycles(25000000);

P1OUT |= BIT0;
}

由于MCLK在25 the上运行,延迟2500万次应该会延迟大约1秒,但是,在调试器中启动程序后,LED需要大约25秒才能打开。这让我担心我的微控制器上的MCLK有问题,虽然我觉得这是不太可能的,但我似乎找不到另一个原因,因为据我所知,这件事并没有改变任何事情。因为它需要25秒的LED打开,它几乎似乎是MCLK运行在1兆赫,或由于某种原因,该功能是从SMCLK采购。

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

  • ( A)默认情况下,MSP430不会以25 The的频率运行,而且我所做的任何编码都没有使这一点变得明显。
  • ( B) __delay_cycles()在执行过程中改变了MCLCK的速度,我从来没有注意到,因为我需要的延迟太快了
  • ( C)我意外地更改了编译器中的某些设置,或者由于某种原因,编译器优化器正在破坏__delay_cycles()的编译。
  • ( D)我的MCLK坏了/坏了一半

顺便说一下,我的编译器是Composer 6.1.0.00104,如果这些信息是相关的话。

有没有人有智慧分享什么可能是错误的?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-14 08:37:12

“用户指南”第5.2节说:

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

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

…XT1将保持禁用状态,直到设置与晶体引脚相关的PSEL位。

在第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)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34258254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档