Forum: Compiler & IDEs Fast Interrupt Request(LPC2138)


von Mark .. (mork)


Lesenswert?

Hallo,

ich versuche gerade, einen FIQ zu nutzen, was aber nicht funktioniert. 
Der Controller resettet kurz nach dem Aktivieren von fast interrupts 
oder macht irgendwelchen Unsinn. Die entsprechende ISR wird ausgeführt, 
aber das Hauptprogramm läuft nicht richtig. Wenn ich den Interrupt als 
normelen IRQ benutze ist das Poroblem weg. Es sollte aber ein FIQ sein. 
Hier der relevante Teil des Codes:
1
void __attribute__ ((interrupt("IRQ"))) cam_hsync()
2
{
3
  ...
4
  EXTINT=(1<<3);//Flag löschen
5
  //VICVectAddr = 0; // Interrupt im VIC bestätigen
6
}
7
8
...
9
10
int main()
11
{
12
  ...initialisierung und aktivierung von (fast)interrupts...
13
  EXTMODE=(1<<3)|(1<<0);//extInt0 und extint3 edge-sensitive
14
  EXTPOLAR=(1<<3)|(1<<0);//rising edge
15
  VICVectAddr3=(unsigned long)cam_vsync;//für cam vsync, klappt problemlos
16
  VICVectCntl3=(1<<5)|14;//VIC[3]für extint0
17
  //VICVectAddr4=(unsigned long)cam_hsync;
18
  //VICVectCntl4=(1<<5)|17;
19
20
  VICIntSelect=(1<<17);//int3 als FIQ
21
22
  PINSEL1|=(3<<8)|(1<<0);//pin0.20 als extint3 und pin0.16 als extint0
23
  EXTINT=(1<<3)|(1<<0);//lösche flags
24
  VICIntEnable|=(1<<17)|(1<<14);//aktiviere extint0 und exint3
25
  ...
26
}

Was hab ich da nicht beachtet?

MfG Mark

von Andreas K. (a-k)


Lesenswert?

1) interrupt("IRQ") != interrupt("FIQ")

2) Bei FIQs reicht der VIC nur das Signal weiter, nicht die 
Handler-Adresse. Für die ist der übliche ARM-Vektor zuständig. Wie sich 
das real umsetzt, weiss nur deine Laufzeitumgebung (startup code).

von Mark .. (mork)


Lesenswert?

Hallo,

danke für die Antwort.

1.Hab ich probiert. Geht aber nur dann, wenn das Hauptprogramm ncihts 
macht, also while(1); Sobald es was macht, macht der Controller nur 
mist.

2.das ist mir schon klar. In dem Spartup-Code hab ich auch die Funktion 
als Vektor eingetragen. Diese wird auch angesprungen, allerdings nur ein 
einziges mal. Was dannach kommt ist undefiniert.

MfG Mark

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
Noch kein Account? Hier anmelden.