Hallo, ihr seid meine letzte Hoffnung, Ich weiß mittlerweile nicht mehr weiter und hoffe um eure Hilfe. Ich arbeite mit einem ARM7 von Philips (LPC2136) und möchte den Timer0 aktivieren und über einen Interrupt laufen lassen. Ich habe folgende Konfigurationen. #include "lpc21xx.h" /* LPC21xx definitions */ #include "VIC.h" long timeval; // mein Interrupt __irq void tc0 (void) { ++timeval; T0IR = 1; // Clear interrupt flag VICVectAddr = 0; // Acknowledge Interrupt } // main int main (void) { unsigned int j; /* LED var */ T0MR0 = 149999; // 10mSec = 150.000-1 counts T0MCR = 3; // Interrupt and Reset on MR0 VIC_Init(); T0TCR = 1; // Timer0 Enable T0IR = 1; // Clear interrupt flag while (1) { /* Loop forever */ for (j = 0x010000; j < 0x800000; j <<= 1) { /* Blink LED 0,1,2,3,4,5,6 */ IOSET1 = j; /* Turn on LED */ function */ IOCLR1 = j; /* Turn off LED */ } for (j = 0x800000; j > 0x010000; j >>=1 ) { /* Blink LED 7,6,5,4,3,2,1 */ IOSET1 = j; /* Turn on LED */ function */ IOCLR1 = j; /* Turn off LED */ } } } // VIC init void VIC_Init(void) { VICVectAddr0 = (unsigned long)tc0; // set interrupt vector in 0 VICVectCntl0 = 0x20 + 4; // use it for Timer 0 Interrupt VICIntEnable = 0x00000010; // Enable Timer0 Interrupt } Dieser Code entspricht einem Keil-beispiel die mitgeliefert war. Wenn ich das Projekt von Keil ausführe funktioniert das Programm auch und der Interrupt wird aufgerufen. Wenn ich ein eigenes Projekt erstelle und den Code einbinde funktioniert das nicht. es wird zwar der Timer konfiguriert und im TOIR Register das InterruptFlag ausgelöst, das Programm springt aber nie in den __irq tc0. Ich bin schon etwas verzweifelt. Habe ich irgendetwas übersehen? Bitte um Hilfe. Danke Peter
Schau doch mal auf der Homepage von Keil, dort gibt es Beispielcode zum LPC2000 mit Timer 0 und Interrupt (heißt Blinky IRQ). Hier kannst du dieses Beispiel kostenlos und ohne Registrierung downloaden: http://www.keil.com/download/docs/232.asp Es ist hardwareseitig auf das Keil Evaluation Board MCB2100 angepasst, welches den LPC2129 verwendet, steuert dort ein paar LED's an. Für andere Hardware und mit LPC2136 sind meines Erachtens nur geringe Änderungen des Beispiels nötig, z.B. I/O-Ports. Gruß Dietmar
Sorry, habe übersehen, daß du das Beispiel schon hast. Dort ist aber einiges wegrationalisiert, wie ich sehe: 1. Du solltest mal das LPC213x.h für den LPC2136 includen. LPC21xx.h ist für LPC2114, 2119, 2124, 2129, 2194, aber das wird es sicher nicht sein. 2. Was steht denn in VIC.h? Das File braucht man meines Erachtens nicht, da die VIC Informationen in den Headerfiles für den Controller mit drinstehen. 3. Die I/O-Direction ist nirgendwo definiert. Im Keil Beispiel steht in der Initialisierung noch der Befehl: IODIR1 = 0xFF0000; /* P1.16..23 defined as Outputs */ 4. und die Pin Selections auch nicht. Aber die Pin Selections stehen default sowieso auf I/O, da macht es nichts. 5. Ist eigentlich die originale Startup.s mit unveränderten Interruptvektoren eingebunden? 6. Das Main-Programm (while(1)) läuft nur nacheinander die 2 for-Schleifen ab. Dort ist kein Zusammenhang mehr mit dem Timer-Interrupt. Bei Keil war da noch eine Funktion wait() mit drin. 7. Welche Hardware verwendest du überhaupt? Welche Tools zum Flash Download? Simulator? Welche Programmieroberfläche? 8. Wird in den anderen eingebundenen Files eine VIC Register überschrieben? Gruß Dietmar
Ja das stimmt, daß ich da was wegrationalisiert habe. Es geht mir nämlich in erster linie nur darum, daß der Interrupt aufgerufen wird. Die originale Startup.s ist eingebunden, wobei ich etwas dazu sagen muß - ich habe festgestellt, daß wenn ich unter Project/Components-Environments-Books/Folders-Extensions "Use RealViewCompiler" eingestellt habe funktioniert der Interrupt nicht. Wenn ich jedoch ein Projekt erstelle und bei den ARM Development Tools "Use Keil CARM Compiler" einstelle. funktioniert das Programm und der Interrupt wird ausgelöst. Das sagt mir, daß das Projekt ansich funktioniert und ich alles richtig konfiguriert habe. nur mit dem RealViewCompiler funktioniert das nicht. Gruß Peter
Die Umstellung auf RealView steht mir auch gerade bevor, schiebe es schon eine Weile vor mir her, da die guten alten Keil-Tools noch nicht allzu alt sind und gut funktionieren. Anscheinend steht ein kompletter Umbau von Assemblerfiles, C-Files, Header, Konfiguration etc. bevor, Syntaxänderungen überall, und das scheue ich noch etwas. Bin ehemals von GNU nach Keil umgestiegen und sehr verwöhnt worden, z.B. Handhabung von SWI Exceptions, was unter GNU völlig umständlich zu konfigurieren ist und bei Keil die Toolchain selbst erledigt. Ob das unter RealView noch so sein wird? So wie es aussieht, versteht RealView die Definition des Interrupts nicht oder falsch. Ich scheue mich gelegentlich nicht davor, auch den Keil Support anzurufen, zumindest solange die Lizenz gilt. Ansonsten, poste dein Problem doch mal im Keil Diskussionsforum. Gruß Dietmar
Danke dir, Werde ich machen. Falls ich eine Lösung gefunden habe, poste ich diese hier. Erstmals danke. Gruß Peter
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.