LPC2478 (NXP) EINT Probleme

OP #2197775
Lesenswert?

Hallo miteinander,

Ich suche jemanden, der auch den LPC24xx von NXP benutzt und einen 
externen Interrupt (EINT) konfiguriert hat.
Aus irgendeinem Grund funktioniert das bei mir nämlich nicht.
Ich habe schon einige mögliche Fehlerquellen ausgeschlossen:
- Der Pin ist richtig konfiguriert (EINT1)
- Das externe Signal wurde mit Oszilloskop überprüft.
- Bei einer zyklischen Abfrage (alle 250ms) des Pins werden die 
richtigen Pegel erkannt.
- Für das Initialisieren der ISR steht eine Funktion bereit, die auf 
jeden Fall funktioniert.

Trotzdem wird die ISR niemals aufgerufen, wenn ein entsprechender Taster 
betätigt wird.

Es gibt noch 4 weitere Register, die den Betriebsmodus der EINTs 
beeinflussen: EXTINT, INTWAKE, EXTMODE, EXTPOLAR.
Deren Konfiguration sollte aber eigentlich optional sein (soweit ich das 
verstanden habe). Lediglich das EXTINT Register muss zurückgesetzt 
werden um einen erneuten Interrupt zuzulassen (wenn ich das richtig 
verstanden habe).
Trotzdem sollte zumindest der erste Interrupt auf jeden Fall die ISR 
ausführen.

Für einen hilfreichen Tipp wäre ich sehr dankbar.

Gruß, Florian
OP #2198105
Lesenswert?

1
__irq void my_test_isr(void) {  
2
printf("Test isr\n");  
3
VICVectAddr = 0;   
4
}
5

6
//set P2.11 as EINT1
7
PINSEL4 &= ~0x00C00000;
8
PINSEL4 |=  0x00400000;
9

10
//register isr for EINT1
11
install_irq(EINT1_INT, (void *)my_test_isr, HIGHEST_PRIORITY);

Interrupts an anderer Stelle im Code funktionieren problemlos.

Gruß
OP #2198148
Lesenswert?

Hmm, eigentlich möchte ich ja keinen GPIO Interrupt verwenden, sondern 
einen externen. Die GPIO Interrupts sind ja auch mit EINT3 'verbunden' 
(Ich möchte/muss EINT1 benutzen).

Ich werde mal ausprobieren, ob ich mit dem Register etwas erreiche.

Schon mal Danke für den Hinweis,
Gruß
OP #2198955
Lesenswert?

Wie ich schon vermutet habe, sind der GPIO Interrupt und der externe 
Interrupt zwei verschiedene Geschichten.
Dadurch, dass ich mit
1
IO2_INT_EN_F = 0x00000800;
den GPIO für P2.11 aktiviert habe, führt er die isr aus, die mit EINT3 
registriert wurde (EINT3 handelt alle GPIOs).
Da ich da den Interrupt nicht gelöscht habe, wurde er in einer 
Endlosschleife ausgeführt, was den µC zum Absturz brachte.

Immerhin kann ich das jetzt als GPIO realisieren und alles ist gut.
Nochmal Danke für den Hinweis an Stefan.

Trotzdem würde ich gerne wissen warum das als externer Interrupt nicht 
funktioniert. Wenn da jemand noch einen heißen Tipp hat wäre das super.

Danke und Gruß,
Florian
Gast #2205611
Lesenswert?

So, hab es soeben nochmal ausprobiert. Für den EINT0 am LPC2478 setze 
ich nur das PINSEL4, EXTMODE und EXTPOLAR Register (edge sensitive, 
falling edge). War mein Irrtum mit dem oben genannten Register.

Danach noch den Interrupt richtig einhängen (was du ja machst) und dann 
sollte es klappen.

Stefan

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren