Mam problem z przerwaniem od Timera0. Chodzi o to by Timer0 zgłaszał przerwanie w trybie pracy z porównaniem. Jest to tryb Clear Timer on Compare Match (CTC). Licznik zlicza zdarzenia zewnętrzne i w momencie zliczenia do zadanej wartości ma zgłosić przerwanie i zacząc liczyć od zera. Aby to osiągnąć do rejestru OCR0 wpisuję wartość do której licznik ma liczyć. Rejestr ustawień licznika TCCR0 zapisuję następująco:
(0<<FOC0)|(0<<WGM00)|(0<<COM01)|(0<<COM00)|(1<<WGM01)|(1<<CS02)|(1<<CS01)|(0<<CS00)
(czyli zliczanie zewnętrzengo sygnału przy zboczu opadającym, tryb pracy CTC - zerowanie licznika w trybie porównania, odłączone wyjście OC0). W rejestrze TIMSK odblokowuję przerwania od Timera0 wpisując "1" w bicie OCIE0. Poza tym przerwania są oczywiście globalnie odblokowane (bit I w SREG). Powinno to według mnie działać a tymczasem sprawa wygląda tak że licznik liczy rzeczywiście do zadanej przeze mnie wartości po czym sie zeruje i liczy od nowa (zatem tryb pracy działa poprawnie) jednak przerwanie w momencie osiągnięcia wartości zgodnej z tą zapisaną w OCR0 nie występuje...
Program piszę w asemblerze.
Ma ktoś jakiś pomysł co może być przyczyną braku generowanie tych przerwań?
(0<<FOC0)|(0<<WGM00)|(0<<COM01)|(0<<COM00)|(1<<WGM01)|(1<<CS02)|(1<<CS01)|(0<<CS00)
(czyli zliczanie zewnętrzengo sygnału przy zboczu opadającym, tryb pracy CTC - zerowanie licznika w trybie porównania, odłączone wyjście OC0). W rejestrze TIMSK odblokowuję przerwania od Timera0 wpisując "1" w bicie OCIE0. Poza tym przerwania są oczywiście globalnie odblokowane (bit I w SREG). Powinno to według mnie działać a tymczasem sprawa wygląda tak że licznik liczy rzeczywiście do zadanej przeze mnie wartości po czym sie zeruje i liczy od nowa (zatem tryb pracy działa poprawnie) jednak przerwanie w momencie osiągnięcia wartości zgodnej z tą zapisaną w OCR0 nie występuje...
Program piszę w asemblerze.
Ma ktoś jakiś pomysł co może być przyczyną braku generowanie tych przerwań?