www.mikrocontroller.net

Forum: Compiler & IDEs MSP430 Interrupt; Aufruf falsch?


Autor: m@is (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo @all:

hoffe einen Tip zu bekommen. Ich will auf eine Änderung am Port 2 mit
einem Interrupt reagieren.
Dieser soll dann einzelne Pins abfragen.

Allerdings bricht der COMPILER schon nach dem "interrupt" ab, also
vor der Klammer. Error[16] Identifier expected

Ich arbeite mit IAR Embedded Workbench und C-Spy auf Win XP.



void _EINT(void);

interrupt (PORT2_VECTOR) CHNG-INFO (void)
{
SDA = (P2IN & 0x02);        //soll P2.1 einlesen
    if (SDA != 0)

    //mach was

    else

    //was anderes

}

Gruß m@is

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

interrupt (PORT2_VECTOR) CHNG-INFO (void)

...das sieht aus, wie eine MSP-GCC deklaration einer ISR, die vom IAR
Compiler sieht meines Wissens nach etwas anders aus (da waren glaub ich
irgendwo eckige klammern)...

Genaues weis ich da aber leider nicht...

Gruß,
Patrick...

Autor: m@is (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@OldBug:
Danke für den hint mit den Klammern. Immer diese Syntax-Fehler. Für nen
Anfänger wie mich super schwer.
Habe jetzt nach knapp 3 Std. die Lösung :-(
Für heute reicht's, ab ins WE.

Hier noch der richtige Aufruf:


interrupt [PORT2_VECTOR] void CHNGINFO (void)

Autor: m@is (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, mit den eckigen Klammern kommt kein Compiler-Fehler mehr, aber der
Interrupt läuft trotzdem nicht. Ich kan an den entsprechenden Ports
machen was ich will, die Interrupttroutine wird nicht aufgerufen.

Doch noch was falsch?

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast Du den Port richtig initialisiert?
Ist der Pin Interruptfähig?

Autor: m@is (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich hoffe doch ;-)

auf eine fallende Flanke soll P2.1 mit einem Interrupt reagieren, dann
sollen P2.1 und P2.2 ausgewertet werden.


int main (void)
...
P2IE = 0x02;
P2SEL = 0x00;              // Set IO-Function
P2DIR = 0x06;              // set P2.1 and P2.2 to input direction
...

Soweit ich das gelesen habe sind nur die PIN's von Port1 nicht
Interruptfähig.

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Interrupts enabled? ;)

Autor: m@is (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe folgende Zeile dafür vorgesehen:

void _EINT(void);

Das müsste doch alles sein, um einen Interrupt auslösen zu können!?!

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist der Prototyp einer Funktion.
Nachdem Du Deine und den Rest des Controllers initialisiert hast, musst
Du die noch aufrufen:

int main (void)
...
P2IE = 0x02;
P2SEL = 0x00;              // Set IO-Function
P2DIR = 0x06;              // set P2.1 and P2.2 to input direction
...
_EINT();                   // Enable global interrupts

Dann sollte das gehen...

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hups, da fehlt das "Ports" hinter "Nachdem Du Deine..."

Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
P2IFG auf Null setzen, sonst wird permanent die ISR angesrungen.

Autor: m@is (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@OldBug: danke, habe in main tatsächlich nicht die Pseudofunktion _EINT
nochmal aufgerufen, wohl zuviel hin- und her editiert.

@Micha: danke für den Hinweis, habe die Zeile vor P2IE eingefügt.



Danke für Eure Hilfe!

m@is

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.