MSP430 Interrupt Vector Syntax

Gast #6043128
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.
Gast #6043220
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
#6043275
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)
#6044001
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 */

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren