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

Can not compile Arduino code with Atmel registers

本文关键字:编译 Arduino 代码 寄存器 Atmel      更新时间:2023-10-16

我正在使用安装了Averudino扩展的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();
}

主要问题是Arduino UNO没有Timer/Counter 3,因为它使用ATMega328A。例如,该T/C 3可在Adruino Micro/Leonardo(基于ATMega32U4(和Arduino MEGA 2560(ATMega2560(上使用。

不同的MCU也可能有不同的寄存器名称。这就是为什么Arduino Core充满了#ifdefs

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

至少它通常与MCU数据手册中使用的寄存器名称完全对应。当您尝试自己配置某些东西时,这也是您应该学习的第一个地方。