我一直在编写自己的“库”来处理 AVR 芯片上的不同初始化。但是,我被 ADCSRA 寄存器中的 ADIE 位的作用所困扰(数据表中的第 261 页)。数据表并没有真正解释 ADIE 的工作原理。但是,每当 ADIE 设置为 0 时,我都无法读取 ADC 的读数。这是为什么呢?我认为 ADC 像定时器一样工作——即使没有启用中断,它仍然会用读数更新 ADC 寄存器。
这是罪魁祸首代码,只要“中断”设置为 1 以外的任何值,ADC 就无法工作。有趣的是,与其他中断不同,如果 ISR(ADC_vect) 例程中没有代码,则芯片不会卡住。
if(interrupt){ADCSRA|=1<<ADIE;}//enable the ADC conversion complete interrupt
else{ADCSRA&=~1<<ADIE;}