MSP430 UART Interrupts Probleme

Gast #561605
Lesenswert?
• ▲
▼
Salu zusammen

Ich versuche gerade das Beispiel von mathar für den UART zu übernehmen. 
Habe im Netz gesehen das es einige gibt die dies ohne Probleme 
einsetzen. Den Quellcode habe ich für meine Bedürfnisse bereits ein 
bisschen angepasst (init).

Das Problem sind aber die Interrupts. Eclipse und mspgcc wollen 
irgendwie die Interrupt Vektoren nicht akzeptieren. (siehe Screenshot)

Kann mir einer sagen was ich da machen muss? Habe ich vergessen etwas zu 
includen?

Merci schon einmal im Voraus für die Hilfe

Gruss reflection
Angehängte Dateien:
Gast #561614
Lesenswert?
• ▲
▼
> Das Problem sind aber die Interrupts. Eclipse und mspgcc wollen
> irgendwie die Interrupt Vektoren nicht akzeptieren. (siehe Screenshot)

Ja, schau mal in das Manual von mspgcc.

interrupt (blabla) IntServiceRoutine(void)

Das blabla steht in den includefiles
z.B. Für TimerA

interrupt (TIMERA0_VECTOR) IntServiceRoutine(void)

Für dich vermutlich

interrupt (UART1TX_VECTOR) IntServiceRoutine(void)
und
interrupt (UART1RX_VECTOR) IntServiceRoutine(void)
Gast #561618
Lesenswert?
• ▲
▼
Beim Code Composer 2 stehen in den Include für die MSPs schon fertige 
Einbinderoutinen:

z.B. für TimerA CC0:

TIMERA0_ISR(func)

die ISR-Routine hat dann die Form:

interrupt void func(void)
{}

und fertig ist der Salat.

Weiss aber leider nicht, ob die auch so beim mspgcc drin stehen.

Gruss
Gast #561631
Lesenswert?
• ▲
▼
Nun habe ich es so gemacht, aber er will nicht ;o) DAs mit dem #pragma 
stammt noch von IAR. Mit mspgcc sollte es so aussehen:

interrupt (UART1RX_VECTOR) usart1_rx(void) (gefunden auf 
mikrocontroller.net)

leider bringt er immer noch nen Error (siehe Screenshot)

Gruss
Angehängte Dateien:
Persönliche Seite #561639
Lesenswert?
• ▲
▼
Die von Dir verwendete Notation für Interrupthandler ist die 
IAR-Notation.

  #pragma vector=VEKTORNAME
  __interrupt void funktionsname(void)
  {
  }

mspgcc* will

  interrupt (VEKTORNAME) funktionsname(void)
  {
  }

Noch eine andere Variante wird von Rowley Crossworks verwendet:

  void funktionsname(void) __interrupt[VEKTORNAME]
  {
  }




*) siehe auch hier
http://mspgcc.sourceforge.net/manual/x918.html
#561657
Lesenswert?
• ▲
▼
So lässt sich der Code auf beiden Compilern übersetzen:
1
#ifdef __ICC430__
2
#pragma vector=UART0RX_VECTOR                  //IAR Compiler
3
__interrupt void USART0_RX_ISR (void){
4
#else
5
interrupt (UART0RX_VECTOR) USART0_RX_ISR(void)          //GCC Compiler
6
{
7
#endif
8

9
....
10

11
}

und
1
#ifndef __ICC430__
2
#include <signal.h>
3
#endif

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.