Hallo zusammen, ich versuche den externen IRQ 2 zur Auswertung eines angeklemmten Radiometrix Funkmoduls zu benutzen, aber dieses Ding will und will einfach nicht funktionieren. Ich hab leider keine Ahnung was das sein kann. Hier ein wenig Code: void radio_init (void) { // set external interrupt2 input PINSEL0 |= 2 << 30; // setup the VIC ... VICProtection = 0x0; VICIntSelect &= (~(1 << 16)); VICIntEnable |= (1 << 16); VICVectAddr1 = (unsigned long) radio_isr; VICVectCntl1 = (0x20 | 0x10); } void _attribute_ ((interrupt("IRQ"))) radio_isr (void) { // do something with the radiomodule ... VICVectAddr &= (~(1 << 16)); EXTINT &= (~(1 << 2)); } Als FIQ laeuft ein Timer Interrupt, der auch wunderbar tut. Interrupts sind eingeschaltet im Startup Assembler Code und das Funkmodul spuckt auch ein Signal aus. Der Interrupt davon geht an den BUT Eingang des Olimex LPC-P2106, der eigentlich durch das PINSEL auf EINT2 gesetzt werden sollte. Kann jemand helfen? Besten Dank & Gruss Florian
Danke fuer den freundlichen Hinweis, geht das vielleicht auch noch mit einer KURZEN Erklaerung? kopfschuettel
Hallo Florian, es gibt auf der Seite von Philips ein "Errata Sheet" zu jedem Controller. Das ist die angesprochene Bugliste. Das Errata Sheet findest du auf der Seite des jeweiligen Controllers, in deinem Falle auf der Seite vom 2106. Grüße
Hallo Patrick, Danke fuer Deinen Tip. Leider konnte ich in Sheet 1.7 mit Stand vom 5. August 2005 nichts entdecken was auf ein Problem mit dem EINT2 hindeuten wuerde. Seh ich den Wald vor lauter Baeumen nicht mehr?! :( Gruss Florian
Hallo Florian, habe mir gerade nochmal das Errata Sheet zum 2106 angeschaut. Da steht wirklich nichts drin. Beim LPC2124 sieht das anders aus, sorry. Nochmal 3 sachen: 1. Du setzt ja gar nicht EXTMODE oder EXTPOLAR ? Soll deine ISR wirklich auf low level angesprungen werden ? 2. Du musst in EXTINT das INT-Bit löschen indem du eine 1 reinschreibst. Bei EXTINT2 sieht das so aus: SCB_EXTINT = 4; 3. Einen Interrupt bestätigt man meistens so: VICVectAddr = 0; Grüße und viel Glück, Patrick
Hallo Patrick, Danke nochmal. Jup, die ISR soll bei low-level angesprungen werden, das Radiometrix Funkmodul zieht den Pin so wenn es Daten hat. Extint Bit wird geloescht und der IRQ wird auch bestaetigt: VICVectAddr &= (~(1 << 16)); EXTINT &= (~(1 << 2)); Gruss Florian
Hallo Florian, EXTINT Bit wird nur gelöscht wenn du eine 1 reinschreibst, nicht wenn du eine 0 setzt. Siehe Manual Beschreibung. VICVectAddr könnte funktionieren. Probier trotzdem die Variante mit VICVectAddr = 0; Außerdem würde ich eher einen Falling Edge Interrupt machen wenn der INT ein Low-Pegel ist. Grüße
Hi, hoppla ... EXTBIT hast Du recht. Aendert aber leider auch nix. Die = 0 Variante bringt leider auch nichts :( Hm, Falling Edge ... wie? Danke fuer die Hilfe. Florian
Hallo Florian, du kannst dich ja etwas an meinem Code orientieren: SCB_MEMMAP = 1; //interrupt vectors reside in flash SCB_EXTINT=0x04; // Clear Interrupt Bits /* EINT2 Bug workaround */ SCB_VPBDIV=0x0; SCB_EXTMODE = 4; // Edge-sensitive SCB_VPBDIV = VPBDIV_VAL; SCB_VPBDIV=0x0; SCB_EXTPOLAR = 4; // Rising Edge <- hier einfach auf 0 umstellen SCB_VPBDIV = VPBDIV_VAL; SCB_VPBDIV=0x0; SCB_VPBDIV = VPBDIV_VAL; VICIntEnClear = 0xFFFFFFFF; // clear all interrupts VICIntSelect = 0x00000000; // clear all FIQ selections VICVectAddr1=(unsigned long)extint2; VICVectCntl1 =(1<<5) | VIC_EINT2; // VIC EINT2 steht für 16 VICIntEnable = (1<<VIC_EINT2); //Bit = Channel des INTs Der Anfang der ISR: void _attribute_ ((interrupt("IRQ"))) extint2(void){ SCB_EXTINT = 4; //Clear Interrupt Bit VICVectAddr = 0; } Natürlich habe ich noch viel mehr Krimskrams in meinem Programm, das sind aber die wichtigen Ausschnitte. Grüße, Patrick
Hallo Patrick, Danke fuer Dein Codebeispiel. Leider sagt mir sowohl mein Manual als auch mein Compiler, dass es weder ein EXTMODE noch ein EXTPOLAR Register gibt. Die Umstellung von VPBDIV hat aber einen Effekt erzielt. Irgendwie werden momentan wohl noch ein paar Pakete verschluckt, aber das Funkmodul synchronisiert sich zumindest. Langsam ein Lichtblick, ENDLICH! Ich werd mal noch ein wenig dran rumfrickeln ... Schoenes Wochenende! Florian
Hallo Florian, check mal bitte dein Header File ( z.B. lpc2106.h oder sowas ) ob da irgendwo EXTMODE oder EXTPOLAR drin steht. Die Schreibweisen unterscheiden sich sehr oft. Grüße
Moin Patrick, nope steht leider nicht drin :/ Steht auch nicht im Manual. Schoenen Gruss Florian
Hallo Floran, mein Wissen basiert größtenteils auf den verfügbaren Funktionen vom LPC2124. Ich habe mir eben nochmal das LPC2106 Datasheet angeschaut und gesehen dass es diese Register wirklich nicht gibt. Sehr bitter. Momentan kann ich dir nicht weiterhelfen bei deinem Problem. Falls dir hier auch keiner weiterhelfen kann wende dich doch an die LPC2000 Group von yahoo. Grüße
Heyho, das Funkmodul laeuft ja mittlerweile, jetzt kommt der I2C dran. Da aerger ich mich grad auch ziemlich mit rum, das liegt aber eher daran, dass ich in diesem verf*ckten Manual von dem Picaxe LCD Display hier die Hardware Adresse nich finde und die Seppel nur irgendwelche Codebeispiele mit ihrer eigenen Software abgedruckt haben. Wird schon irgendwie werden. Danke fuer Deine Hilfe :) Schoenen Gruss Florian
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.