Interrupt Programmierung mit TI-DSP TMS320C64xx

Gast #1084657
Hallo zusammen,

gerade tue ich mich etwas schwer mit der Interrupt Programmierung des 
TMS320C6416. Dieser Prozessor ist für mich noch Neuland und ich schlage 
mich mit der Fülle von App.notes und User's Guides herum. (Bin etwas von 
der übersichtlichen Dokumentation von Infineon verwöhnt!)
Was ich eigentlich suche, ist die Angabe, wo sich nun der 
Interrupt-Vector-Table befindet. Also Adresse, Länge, ... usw.
Ich würde gerne in "C" diesen Table als Pointer-Array ansprechen und 
befüllen. Geht das?

In der Dokumentation von TI finde ich entweder nur etwas über das 
DSP-BIOS, oder nur Sachen zur Interrupt-Source-Selection, nie aber die 
ersehnte Vektor-Tabelle. Vielleicht heißt die Tabelle auch nur anders, 
weswegen ich sie nicht finde! Wer kann mir hier eine Dokumentennummer 
empfehlen.

Danke für Eure Antworten,
Patrick
Gast
Naja, ist wirklich ein schwieriges Thema.
Aber die Doku von TI ist extrem beschissen.
Ich meine jetzt das eine Problem gelöst zu haben, jetzt scheitere ich 
daran, daß ich das CSR nicht definieren kann, weil ich nicht weiß auf 
welcher Adresse es sich befindet.

Meine Frage:
Wer weiß, auf welcher Adresse ich beim TMS320C6416T das 
Control-Status-Register finde? - Besser noch, die Quelle, wo das steht.
(Oh, Infineon, was warst Du gut dokumentiert!)
Gast
Hallo,

du musst das doch gar nicht definieren, du greifst einfach so drauf zu, 
es ist bereits definiert:

CSR = 0x00;    //schreibt da überall 0 rein

Oder möchtest du etwas anderes machen?

&CSR sollte dir die Adresse liefern.

Grüße,

Peter
Gast
Ti Document spru732h.pdf Seite 325 Table 3-21 listet die Control 
Register auf.

Die Adressen beziehen sich wohl auf den Assemblerbefehl MVC (Move 
Between Control File and Register File), so genau hab ich das aber auch 
nicht verstanden, ich verwende es nur in C.

Peter
Gast
Hallo Peter,

danke für Deine Antwort. Inzwischen hänge ich noch tiefer im Thema drin. 
Das CSR-Register ist tätsächlich nicht in den normalen Adressraum 
gemappt, sondern wird über spezielle Befehle angesprochen.
Die Interrupt-Programmierung selber ist hier noch schwieriger als 
erwartet: Man MUSS eine Assembler-Datei erstellen, in der die 
Interrupt-Vektoren liegen. Die einzelnen Vektor-"Zellen" muß in einer 
ganz bestimmten Weise aufgebaut sein. Von dort werden dann die 
eigentlichen Service-Routinen aufgerufen.
Soweit die Theorie. - In der Praxis klappt das nur leider immernoch 
nicht. - Mein Timer läuft, GIE ist an, entsprechender IE ist an, 
Interrupt-Request wird generiert, aber die Interruptroutine wird nicht 
aufgerufen!
Hätte nie gedacht, daß eine "einfache" Interrupt-Programmierung ohne das 
DSP-BIOS so ein Problem werden kann.
Wer kann mir helfen?
Hat sich erledigt:
Nach erneutem Nachlesen ist mir eine Passage ins Auge gefallen, in der 
steht, daß man auch den NMI-Interrupt aktivieren muß, damit es überhaupt 
funktioniert. - Naja, und jetzt funktioniert es!

Danke Dir Peter für Deine freundliche Mithilfe!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 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.