mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430 UART und #pragma PROBLEM


Autor: John Fistikis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Tag Liebe Freunde

brauche mal kurz eure Hilfe denn ich bin am verzweifeln.

Habe folgendes BSp. Programm von TI Seite runtergeladen und will es 
testen ob alles funktioniert.

Kriege aber immer folgende Meldung
unknown #pragma 'vector'

Hier ist das Programm

#include  <msp430x14x.h>

void main(void)
{
  volatile unsigned int i;
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P3SEL |= 0xC0;                            // P3.6,7 = USART1 option 
select
  BCSCTL1 &= ~XT2OFF;                       // XT2on

  do
  {
  IFG1 &= ~OFIFG;                           // Clear OSCFault flag
  for (i = 0xFF; i > 0; i--);               // Time for flag to set
  }
  while ((IFG1 & OFIFG));                   // OSCFault flag still set?

  BCSCTL2 |= SELM_2 + SELS;                 // MCLK= SMCLK= XT2 (safe)

  ME2 |= UTXE1 + URXE1;                     // Enable USART1 TXD/RXD
  UCTL1 |= CHAR;                            // 8-bit character
  UTCTL1 |= SSEL1;                          // UCLK = SMCLK
  UBR01 = 0x45;                             // 8Mhz/115200 - 69.44
  UBR11 = 0x00;                             //
  UMCTL1 = 0x2C;                            // modulation
  UCTL1 &= ~SWRST;                          // Initialize USART state 
machine
  IE2 |= URXIE1;                            // Enable USART1 RX 
interrupt

  _BIS_SR(LPM0_bits + GIE);                 // Enter LPM0 w/ interrupt
}

#pragma vector=USART1RX_VECTOR
__interrupt void usart1_rx (void)
{
  while (!(IFG2 & UTXIFG1));                // USART1 TX buffer ready?
  TXBUF1 = RXBUF1;                          // RXBUF1 to TXBUF1
}



Ich weiß nicht was ich hier machen muss damit es endlich funzt
bin am Verzeifeln.......

:-(

Autor: beaker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meine Glaskugel meint du verwendest den mspgcc.

interrupt(USART1RX_VECTOR) uart1rx_isr(void)

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Interrupt-Vektor heisst wahrscheinlich anders als im Beispiel. Ich 
meine diesen hier: "USART1RX_VECTOR"
Guck mal in der Header Datei nach, die von IAR eingebunden wird, wie der 
Vektor richtig heisst. Die Datei müsste in etwa so heissen, wobei die 
xxxx dem eingesetzten Typ des MSP entsprechen: msp430xxxx.h
Die Datei ist je nach Typ ziemlich gross, such einfach mal nach 
WDT_VECTOR, den sollten alle MSP's haben.

Autor: John Fistikis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also soll ich anstatt
#pragma vector=USART1RX_VECTOR
__interrupt void usart1_rx (void)
{

nur

interrupt(USART1RX_VECTOR) uart1rx_isr(void)

schreiben?

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh, beaker hat sicher recht.

Autor: beaker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kommt auf deinen Compiler an. Daher ja auch der Witz mit der Glaskugel.

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welchen Compiler hast Du denn?

Autor: Gunb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meine Glaskugel ist gerade beim Ölwechsel.

Mit MSPGCC:

#include <signal.h>

....
.....
......

interrupt (UART1RX_VECTOR) RxIsrUSART1(void)
{

}

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Meine Glaskugel ist gerade beim Ölwechsel.

Ah, du scheinst bereits das neue Modell mit Viertaktmotor zu haben.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder so:
#ifdef __ICC430__
#pragma vector=UART1RX_VECTOR                  //IAR Compiler
__interrupt void USART1_RX_ISR (void){
#else
interrupt (UART1RX_VECTOR) USART1_RX_ISR(void)          //GCC Compiler
{
#endif

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht hat er den CrossWorks Compiler von Rowley 
http://www.rowley.co.uk/msp430/
Dann müsste Dein Konstrukt noch ein wenig erweitert werden :-)

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jaja, war ja nur ein Beispiel. Für den CCE gibts auch noch eine extra 
Erkennung, aber mittlerweile sind IAR und CCE3 Syntax ja gleich.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Crossworks "versteht" in der 2.x-Version aber auch die IAR-Syntax.

Autor: John Fistikis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich anstatt

#pragma vector=USART1RX_VECTOR
__interrupt void usart1_rx (void)



void uart_txIntHandler1(void)__interrupt[UART1TX_VECTOR]

schreibe geht es nun

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
HGmm...welcher Kompiler ist denn das nun?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.