Forum: Mikrocontroller und Digitale Elektronik Interrupts / Timer/ MSP430F449


von Styx (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Community,
erst mal ein frohes Fest und ein guten Rutsch ins neue Jahr.

Nun zu meinem Problem,
ich suche schon Tage lang verzweifelt danach wie ich einen Interrupt in 
C ordentlich einbinde.

Ich will den TimerA 16Bit-Timer des MSP benutzen.
Habe mir den User Guide zu dem Timer durchgelesen aber trotzdem keine 
Ahnung wie ich den implementieren muss, geschweige denn wie ich das 
anstelle dem Timer einen Wert zu übergeben von dem er dann auf 0 runter 
zählt und dann ein Interrupt auslöst.

Hier kommt dann mein nächstes Problem, wie schreibe ich eine ISR in C?

Hoffe ihr könnt mir helfen...
Diese verflixte Projektarbeit ist nicht zum aushalten.

Im Anhang der Teil des User Guides zum Thema Timer A.

Danke
MfG
Styx

von Stefan (Gast)


Lesenswert?

>ich suche schon Tage lang verzweifelt danach wie ich einen Interrupt in
>C ordentlich einbinde.
Das sagt Dir der User Guide Deiner Entwicklungsumgebung!

>Hier kommt dann mein nächstes Problem, wie schreibe ich eine ISR in C?
s.o.

>Ich will den TimerA 16Bit-Timer des MSP benutzen.
>Habe mir den User Guide zu dem Timer durchgelesen aber trotzdem keine
>Ahnung wie ich den implementieren muss, geschweige denn wie ich das
>anstelle dem Timer einen Wert zu übergeben von dem er dann auf 0 runter
>zählt und dann ein Interrupt auslöst.
Sorry, aber ich finde im User Guide steht genau das alles drin.
TI hat aber auch Beispiel-Code-Fetzen... so als Anregung...

von Styx (Gast)


Lesenswert?

Hey Stefan,

naja ich finde nicht das mir das IAR ordentlich beschreibt.
Muss dazusagen ich hab noch nicht wirklich viel damit gearbeitet und 
finde die beschreibung schon etwas dürftig.

Was die einzelnen Bits mir sagen, habe ich im User-Guide auch 
verstanden, nur wie übertrage ich das in C?

Ein Beispiel Code dazu würde mir schon reichen...

Im IAR steht dass ich den interrupt so definiere

__interrupt void timer_interrupt(void);


So und woher weiß der jetzt bei welchem Flag der auslöst?

MfG

von Stefan (Gast)


Lesenswert?

>Ein Beispiel Code dazu würde mir schon reichen...
Ich sagte bereits, dass TI Beispiele hat!
Du musst nur Deinen MSP430F4xx in die Suchmaske eingeben und die 
Beispiele downloaden!

>Im IAR steht dass ich den interrupt so definiere
>__interrupt void timer_interrupt(void);
>So und woher weiß der jetzt bei welchem Flag der auslöst?
Indem Du die ISR richtig einbindest, z.B.:
#pragma vector=TIMERA0_VECTOR
oder
#pragma vector=TIMERA1_VECTOR

>Was die einzelnen Bits mir sagen, habe ich im User-Guide auch
>verstanden, nur wie übertrage ich das in C?
Ähh, ich dachte das ist eine Projektarbeit?
Was habt ihr bzw. was hast Du das ganze Jahr gemacht / gelernt?

Etwas Eigeninitiative ist schon notwendig, wenn Dir hier jemand helfen 
soll.
Im Moment hat das etwas von "...wer macht mir meine Hausaufgaben..."
Das kommt nicht sonderlich gut an!

von Jörg S. (joerg-s)


Lesenswert?

Styx schrieb:
> Im IAR steht dass ich den interrupt so definiere
> __interrupt void timer_interrupt(void);
> So und woher weiß der jetzt bei welchem Flag der auslöst?
Siehe dazu die msp430x44x.h Datei im inc Verzeichnis vom IAR Compiler. 
Da steht ganz unten ne Liste drin:
1
/************************************************************
2
* Interrupt Vectors (offset from 0xFFE0)
3
************************************************************/
4
5
#define BASICTIMER_VECTOR   (0 * 2u)  /* 0xFFE0 Basic Timer */
6
#define PORT2_VECTOR        (1 * 2u)  /* 0xFFE2 Port 2 */
7
#define USART1TX_VECTOR     (2 * 2u)  /* 0xFFE4 USART 1 Transmit */
8
#define USART1RX_VECTOR     (3 * 2u)  /* 0xFFE6 USART 1 Receive */
9
#define PORT1_VECTOR        (4 * 2u)  /* 0xFFE8 Port 1 */
10
#define TIMERA1_VECTOR      (5 * 2u)  /* 0xFFEA Timer A CC1-2, TA */
11
#define TIMERA0_VECTOR      (6 * 2u)  /* 0xFFEC Timer A CC0 */
12
#define ADC12_VECTOR          (7 * 2u)  /* 0xFFEE ADC */
13
#define USART0TX_VECTOR     (8 * 2u)  /* 0xFFF0 USART 0 Transmit */
14
#define USART0RX_VECTOR     (9 * 2u)  /* 0xFFF2 USART 0 Receive */
15
#define WDT_VECTOR          (10 * 2u) /* 0xFFF4 Watchdog Timer */
16
#define COMPARATORA_VECTOR  (11 * 2u) /* 0xFFF6 Comparator A */
17
#define TIMERB1_VECTOR      (12 * 2u) /* 0xFFF8 Timer B CC1-6, TB */
18
#define TIMERB0_VECTOR      (13 * 2u) /* 0xFFFA Timer B CC0 */
19
#define NMI_VECTOR          (14 * 2u) /* 0xFFFC Non-maskable */
20
#define RESET_VECTOR        (15 * 2u) /* 0xFFFE Reset [Highest Priority] */
21
22
#define UART1TX_VECTOR      USART1TX_VECTOR
23
#define UART1RX_VECTOR      USART1RX_VECTOR
24
#define UART0TX_VECTOR      USART0TX_VECTOR
25
#define UART0RX_VECTOR      USART0RX_VECTOR
26
#define ADC_VECTOR          ADC12_VECTOR

von Styx (Gast)


Lesenswert?

Ähh ne so ist es nicht,

ich will nicht dass mir jmd meine Hausaufgabe macht,
nur das tolle ist dass wir nie irgendwas mit dem MSP430 gemacht haben.
Sondern nur mit dem ATmega8. Des weiteren haben wir nie in C sondern nur 
in C# oder VBA programmiert und das wiederum nicht in zusammenhang mit 
Microcontrollern.

Das "pragma" habe ich zum Beispiel noch nie gehört und aus dem User 
Guide geht das nicht hervor was das nun sein soll....
Deswegen würde ich gerne mal ein Programm in C sehen welches einen 
Interrupt benutzt und wie er das tut.

Zum Thema Beispiel Codes habe ich bis jett schon viele gefunden, aber in 
Assembler....
Und die anderen Codes die ich gefunden habe in C benutzen keine 
Interrupts...

Nicht sonderlich hilfreich.

von Jörg S. (joerg-s)


Lesenswert?

Beispiele siehe:
http://www.ti.com/lit/zip/slac019

In fet440_ta_02.c gibt es Timer A mit ISR.

von Styx (Gast)


Lesenswert?

Hey super,

genau sowas habe ich gesucht.

Vielen Dank.

MfG
Styx

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.