Forum: Digitale Signalverarbeitung / DSP / Machine Learning TMS320C6713 Interrupt


von dirkf (Gast)


Lesenswert?

Hallo,

ich möchte für den TMS320C6713 eine ISR schreiben (ohne BIOS).
TI macht zum Thema IST auch Vorschläge.
Aber was soll denn hier passieren???

_vec_dummy:
  B    B3
  NOP  5

Hat dass schon mal jemand gesehen? Die drei Zeilen tauchen immer wieder
auf!

Gruss
Dirk

von Jan Möller (Gast)


Lesenswert?

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

von dirkf (Gast)


Lesenswert?

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

von Jan Möller (Gast)


Lesenswert?

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

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
Noch kein Account? Hier anmelden.