无法使用Atmel寄存器编译Arduino代码

时间:2019-03-27 16:50:40

标签: c++ visual-studio-code arduino arduino-uno

我正在使用已安装Arudino扩展程序的VSCode编辑器。基本上,我有一个简单的程序,在这里我调用一个函数,该函数将设置一个5毫秒的计时器然后运行。但是,在编辑器中,我得到了错误:

“错误:未在此范围内声明'OCR3A'”

关于如何解决它的任何想法?

我应该注意,智能感知可以看到寄存器的定义。我也在使用Arduino Uno R3开发板。另外,这是代码:

void isr_int1(void) {
    if(TCCR3B == 0)// Debug code if the timer is not running
    {
        startTimerValue = millis();

        TCNT3 = 0;
        OCR3A = 5000;
        sei();

        bitSet(TCCR3B, WGM32);
        bitSet(TCCR3B, CS31);
        bitSet(TIMSK3, OCIE3A);

        detachInterrupt(1);
    }
}

ISR(TIMER3_COMPA_vect)
{
    TCCR3A = 0;
    TCCR3B = 0
    TCNT3 = 0;
    OCR3A = 0;

    lcd.setCursor(0,0);
    lcd.print(millis() - startTimerValue);

    attachInterrupt(1, isr_int1, FALLING);
}

void loop()
{
    isr_int1();
}

1 个答案:

答案 0 :(得分:0)

主要问题是Arduino UNO没有使用Timer/Counter 3的{​​{1}}。 ATMega328A可在Adruino Micro / Leonardo(基于T/C 3)和Arduino MEGA 2560(ATMega32U4)上使用。

不同的MCU也可能具有不同的寄存器名称。这就是Arduino Core充满ATMega2560

的原因

另外,由于目标MCU错误,您可能会遇到这些错误。

至少它通常与MCU数据表中使用的寄存器名称完全对应。这也是您尝试自行配置某些内容时应该学习的第一个地方。