Witam serdecznie, mam następujący problem. Programuję procesor atmega128a, mam do niej podpięty kwarc 16MHz, fuse bity mam zadeklarowane tak jak na rys1.

W konfiguracji kompilatora mam podpięte że częstotliwość pracy będzie 16MHz (-DF_CPU=16000000UL), również w pliku z funkcją main mam deklarację define F_CPU 16000000UL czyli według mnie z tym jest wszystko w porządku.
Problem pojawia się gdy chcę z funkcji main wyjść do podprogramu i wrócić, jak widać na rys2. w funkcji main mam funkcję initSPI(); w linii 16, jest wywoływana derektywa CALL z miejscem mojego podprogramu w pamięci, wszystko jest ok.

Wskaźnik stosu zmniejszył się o 2 czyli jest ok, ale do pamięci nie została zapisana poprawna wartość miejsca powrotu, zostały jakieś śmieci, adres powrotu powinien być w komórkach 10FC i 10FB.

Prosiłbym o wyrozumiałość, od niedawna mam styczność z procesorami avr. Jeżeli potrzebujecie dodatkowych informacji proszę pisać śmiało, zależy mi na rozwiązaniu tego problemu bo męczę się już długo i już nie wiem czego się chwycić.
Pozdrawiam i dziękuję za wszelkie sugestie.
EDIT: zastanawia mnie również dlaczego wskaźnik stosu po wywołaniu programu jest ustawiony na 10FD, domyślam się że komórki 10FE i 10FD tworzą adres powrotu z funkcji main zapisany przez cstartup (który z resztą też nie jest poprawny) natomiast do czego jest ostatnia wolna komórka pamięci, ta sierota na końcu 10FF?