我担心我的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在25 the上运行,延迟2500万次应该会延迟大约1秒,但是,在调试器中启动程序后,LED需要大约25秒才能打开。这让我担心我的微控制器上的MCLK有问题,虽然我觉得这是不太可能的,但我似乎找不到另一个原因,因为据我所知,这件事并没有改变任何事情。因为它需要25秒的LED打开,它几乎似乎是MCLK运行在1兆赫,或由于某种原因,该功能是从SMCLK采购。
我一直以来都很兴奋吗?在使用__delay_cycles()时,MCLK总是以1 1MHz运行吗?而我只是没有注意到,因为我之前使用的“成功”延迟只是几毫秒?我发誓在默认情况下MCLK的频率是25 the,唯一的改变就是通过代码来设置它。所以在我看来:
顺便说一下,我的编译器是Composer 6.1.0.00104,如果这些信息是相关的话。
有没有人有智慧分享什么可能是错误的?
谢谢。
发布于 2015-12-14 08:37:12
“用户指南”第5.2节说:
在PUC之后,UCS模块默认配置是:
…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)。
https://stackoverflow.com/questions/34258254
复制相似问题