恐怕我的 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。
有没有人有智慧分享什么可能是错的?
谢谢。