TMS320C6713 Interrupt

Gast #390890
Das ist ein Teil einer (möglichen) Vektortabelle. Ich habe gerade mal
danach gesucht
(http://www.nd-tech.com/webk/winko/include/etc_down_hit.php?code=qna&v=eng&category=&page=4&number=188&keyfield=&key=&file=vecs.asm).
Mit dem Macro direkt davor (VEC_ENTRY) wird in die jeweilige
Startadresse der eigentlichen Interruptroutine gesprungen.
Da die Vektortabelle mit irgendetwas während der Initialisierung
gefüllt werden muss, nimmt man Dummys für nicht benötigte Interrupts.

Zur Info:
Die ISRs müssen genau acht Befehle lang sein. Wenn der Code zu lang
ist, muss aus der ISR in eine andere Routine gesprungen werden.
Die 5 NOPs am Ende sind wichtig für die Fließbandverarbeitung
(pipelining, delay-slots).
Du solltest dir das leben nicht unnötig schwer machen, und das BIOS
dafür verwenden. Das ist wesentlich unkomplizierter.

Gruß,
Jan
Gast #390891
Hallo Jan,

was ich halt nicht blicke ist, warum steht der dummy vor der
eigentlichen Vektortabelle? Und warum ein Sprung nach B3 (B B3)?
Wann würde denn ein Sprung nach _vec_dummy: erfolgen?

Mit dem BIOS hast Du natürlich recht. Damit geht es echt einfach und
bequem. Aber das BIOS ist nunmal so ne Art Mini-Betriebssystem und ich
weiss nicht ob der Einsatz wirklich sinnvoll ist? Habe da noch zuwenig
Erfahrungen. Läuft das stabil?

Gruss
Dirk
Gast #390892
Das Makro VEC_ENTRY bekommt die Adresse des Dummys oder einer anderen
Routine.

VEC_ENTRY .macro addr
  STW   B0,*--B15
  MVKL   addr,B0
  MVKH   addr,B0
  B   B0
  LDW   *B15++,B0
  NOP   2
  NOP
  NOP
  .endm

"addr" wird also mit _vec_dummy ersetzt. Im Makro selbst wird dann B0
auf den Stack gerettet, unterer und oberer Teil (wegen fester
Befehlslänge bei RISC, load store Problematik) der Adresse geladen und
zur Adresse gesprungen. Danach wird der alte Inhalt von B0 vom Stack
zurück kopiert. LDW und die NOP Befehle sind wieder Delayslots für den
branch.
Warum gerade nach B3 gesprungen wird weiß ich nicht. Da handelt es sich
eventuell um reine Willkür. B3 hat imho auch keine spezielle Funktion,
wie etwa B15 (stackpointer).

Ja, das BIOS läuft sehr stabil.

Gruß,
Jan

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.