Hallo zusammen,
ich portiere ja gerade die avr231 auf den gcc. Das orginal ist für den
IAR. Dabei bin ich im spm-part auf folgendes seltsames Konstrukt
gestoßen:
--- schnipp ---------------------------------------
spmSPM:
movw r31:r30, r17:r16
rcall spmWait
in r20, SREG
cli
#ifdef _RAMPZ_
in r21, RAMPZ
out RAMPZ, r18
#endif
#ifdef _MEMSPM_
sts SPMREG, r22
#else
out SPMREG, r22
#endif
#ifdef _RAMPZ_
espm
#else
spm
#endif
dw 0xFFFF
nop
#ifdef _RAMPZ_
out RAMPZ, r21
#endif
out SREG, r20
ret
spmWait:
#ifdef _MEMSPM_
lds r23, SPMREG
andi r23, (1 << SPMEN)
brne spmWait
#else
in r23, SPMREG
sbrc r23, SPMEN
rjmp spmWait
#endif
ret
--- schnapp ---------------------------------------
2 Dinge verstehe ich nicht:
Erstens und vor allem: "DW 0xFFFF" kann ich für den gcc asm als .data
0xFFFF übersetzen. Das fügt einfach 0xFFFF in den Code ein. Aber was zur
Hölle macht es?????
2. Das Kommando 'espm' kennt weder das Instruction-Set Datenblatt,
noch mein Compiler. Auch die Doku vom iar-asm weiss nichts dazu. Ein
fehler von Atmel oder nur wieder ich, der nicht an der richtigen Stelle
Sucht?
Besten Dank,
Scheintod
"2. Das Kommando 'espm' kennt weder das Instruction-Set Datenblatt,
noch mein Compiler. Auch die Doku vom iar-asm weiss nichts dazu. Ein
fehler von Atmel oder nur wieder ich, der nicht an der richtigen
Stelle
Sucht?"
Du. Such einfach mal hier im Forum, da findest Du das auch...
Andi,
suche ich hier im Forum nach "espm", bekomme ich genau 2 Treffer.
(Jetzt vermutlich 3). Alle überschrieben mit "Seltsames
Assembler-Kommando in Bootloader".
Schoene Gruesse,
Scheintod
Tja, das solltest Du nochmal üben...
Ich jedenfalls finde eine Antwort, die Dir alles erklären würde...
P.S.: Es gibt nicht nur das "µC & Elektronik"-Forum hier...
@Scheintod
ich hoffe du hast eine Erklärung gefunden denn ich hatte letzte Woche
auch die Portierung des AES-Bootloaders auf meine ToDo-Liste
gesetzt...schön zu sehen, dass auch andere daran denken...vielleicht
lässt du uns ja dann an deinen Ergebnissen teilhaben
Grüße
Nehmt es mir nicht übel, aber sowohl die Suche als auch eine
Internetsuchmaschine als auch die Atmel-Dokumente erklären das sehr
gut.
Kein Wunder, daß oft Leute hier Sachen schreiben wie RTFM.
Manfred,
klar. Dachte mir ich veröffentliche das ganze dann hier als Patch- +
Makefile, nachdem ich nicht weiss, wie es Atmel mit der Lizensierung
ihrer ANs handhabt.
Andi,
schlechten Tag gehabt heute? Ich auch. Mir hat man gerade das Vorderrad
meines Fahrrades geklaut. Kein Spass bei der Hitze zu Fuß durch die
halbe Stadt zu dackeln.
Ich würde mich aber trotzdem freuen, ließest Du mich an Deinen
Erkenntnissen teilhaben. Klar, was das espm Kommando machen sollte
ist mir auch klar. (spm mit rampz-register.). Nur macht das schon das
spm-kommando alleine. Der gcc-as noch dazu kennt es nicht einmal. Die
Datenblätter (mega128 complete, can128 complete) melden auch 0 Treffer.
Das Forum hier gibt auch nix her (oder ich bin tatsächlich zu blöd,
aber mehr als 'Suche' anklicken, alle Bereiche anwählen & espm als
Suchbegriff eingeben fällt mir auch nicht dazu ein.)
Also wenn Deine Suche hervorragende Links & Doku produziert, würde ich
mich über Links dazu freuen.
Schoene Gruesse,
Scheintod
Das mit dem "ESPM" ist aber wirklich ein Fall für sich.
Zum einen findet man nur einen einzigen Eintrag ohne Link einer
Erklärung in der Hilfe des aktuellen AVR-Studio (SP3) und zum anderen
kennt das AVR-Studio den Befehl nicht als Programmcode und bringt nen
Error.
Schon sehr seltsam.
Habe auch die PDF´s zum Mega128 und Mega2560 mit dem Reader nach ESPM
durchsuchen lassen - NICHTS über ESPM.
In der Gesamt-Befehlsliste bei Atmel ist es mit Erklärung aufgeführt
aber keine Hinweise, für welche Megas der Befehl sein soll.
@Scheintod: Bleibt nur übrig, das Du Deinen GCC aktuallisierst.
@Alle anderen: Helft ihm doch ein bißchen auf die Sprünge, wozu ist das
Forum denn sonst da!
MfG
Andi
"Das Kommando 'espm' kennt weder das Instruction-Set Datenblatt"
Meins schon.
"In der Gesamt-Befehlsliste bei Atmel ist es mit Erklärung aufgeführt
aber keine Hinweise, für welche Megas der Befehl sein soll."
In meiner steht es schon:
Für "MCUs with more than 64K bytes data space".
Ansonsten,wie wäre es mit:
http://www.mikrocontroller.net/forum/read-2-95964.html#96546
[...]
nachdem ich nicht weiss, wie es Atmel mit der Lizensierung
ihrer ANs handhabt.
[...]
müsste man jemanden fragen der sich da auskennt - ich überlege gerade
wo ich immer was von einem ATMEL-Mitarbeiter gelesen habe...entweder
treibt der sich im avrfreaks-forum rum oder das war bei
c.a.embedded...ach ja, Ulf hiess der glaub ich ... den könnte man mal
anhauen?
Grüße
P.S. @Scheintod
falls man dir bei irgendwas helfen kann, lass es uns/mich wissen
Jürgen,
@instruction-set: Meines ist das hier:
http://www.atmel.com/dyn/resources/prod_documents/DOC0856.PDF
Da finde ich nichts. (Nicht nur um zu zeigen, dass ich nicht komplett
verblödet bin. Welches Instruction-Set Datenblatt hast Du?)
@http://www.mikrocontroller.net/forum/read-2-95964.html#96546:
Ja klar, dass würde ich mir auch unter dem espm kommando vorstellen.
Nur macht das schon das spm-kommando alleine. S. z.B. Doku zum
mega128.
Um sicherzugehen hab ich mir jetzt mal die Doku zum derzeit größten
AVR, dem mega2560 runtergeladen. Auch die kennt kein espm sondern nur
spm, lpm und elpm.
Manfred,
Danke für das Angebot. Da wäre noch die Frage nach dem 0xffff :) Und
wenn ich eine funktionierende Version habe brauche ich natürlich Leute
zum ausprobieren & für Verbesserungsvorschläge.
Schoene Gruesse,
Scheintod
Nun, da im Mega128 Datenblatt kein ESPM drin steht wird es auch nicht
unterstützt und darf daher nicht verwendet werden.
Und da es nichtmal im letzten (4.3.2005) original Atmel Assembler drin
ist, sach ich mal das gibt es garnicht.
Vielleicht ist es ja auch nur ein Macro, welches in irgendeinem
Include-File definiert wird.
Das .db 0xFFFF + NOP stammt noch aus den Errata-Sheets zu den
allerersten Megas mit SPM (z.B. Mega323), da wurde der erste Befehl
nach SPM falsch ausgeführt.
Bei den heutigen AVRs kannst Du es also weglassen.
Peter
Peter,
vielen Dank für die aufschlußreiche Antwort. Damit dürfte ich den
Assembler-Teil abschließen können. Schön wenn man auf Erfahrung
zurückgreifen kann (die Fehlt mir doch noch.)
Jürgen,
danke fürs Datenblatt. Tatsächlich ist da das Kommando drinnen. Aber
Dein Datenblatt ist von '99. Da ist es auch (noch?) ein eigener Befehl
mit eigenem Opcode. Was wohl aus dem Kommando geworden ist?
Seltsamerweise in der avr231 als Kommando nur für den mega128 drin,
also nicht für die alten.
Schoene Gruesse,
Scheintod