MSP430 Interrupt; Aufruf falsch?

Gast #75655
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
Gast #75656
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...
Gast #75657
@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)
Gast #75658
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?
Gast #75660
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.
Gast #75663
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...
Gast #75666
@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

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.