【问题标题】:LED does not blink after loading the code Blackfin Processor F527 [closed]加载代码 Blackfin 处理器 F527 后 LED 不闪烁 [关闭]
【发布时间】: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 的回答。

标签: c embedded led blackfin


【解决方案1】:

你至少需要:

void Delay(volatile int n)
{
    while(n--);
}

否则任何体面的编译器都会看到 n 被修改但从未读取,并优化整个循环。

然而,更好的解决方案是使用硬件计时器来实现恒定延迟,而不管代码生成效率或处理器时钟频率如何。

【讨论】:

  • 另外一个提到了一种更好的延迟方法:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-12
  • 1970-01-01
  • 1970-01-01
  • 2015-12-04
  • 1970-01-01
相关资源
最近更新 更多