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