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

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