Arduino 自由运行模式下AVR ADC中的ADIE位
我一直在写我自己的“库”来处理AVR芯片上的不同初始化。然而,我被ADCSRA寄存器中ADIE位的动作所困扰(数据表第261页)。数据表并没有真正解释ADIE是如何工作的。但是,每当ADIE设置为0时,我都无法获得ADC的读数。为什么呢?我认为ADC的工作原理与定时器类似-即使中断未启用,它仍将使用读数更新ADC寄存器 这是罪魁祸首代码,每当“中断”设置为除1以外的任何值时,ADC都不工作。有趣的是,与其他中断不同,如果ISR(ADC_vect)例程中没有代码,芯片就不会卡住Arduino 自由运行模式下AVR ADC中的ADIE位,arduino,microcontroller,avr,atmel,atmega,Arduino,Microcontroller,Avr,Atmel,Atmega,我一直在写我自己的“库”来处理AVR芯片上的不同初始化。然而,我被ADCSRA寄存器中ADIE位的动作所困扰(数据表第261页)。数据表并没有真正解释ADIE是如何工作的。但是,每当ADIE设置为0时,我都无法获得ADC的读数。为什么呢?我认为ADC的工作原理与定时器类似-即使中断未启用,它仍将使用读数更新ADC寄存器 这是罪魁祸首代码,每当“中断”设置为除1以外的任何值时,ADC都不工作。有趣的是,与其他中断不同,如果ISR(ADC_vect)例程中没有代码,芯片就不会卡住 if(interr
if(interrupt){ADCSRA|=1<<ADIE;}//enable the ADC conversion complete interrupt
else{ADCSRA&=~1<<ADIE;}
if(interrupt){ADCSRA |=1此代码缺少一些括号,因此它不会做您认为它会做的事情。它看起来可能是做了正确的事情,运气好
if(interrupt){ADCSRA|=1<<ADIE;}//enable the ADC conversion complete
interrupt else{ADCSRA&=~1<<ADIE;}
~1<<ADIE != ~(1<<ADIE)
if(中断){ADCSRA |=1非常感谢!:)括号是问题所在,现在我知道为什么代码的位会随机干扰其余的位。我可能会以软中断结束,以避免在相当多的ISR之间屏蔽,因此我可能必须记住手动设置/清除重要位。再次感谢您的帮助:)