[AVR32] Codierung für absoluten Sprung

13/12/2009 - 14:22 von Markus Wichmann | Report spam
Hi all,

ich darf mich dank meines Studienganges gerade mit dem AVR32
auseinandersetzen. Nun hab ich mich damit auseinandergesetzt, wie man
denn ISRs registrieren könnte. Und da fand ich, dass man für jeden
Interrupt einen Pointer von 14 Bytes Größe als Handler registrieren
kann, der dann in ein Systemregister geodert wird, sodass ein Pointer
von 32 Bytes entsteht, der dann angesprungen wird.

Das heißt aber, dass ich nur einen Adressraum von 2^14 Bytes habe, um
Handler für bis zu 2^11 Interrupts anzulegen. Teilt man das gerecht auf,
hat man 8 Bytes pro Handler. Um damit irgendwas vernünftiges anzufangen,
ist das zu wenig. Also dachte ich mir, dass 8 Bytes eigentlich reichen
müssten, um damit einen absoluten Sprung auszuführen.

http://www.atmel.com/dyn/resources/...c32000.pdf

Das ist eine Doku des Prozessors. Ich suche nun verzweifelt nach einer
Möglichkeit, das gewünschte zu tun. Was ich bislang gefunden habe:

- RCALL - PC-relative call to subroutine

Damit hab ich zwar die Adresse fast direkt codiert, aber die
Einsprungadresse muss in einem Bereich von 2^21 Bytes um den Position
Counter liegen. Dummerweise nutzt die Architektur unabhàngig von der
Größe des eigentlichen RAMs die 32 Byte fast vollstàndig aus, also ist
das doch irgendwie zu wenig.

- ICALL - Indirect call to subroutine

Fast genau das, was ich will. Der Position Counter wird direkt mit dem
Inhalt eines Registers belastet. Aber wie bekomme ich ein DWORD in ein
solches Register rein? Mit LDDPC? Aber damit kann ich auch nur
dword-aligned data laden.

OK, es sieht mittlerweile so aus, als müsste ich den Handler mit RETE
beschlossen werden, also haben wir bislang:

lddpc r0, PC[6] ;2 Bytes
icall r0 ;2 Bytes
rete ;2 Bytes
dw Adresse ;4 Bytes

Das sind 2 Bytes zuviel. Natürlich kann ich auch sagen, dass eine ISR
nicht registeriert werden konnte, weil der Platz alle war, aber ich will
nicht wegen zwei Bytes eine schlechtere Lösung wàhlen.

Gibt es bessere Lösungen?
Tschö,
Markus

Nur weil ein Genie nix reißt, muß ja nun nicht gleich jeder Idiot
pausieren... Bully hats ja auch geschafft.
 

Lesen sie die antworten

#1 Sebastian Biallas
13/12/2009 - 19:42 | Warnen spam
Markus Wichmann wrote:
Hi all,

ich darf mich dank meines Studienganges gerade mit dem AVR32
auseinandersetzen.



I11? :)

Gibt es bessere Lösungen?



Ich verstehe das Problem zwar nicht ganz, aber Du kannst ins
Linkregister MOVen und dann RET aufrufen. Oh, Du kannst sogar direkt in
den Programcounter MOVen.

Gruß,
Sebastian

Ähnliche fragen