【发布时间】:2018-02-11 17:27:15
【问题描述】:
成功构建项目后(在 VisualDSP 中),可执行代码已成功加载到 blackfin 处理器 BF527,但 LED 不闪烁。我正在使用 JTAG 与 PC 通信板(包含 BF527 处理器)。给电路板加电后,每个 LED 的颜色都是半红半绿。我是不是搞错了?
/* VisualDSP++ 5.1.2 Code to Blink LED on ADSP-BF527*/
#include <ccblkfn.h>
#include <cdefBF527.h>
#include <defBF527.h>
#include <stdio.h>
void Init_PLL(unsigned int msel, unsigned int ssel);
void Init_Leds(void);
void Delay(int);
int main( void )
{
Init_PLL(16,5);
Init_Leds();
while(1)
{
Delay(20000000);
*pPORTFIO_SET |= PF8; /*Enable the pin*/
Delay(20000000);
*pPORTGIO_SET |= PG11;
Delay(20000000);
*pPORTGIO_SET |= PG12;
Delay(20000000);
*pPORTFIO_CLEAR |= (PF8);
*pPORTGIO_CLEAR |= (PG11 | PG12);
}
}
void Init_Leds()
{
*pPORTF_FER &= ~(PF8);
*pPORTG_FER &= ~(PG11 | PG12);
*pPORTFIO_DIR |= (PF8);
*pPORTGIO_DIR |= (PG11 | PG12);
*pPORTFIO_CLEAR |= (PF8);
*pPORTGIO_CLEAR |= (PG11 | PG12);
}
void Delay(int n)
{
while(n--);
}
【问题讨论】:
-
可能,因为你的大部分代码都被注释掉了:(
-
'我正在使用 JTAG' 很好,大概你有一个调试器来配合它?
-
不确定你的延迟循环是否得到优化。您的调试器会告诉您。
-
@MartinJames 抱歉,现在,我已经更正了代码。请你再看看。
-
关键是如果你使用调试器单步执行你的代码,问题就会变得很明显。 LED 正在闪烁。但是您的
Delay循环没有按您的预期工作,并且它们闪烁得如此之快,以至于 LED 在您的眼中看起来是半红半绿。如果您使用调试器单步执行,那么执行速度会很慢,以至于您可以用眼睛观察闪烁并将您的怀疑指向Delay函数。请参阅 Clifford 关于修复Delay的回答。