LPC2103 ARM7 IRQ und FIQ Probleme

Gast #990978
Lesenswert?

Guten Abend,

ich klemme gerade hinter µVision und bin etwas genervt.
Ich habe einen FIQ auf den Timer 2 gelegt. Alle x ms wird eine Messung 
durchgeführt und etwas rumgerechnet. Klappt auch wunderbar.
Jetzt wollte ich mit Oversampling arbeiten und nur nach jeder vierten 
Messung die Berechnungen durchführen. Da die Berechnung zu lange dauert, 
um sie im FIQ der Messung durchzuführen habe ich die Berechnung in einen 
Software-Interrupt auslagern wollen. Nach jeder vierten Messung wird am 
Ende des FIQ ein Software-IRQ ausgelöst, der nach dem Beenden der 
FIQ-Routine auch abläuft. Wenn die Samplingrate so gering ist, dass der 
nächste FIQ erst nach der Beendigung der Software-IRQ-Routine ausgelöst 
wird, klappt alles wunderbar. Wird die Samplingrate höher unterbricht 
der FIQ wie geplant den Software-IRQ und geht danach wieder dahin 
zurück, aber am Ende des Software-IRQs wird in den Programmcouter 
0x4000'0004 geladen und das wars.

Initialierung
1
VICIntSelect = 0x04000000;
2
VICIntEnable |= 0x04000000; 
3
VICVectAddr0 = (unsigned int) &filter;
4
VICVectCntl0 = 0x20 | 31; 
5
VICIntEnable |= 0x80000000;

Ende Software-IRQ
1
VICSoftIntClr = 0x80000000;  
2
VICVectAddr = 0;

Ich hoffe auf schnelle Hilfe :-)
Vielen Dank
Henning
#990986
Lesenswert?

Zu Fehlerbeschreibungen mit Codefragmenten dieser Art gibt es eine 
Daumenregel: Läge der Fehler exakt dort wo du ihn vermutest, dann 
hättest du ihn wohl selber schon gefunden. Also solltest du auch jene 
Teile offenlegen, wo du ihn selber nicht unmittelbar vermutest.

Mein erster Gedanke: FIQ Stack zu klein/vergessen und der überlappt 
daher mit den IRQ-Stack.

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