Moin,
Ich habe mein System (DSP C6747) auf ECAP Interrupts configuriert um
GPIO Pins zu triggern. Es sind insgesammt 8 GPIO Pins die getriggert
werden muessen. Der ECAP kann selbst hat ja nur einen Output, deshalb
leite ich den ECAP Interrupt Event an die CPU weiter um gleichzeitig 8
Pins zu triggern.
Das Funktioniert jedoch nur bis zu eine Interrupt Frequenz von knapp
200kHz. Schnellere Interrupt Zeiten kann die DSP nicht abarbeiten.
Ich habe es auch mit Timer Interrupts probiert um zu schaun woran es
liegt. Bei Timer Interrupts das gleiche ergebniss, die Interrupts
koennen auch nur bis knapp 200kHz abgearbeitet werden. Die Routine sieht
folgendermassen aus:
interrupt void TIMER0_TINT12_isr()
{
GPIO_OUT_DATA67 = defaultout;
defaultout = defaultout ^ xor1;
xor1 = xor1 ^ xor2;
}
Somit meine Frage, ist es "normal" das die CPU Interrupts nur bis zu
einer gewissen Geschwindigkeit ausgeloest werden koennen?
Hat hier schon jemand hoehere Interrupt Geschwindigkeiten konfiguriert?
Gruss
Kai
Gast
#3237943
Hi, ich kenne diesen Prozessor nicht genau. Es ist aber so, dass der Compiler ohne Optimierung alle möglichen Register auf den Stack speichert, und das kann lange dauern. Falls du es noch nicht probiert hast, kannst du die Optimierung einschalten (Probeweise auf Maximum Speed) und die Zeiten messen. Alternativ kannst du im Assembly-Listung schauen, ob bei der ISR viele PUSHs und POPs (bzw. MOV XXX, SP++) stehen.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.