Hallo, ich habe den atmeaga162 mit dem gcc compiliert. Dabei fiel mir auf, dass der aus einem Unterprogramm nicht zurückkam. Daher habe ich mir ein kleines Testprogramm in Assembler geschrieben. Um zu sehen wo das Programm steht, lasse ich die LEDs auf dem StK500 unterschiedlich aufleuchten. RESET: ldi temp,low(RAMEND) out SPL,temp ldi temp,high(RAMEND) out SPH,temp ;init Stack Pointer ldi temp, 0xff out DDRB, temp call serout weiter: ldi temp, 0x55 out PORTB, temp rjmp forever serout: ldi temp, 0x0 out PORTB, temp ; rjmp weiter ret Es leuchten nur alle LED. Die 0x55 wird überhaupt nicht ausgegeben. Nehme ich das "rjmp weiter" wieder rein, dann geht es. Scheint irgendwas mit dem Stack zu sein. Muss ich da noch in den Configuration Bits was einstellen oder ist der Ram defekt? Danke Andreas
Wo ist die Marke forever? Ist das nur ein Teil des Codes? Evtl. sind die LED´s low-aktiv geschaltet, 0=an und 1=aus. Dann erklärt es sich, das in 'serout' bei 0x00 alle LED´s angehen. Danach wird dann jede 2. LED mit 0x55 abgeschaltet. Wenn das wechselweise passiert, ist das so schnell das man nur alle LED´s leuchten sieht (träges Auge). Gruß Andi
Hallo Andreas, war nur ein Teil des Codes. Forever war eine Endlosschleife (forever: jmp forever) Habe es mittlerweile gefunden. Wollte gestern abend nur nicht mehr ins internet gehen. Nachdem ich den Stackpointer mal irgendwo mitten in den SRAM gesetzt habe ging es dann plötzlich. Habe mir mal dann im Datenblatt den SRAM-Bereich angesehen. Dabei sind mir dann einige Bemerkungen aufgefallen die auf unterschiedliche Ram-Bereiche hinweisen. Das Problem lag darin, dass es beim Atmega162 ein Bit gibt, dass sich M161C nennt. Damit ist der 162er kompatibel zum Atmega161. Dieses Bit war bei mir gesetzt. Beim Atmega161 endet der SRAM bei 0x4FF. Beim Atmega162 bei 0x4FF. Initialisiert wurde der Stackpointer aber mit 0x4FF obwohl dem Controller gesagt wurde "Du bist ein ATMega161". Damit war der Rücksprung ins Nirwana vorprogrammiert. Danke nochmals für Deine Bemühungen. Grüße Andreas
"Beim Atmega161 endet der SRAM bei 0x4FF. Beim Atmega162 bei 0x4FF. Initialisiert wurde der Stackpointer aber mit 0x4FF obwohl dem Controller gesagt wurde "Du bist ein ATMega161"." Wie, was, wo? Ist doch alles das selbe (0x4FF).!?! Gruß Andi
Blödsinn. Sollte natürlich so sein: Beim Atmega161 endet der SRAM bei 0x45F. Beim Atmega162 bei 0x4FF. Initialisiert wurde der Stackpointer aber mit 0x4FF...." Sorry Grüße Andreas
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.