Hi! Ich beschäftige mich jetzt schon eine Weile mit einem ARM LPC1227 (LPCXPresso) Mikrocontroller, nachdem ich mit einem AVR schon erfahrungen gesammelt hatte. Leider hänge ich gerade dabei fest einen hardware interrupt zu programmieren und bin trotz Anleitung und Google Suchen noch nicht darauf gekommen wie das zu bewerkstelligen ist. Ich will per Knopfdruck die LED an PIN 7 (GPIO0) zum leuchten bringen. Dafür habe ich den Schalteraufbau genommen der schon beim AVR funktioniert hat: Ein Schalter mit Kondensator und Widerstand sind an 5V DC angeschlossen (Hardware debounced). leider tut sich da nichts. Wenn ich mit dem Multimeter nachmesse liegen auf dem PIN 3 (GPIO0) 5V und wenn der schalter gedrückt ist 0V. Der Pin soll bei fallender Flanke einen Interrupt auslösen. Hier mein Code (geschrieben in der LPCXPresso IDE): void initGPIO() { LPC_SYSCON->SYSAHBCLKCTRL |= 0xE0010000UL; // GPIO Clock aktivieren LPC_GPIO0->DIR |= 1<<7; // LED is P0_7 LPC_GPIO0->CLR |= 1<<7; //LED PIN auf LOW setzen LPC_GPIO0->DIR &= ~(1<<3); //PIN 3 input(evtl unnötig da input // default) // LPC_GPIO0->IEV |= (1<<3); //ISR bei steigender flanke hat auch //nicht funktioniert NVIC_EnableIRQ(EINT0_IRQn); NVIC_SetPriority(EINT0_IRQn, 1 ); } void PIOINT0_IRQHandler() { LPC_GPIO0->NOT |= 1<<7; //toggle PIN 7 } Bei der Priorität der ISR bin ich mir nicht sicher, soweit ich das verstanden habe gibt es 4 levels (0 - 3). Weiss zufällig noch jemand wie ich dieser ISR den NMI zuweise oder geht das einfach indem man die Priorität auf 0 setzt? Was fehlt hier noch? Ich habe noch kein Register gefunden in dem ich den IRQ für PIN 3 aktivieren kann, soweit ich das mitbekommen habe kann man die ISRs nur für einen Port aktivieren, also hier GPIO0. Jonathan
Must Du noch auf LPCXPresso umändern: Jonathan M. schrieb: > void PIOINT0_IRQHandler() > { > LPC_GPIO0->NOT |= 1<<7; //toggle PIN 7 while(!GPIO0DATA_bit.P0_3); // wait for release Delay(10000); // de-bounce GPIO0IC_bit.P0_3 = 1; // clear irq > } Jonathan M. schrieb: > void initGPIO() > { > LPC_SYSCON->SYSAHBCLKCTRL |= 0xE0010000UL; // GPIO Clock aktivieren > LPC_GPIO0->DIR |= 1<<7; // LED is P0_7 > LPC_GPIO0->CLR |= 1<<7; //LED PIN auf LOW setzen > IOCON_PIO0_3 = 0x10; // pull-up (default) GPIO0DIR_bit.P0_3 = 0; // input (default) GPIO0IS_bit.P0_3 = 0; // edge GPIO0IE_bit.P0_3 = 1; // no mask GPIO0IC_bit.P0_3 = 1; // clear irq > NVIC_EnableIRQ(EINT0_IRQn); > NVIC_SetPriority(EINT0_IRQn, 1 ); > }
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.