www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP TMS320C6713 Interrupt


Autor: dirkf (Gast)
Datum:

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

Autor: Jan Möller (Gast)
Datum:

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

Autor: dirkf (Gast)
Datum:

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

Autor: Jan Möller (Gast)
Datum:

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

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.