Układ mam podłączony do LCD więc mam taki jakby podgląd - powstawiałem sobie delay'e i ładnie widać że dokładnie w momencie sei() program zaczyna lecieć od nowa (inicjalizuje się lcd, wyświetla znowu napis powitalny itd).
Coś może być na rzeczy z tymi przerwaniami (od USB?) bo wstawiłem sobie do kodu takie oto linijki:
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
...mają za zadanie wyłączyć USB i faktycznie po tym zabiegu restarty ustają. Z tym że na razie robię to po omacku bo jeszcze zupełnie nie ogarniam tego USB. Np co konkretnie jest za te restarty odpowiedzialne? No ale w każdym razie miałoby to znaczyć że w Atmega32U4 należy pamiętać żeby coś pokonfigurować w rejestrach od USB przed włączeniem przerwań bo inaczej narażamy się na kłopoty? Byłoby to chyba trochę dziwne.
Jeżeli chodzi o operacje na rejestrach to w moim kodzie nie mam raczej nic specjalnego - jedynie lekko zmodyfikowana (na potrzeby Atmega32U4) obsługa timera
Kod:
TCCR0A = (1<<WGM01); // tryb CTC
TCCR0B |= (1<<CS01)|(1<<CS00); // prescaler 64
OCR0A = (uint8_t)(F_CPU / 64 / 1000 ); // 1ms --> poprawka do VIDEO
TIMSK0 |= (1<<OCIE0A);
no i teraz dodałem tylko ten fragment wyłączający USB.