Ну очень хочу зажечь светодиодик в прерывании. Не получается...
Сразу скажу - код был отлажен в IAR, в том же железе, инициализация компаратора и т.д. корректные. В IAR всё работает как часы, в клипсе - затыкается.
GCC+Eclipce. Инициализирую:
Код
PORTD &= ~((1<<6)|(1<<7)); // лапы компаратора на вход
DDRD &= ~((1<<6)|(1<<7));
ADCSRA &= ~(1<<ADEN); // выключаю АЦП
ACSR = (1<<ACBG)|(1<<ACIE)|(1<<ACIS1)|(1<<ACIS0);
SFIOR |= (1<<ACME);
ADMUX = 6; // настройка компаратора на 6 вход АЦП
_delay_ms(1);
ACSR |= (1 << ACI); // сброс флага прерывания, чтоб не возникло сразу после включения
_delay_ms(1);
sei();
Собственно, кусок скопирован из IAR.
Далее если делать так, то всё работает:
Код
if(ACSR & (1 << ACO) ) ON(LED);
else OFF(LED);
А вот если так, то фиг:
Код
ISR(ANA_COMP_vect) {
ON(LED);
}
То есть софтовый опрос флага компаратора работает, значит железных проблем или проблем с инициализацией нет.
Не работает именно прерывание.
Куда порыть? В GCC я новичок...