Forum: Mikrocontroller und Digitale Elektronik MSP430 Interrupt Vector Syntax


von jha (Gast)


Lesenswert?

Hallo zusammen,

ich habe ein kleines Programm geschrieben, welches mithilfe von Timer_A 
im Continous Mode eine ISR ausführt
1
#pragma vector=TIMER0_A1_VECTOR
2
__interrupt void foobar(void)
3
{
4
    // code omitted
5
}

Die ISR wird beim Überlauf von Timer_A korrekt aufgerufen.

Ich würde nur gerne verstehen WARUM der Vector Timer0_A1_VECTOR heißen 
muss.

Meine Vermutung:
TIMERn_Ax_VECTOR
* n steht für die "Instanz" des Timers - in diesem Fall 0
* x ist einfach nur ein Zahl um zwischen CCIFG0 und den anderen IFGs zu 
unterscheiden

Ist meine Vermutung korrekt oder kann mich jemand bitte über die 
Benamung des Vectors aufklären?

Vielen Dank.

von pumuggl (Gast)


Lesenswert?

> Timer0_A1_VECTOR

Weil es im Startupcode eine weak Definition fuer diesen Wert gibt.
Wenn man das Dingens also neu benamsen will, kann Mann das gerne tun.
Dann aber an beiden Stellen.

von pumuggl (Gast)


Lesenswert?

Achja: Der Vektor heisst natuerlich auch so.
Also drei Stellen...

von pumuggl (Gast)


Lesenswert?

Wie das Ding heisst ist blanke Definition.
Der Hersteller (des Codes) hat halt versucht systematisch zu sein.
Besondere Magie ist da nicht am Werk.

von dummschwaetzer (Gast)


Lesenswert?

weil es in deiner dem prozessor zugehörenden heder so heisst.
sollte im compilerverzeichnis liegen un hatt dann z.B:
(CCS9 MSP430 FR5994, damit <msp430fr5994.h>)
#define TIMER0_A1_VECTOR       (44 * 1u)                     /* 0xFFE8 
*/

von jha (Gast)


Lesenswert?

Klar, dass das nur eine Benamung ist die in der Headerdatei zum 
MSP430FR6898 ist. Aber ich frage mich, wie würde ich herausfinden, dass 
genau TIMER0_A1_VECTOR genutzt werden muss um auf den Überlauf von 
Timer_A zu reagieren? Ich habe den passenden Vector nur über 
Beispiel-Programme herausfinden können..
in der Dokumentation konnte ich auch nichts passendes finden.. nur den 
Word Offset für TA0IFG.. oder muss ich tatsächlich den Offset in der 
Headerdatei raussuchen und den entsprechenden #define nutzen? Oo

von Peter D. (peda)


Lesenswert?

dummschwaetzer schrieb:
> #define TIMER0_A1_VECTOR       (44 * 1u)                     /* 0xFFE8
> */

Ohne den Kommentar 0xFFE8 wüßte ich jetzt nicht, welcher Vektor aus 
Table6-4 damit gemeint sein soll. Für TA0 gibt es ja 2 Vektoren.
Die TI-Datenblätter scheinen da wirklich keine Hilfe zu sein.

Bei den AVRs ist das sauber gelöst. Die Namen in den Header-Files sind 
exakt diejenigen, die im Datenblatt stehen, mit "_vect" am Ende. 
Leerzeichen werden als "_" geschrieben.
Z.B. im Datenblatt steht in der Tabelle "TIMER1 COMPA", dann steht im 
io.h:
1
#define TIMER1_COMPA_vect _VECTOR(6)

von jha (Gast)


Lesenswert?

Genau ein solches System hinter der Benamung muss es doch auch bei dem 
genannten Vector geben. Allein den richtigen Namen an dem Kommentar 
festzumachen finde ich etwas umständlich..

von Clemens L. (c_l)


Lesenswert?

jha schrieb:
> Genau ein solches System hinter der Benamung muss es doch auch bei dem
> genannten Vector geben.

Diese Namen sind zum Teil historisch gewachsen, es ist also nicht 
unbedingt zielführend, nach einem System zu fragen. :)

Im Zweifelsfall solltest du in der Header-Datei nachschauen.

Und das ist auch die einzige Stelle, wo du die Symbole für 
Interrupt-Vektoren findest (das Handbuch und die Beispielprogramme 
benutzen nur die Zahlen):
1
/* T0_A3IV Definitions */
2
#define TA0IV_NONE             (0x0000)       /* No Interrupt pending */
3
#define TA0IV_TACCR1           (0x0002)       /* TA0CCR1_CCIFG */
4
#define TA0IV_TACCR2           (0x0004)       /* TA0CCR2_CCIFG */
5
#define TA0IV_6                (0x0006)       /* Reserved */
6
#define TA0IV_8                (0x0008)       /* Reserved */
7
#define TA0IV_TAIFG            (0x000A)       /* TA0IFG */

von Roland E. (roland0815)


Lesenswert?

Die Namen stehen genau so im Prozessorhandbuch.

von jha (Gast)


Lesenswert?

Roland E. schrieb:
> Die Namen stehen genau so im Prozessorhandbuch.

In dem vom MSP430FR6898? Ich konnte dort nichts finden. Selbst mit der 
Suche konnte ich im PDF nichts finden oO
auf welcher Seite soll das den stehen?

von jha (Gast)


Lesenswert?

Entschuldigung, ich meinte natürlich den MSP430FR6989

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.