Hallo, ich möchte mal kurz Nachfragen, ob der ARM mehrere Interrupte verarbeiten kann: Ich habe folgendes Problem, dass, wenn ich nur einen Interrupt für I2C benutze läuft alles. Benutze ich alleine nur Timer0 Interrupt, dann geht auch alles, aber wenn ich beide benutze, dann kommt nur noch einer. I2C init: VICIntSelect &= ~( 1 << VIC_I2C_POS ); // I2C ist ein IRQ VICIntEnable |= ( 1 << VIC_I2C_POS ); // Interrupt freigaben. VICVectCntl1 = 0x20 | VIC_I2C_POS;// Slot 3 für I2C Interrupt festlegen. VICVectAddr1 = (unsigned)I2CISR; //Interruptroutine eintragen I2C Interrupt - Routine: I2CONCLR = 0x08; // Interrupt zurücksetzen VICVectAddr = 0; Timer0 Init: VICIntSelect &= ~( 1 << VIC_T0_POS ); // Timer 0 ist ein IRQ VICIntEnable |= ( 1 << VIC_T0_POS ); // Timer 0 Interrupt freigeben VICVectCntl0 = 0x20 | VIC_T0_POS; //Diesen auf Slot 2 legen und freigeben. VICVectAddr0 = (unsigned int)timer0ISR; // Interruptroutine eintragen. /* Reset timer 0 */ T0TCR = FALSE; // Timer 0 löschen T0PR = PCLK / 2000; // Setze den Vorteiler auf 1 ms T0MR0 = ms; // Benutze das Match 0 Register T0MCR = 3; // Lade Timer 0 neu und resete diesen T0TCR = TRUE; // Timer 0 starten. T0IR = 0xFF; // Lösche alle Interrupt anforderungen. Timer0 Interruptroutine: taskmain(); // Haupttaskroutine T0IR = 0xFF; // Timer 0 Interrupt löschen VICVectAddr = 0; static void timer0ISR(void) _attribute_ ((interrupt ("IRQ"))); void I2CISR (void) _attribute_ ((interrupt ("IRQ"))); Danke und gruss Harry
Kommt drauf an, von welchem ARM7TDMI Du sprichst. Die Philipser habe 2 Prioritätsstufen, die von ST haben 17. Eine Besonderheit der ARM ist auch, daß sie zwischen 2 Interrupts keine Instruktion des Main (oder niederpriorisierten Interrupts) ausführen. Peter
Hallo Harry, ich weiß nicht, ob dein Problem noch aktuell ist, aber der LPC2106 kann definitiv mehr als einen Interrupt. Dafür gib es ja die VICVectCntlX und VICVectAddrX Register... Ich habe z.b. gerade einen TIMER und UART (beide als IRQ) laufen... Sollte das Problem noch bestehen, dann schreib einfach mal zurück und dann bekommen wir das Problem schon gelößt G SID
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.