Forum: Mikrocontroller und Digitale Elektronik MSP430 UART Interrupts Probleme


von reflection (Gast)


Angehängte Dateien:

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

von S. W. (Gast)


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)

von johnjoe (Gast)


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

von reflection (Gast)


Angehängte Dateien:

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

von Christian R. (supachris)


Lesenswert?

Die korrekte Syntax für den MSPGCC ist folgendermaßen:

interrupt (UART0RX_VECTOR) USART0_RX_ISR(void)
{

}

Außerdem muss die signal.h inkludiert werden.

Steht aber alles in der MSPGCC-Doku :)

von Rufus Τ. F. (rufus) Benutzerseite


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

von reflection (Gast)


Lesenswert?

Hallo zusammen

Vieeeeeeeeeeeeeeeeeeeelen Dank für Eure rasche Hilfe! Hat nur am include 
signal.h gelegen :o)
Eieieieiei, IAR ist zu mspgcc wohl doch recht unterschiedlich!

Grüesse aus der Schweiz

reflection

http://www.reflectionracing.ch

von Christian R. (supachris)


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

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.