www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Atmaga162 sram


Autor: AndreasH (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: AndreasH (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"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

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zahlen sind Schall und Rauch.

Autor: AndreasH (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.