Kann man irgendwie die Interrupt-Latenzzeit beim MSP430 verkürzen?? Momentan liegt sie bei 1 ... 1.3 us, was jedoch ziemlich lange ist. Verwende den internen Oszi mit 16 Mhz. So die hälfte, also rund 0.5 us wären super.
Aus den LPM oder aus dem Active Mode? 500ns wären gerade mal 8 Takte, das wird schon aus dem Active Mode knapp. Sind ja mehrere Pushs und erst mal den aktuellen alten Befehl abarbeiten. Ein Interrupt-Einsprung benötigt mindestens 6 MCLK Zyklen, wenn noch irgendwelche Variablen auf den Stack wandern, noch mehr. Die Abarbeitung des aktuellen Befehls kann ebenfalls bis zu 6 MCLK Zyklen dauern...
Aus dem Active Mode. Compiler: IAR Kickstart V4.11 Sprache: C
@Christian >Die Abarbeitung des aktuellen Befehls kann >ebenfalls bis zu 6 MCLK Zyklen dauern... Das klingt zwar logisch, da ein Befehl max. 6TZ dauern kann. Auf der anderen Seite sagt der User-Guide (Kap.2.2.3), dass in den 6TZ Latenzzeit die Abarbeitung des aktuellen Befehls schon mit drin sei. Was stimmt denn nun ? @U.Nauber Wie schon gesagt wurde, steigt die Latenzzeit mit der Anzahl der Register, die vor dem Aufruf der ISR noch gesichert werden müssen. Eine Möglichkeit das etwas einzudämmen, wäre vielleicht die Benutzung von globalen Variablen in der ISR, da lokale Variablen oft in Registern gehalten werden, die dann eben, um in der ISR "frei" zu sein, vorher gesichert werden müssen. Das Ergebnis kannst Du Dir im Ausgabelisting deiner ISR-Funktion anschauen. Ein schlechtes (Zeit-) verhalten wäre dann z.B.:
1 | __interrupt void TMRA_CCR1_CCR2_Interrupt (void) |
2 | \ TMRA_CCR1_CCR2_Interrupt: |
3 | \ 000000 0A12 PUSH.W R10 |
4 | \ 000002 0B12 PUSH.W R11 |
5 | \ 000004 0D12 PUSH.W R13 |
6 | \ 000006 0C12 PUSH.W R12 |
7 | \ 000008 0F12 PUSH.W R15 |
8 | \ 00000A 0E12 PUSH.W R14 |
9 | // Kostet 6x3TZ = 18TZ extra Zeit!
|
Stefan wrote: > @Christian >>Die Abarbeitung des aktuellen Befehls kann >>ebenfalls bis zu 6 MCLK Zyklen dauern... > Das klingt zwar logisch, da ein Befehl max. 6TZ dauern kann. > Auf der anderen Seite sagt der User-Guide (Kap.2.2.3), dass in den 6TZ > Latenzzeit die Abarbeitung des aktuellen Befehls schon mit drin sei. > Was stimmt denn nun ? Nur 6 Zyklen kann ja nicht sein, denn 6 Zyklen braucht es schon, um das Statusregister und den Stack zu sichern. Dazu kommt auf jeden Fall die Abarbeitung des letzten Befehls, im günstigsten Fall 0 Zyklen, im ungünstigsten halt noch 6 Zyklen. Der Rücksprung dauert ebenfalls mindestens 5 Zyklen. Meist noch viel länger, da wie gesagt meist noch einige Register gesichert und wiederhergestellt werden.
Travel Rec. schrieb: > Übertakten! Bei 16 MHz den MSP430 noch übertakten???? Das geht nicht lange gut, wenn überhaupt! Standart sind 8 MHz!
>Standart sind 8 MHz!
Nicht bei den neuen MSPs
Ansonsten ist der Beitrag aber auch schon etwas älter um darauf zu
antworten ;)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.