Fast Interrupt Request(LPC2138)

OP #593807
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
OP #594316
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

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