Hallo miteinander, ich hab einen LPC2106 der am Eingang von CAP1.0 ab und an eine Flanke bekommt (high und low) und er soll mir die Zeit dazwischen messen. Das ganze soll mittels Interrupt laufen, nur leider macht er es nicht. Hier mal der Code: void init_rpm_mess_ISR(void); void rpm_mess_ISR (void) __attribute__((interrupt("IRQ"))); void init_rpm_mess_ISR() { T1_TCR = 0x02; // disable Timer_1 and reset VICIntEnClr = (1<<5); // disable Timer 1 VIC interrupt PINSEL0 &= ~(3<<20); // reset P0.10 PINSEL0 |= (2<<20); // set P0.10 to Cap1.0 // setting up Timer_1 T1_TC = 0x00; // reset Timer Counter value T1_PC = 0x00; // reset Prescale Counter value T1_PR = 0x00; // set Prescaler Counter T1_CR0 = 0x00; // reset Capture Register T1_CCR = 0x05; // set Cap1.0 to falling edge | set Cap1.0 to interrupt T1_TCR = 0x01; // enable Timer_1 // setting up VIC for Timer_1 VICIntEnClr |= (1<<5); VICIntSelect &= ~(1<<5); // set Timer_1 interrupt to IRQ VICVectAddr2 = (u32)rpm_mess_ISR; // interrupt routine to handle Cap1.0 VICVectCntl2 = 0x20 | 5; // enable VIC 1 and set it to Timer_1 VICIntEnable = (1<<5); // enable Timer_1 VIC interrupt } void rpm_mess_ISR() { PROP_LED_PORT_SET |= PROP_LED; T1_IR = (1<<4); // clear Cap1.0 interrupt VICVectAddr = 0; } Das I-Bit im CPSR ist 0, IRQs sollten also akzeptiert werden. Das Hauptprogramm ruft nur die Initialisierung auf und wartet dann (while(1);) Die Initialisierung wird ordnungsgemäß durchlaufen, nur leider kann ich die Flanken am Eingang ändern wie ich will, es passiert nix. Er springt die Interruptroutine nicht an. So, falls irgendjemand eine Idee hat, woran es liegen kann, immer her damit. Ich such schon seit Tagen. Ach ja, ich verwende Yagarto. Schonmal schönen Danke an die Antworter.
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.