Rzeźbię teraz bootloader na Atmega8, który ściąga firmware przez I2C, niestety dzieją się dziwne rzeczy. Kod bootloadera uruchamia się, kontrolna dioda miga w określonej sekwencji, czyli jest ok. W momencie kiedy wyślę pierwszy bajt po I2C, układ się resetuje. Podejrzewałem 1 z 3 możliwości:
- Kod bootloadera jest za duży i nie mieści się w obszarze 1024 słów (ale to wyeliminowałem przez porównanie zawartości flasha z tym co do niego ładuję)
- Jest niepoprawnie ustawiony wektor przerwania TWI i w momencie otrzymania danej skacze gdzieś w maliny.
Na początku programu przepisuję tablicę wektorów przerwań: GICR = (1<<IVCE); GICR = (1<<IVSEL);
W pliku . map mam taki wpis:
0x00000d4e __vector_17A w .lst taki: 302 .global __vector_17 304 __vector_17: 305 .LFB15: 306 .LM55: 307 /* prologue: frame size=0 */ 308 00e2 1F92 push __zero_reg__
Więc wygląda, że wszystko jest na miejscu.
- Ta opcja wygląda mi najbardziej podejrzanie: być może mam źle ustawiony wskaźnik stosu i program resetuje się przy próbie powrotu z przerwania.
HELP!
Dariusz Żołna