我正在使用安装了Arudino扩展的VSCode编辑器。基本上,我有一个简单的程序,我调用一个函数,将设置一个5毫秒的计时器,然后运行。但是,在编辑器中,我收到错误:
“错误:'OCR3A'未在此范围内声明”
有关如何解决它的任何想法?
我应该注意,intellisense可以看到寄存器的定义。我也在使用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核心充满了#ifdefs
此外,由于目标MCU错误,您可能会收到这些错误。
至少它通常完全对应于MCU数据表中使用的寄存器名称。当你尝试自己配置时,这也是你应该学习的第一个地方。