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
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!)
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
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
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!
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.