Hallo ich bins mal wieder G, für mein aktuelles Projekt brauche ich u.a. einen RC5 Empfänger. Um diesen zu realisieren zu können muss ich externe Interrupts verwenden, damit wenn ein Signal kommt er es sofort verarbeiten kann. Dazu habe ich den IR Empfänger an den Pin P0.30 (EINT3) gehängt und würde nun gerne auf eine negative flanke triggern. Was ich folgendermassen gemacht habe: EXTMODE = (1<<3); EXTPOLAR = ~(1<<3); //falling edge VICIntSelect &= ~( 1 << VIC_EINT3 ); VICIntEnable = ( 1 << VIC_EINT3 ); VICVectCntl2 = 0x20 | VIC_EINT3; VICVectAddr2 = (unsigned)eint3ISR; PINSEL1|=(1<<29); //P0.30 als EINT3 PINSEL1&=~(1<<28); (Zusätzlich läuft momentan noch ein TIMER und ein UART IRQ, des weiteren sind beide SPIs und der UART0 aktiv und noch ein paar unwichtigere sachen.) So weit so gut, doch oben geschriebene Code funktioniert nicht, weil er ständig bei den ersten 2 Zeilen abkackt. Wenn ich die raus nehme (EXTMODE EXTPOLAR), also activ low level, dann geht alles wunderbar. Gut in meinem Fall momentan reicht es wenn ich auf ein activ low level triggere, aber ich würde doch gerne wissen was da faul ist. Im MAN heißt es dazu nur das das dazugehörige Bit im VICIntEnable Register nicht gesetzt sein darf bevor man in die EXT... Register schreibt. Aber das berücksichtige ich ja... ich hab sogar schon mal alle Interrupts vorher löschen. Und die globalen Interrupts werden eh erst viel später aktiviert. Wie dem auch sei habe ich schon alle möglichen Zeilen vertauscht und eine Nacht dran rum probiert, immer mit dem gleichen Ergebnis: ersten 2 Zeilen auskommentieren => es geht, sonst nicht. Und das ist mist! Kann mir wer helfen? Jürgen
bing *brett vom kopf nehm* I forgot: buggy µCs G Danke für die schnelle Antwort. Also hier der aktuelle funktionierende Code (falls es wen interessiert): VPBDIV=0; EXTMODE = (1<<3); VPBDIV=VPBDIV_VAL; VPBDIV=0; EXTPOLAR = ~(1<<3); //falling edge VPBDIV=VPBDIV_VAL; VICIntSelect &= ~( 1 << VIC_EINT3 ); VICIntEnable = ( 1 << VIC_EINT3 ); VICVectCntl2 = 0x20 | VIC_EINT3; VICVectAddr2 = (unsigned)eint3ISR; INT_EN; VPBDIV muss(!!) man auf 0 gesetz werden bevor man ein(!) Register beschreiben kann. THX Jürgen
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.