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