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
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...
@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)
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?
Hast Du den Port richtig initialisiert? Ist der Pin Interruptfähig?
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.
ich habe folgende Zeile dafür vorgesehen: void _EINT(void); Das müsste doch alles sein, um einen Interrupt auslösen zu können!?!
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...
P2IFG auf Null setzen, sonst wird permanent die ISR angesrungen.
@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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.