Forum: Mikrocontroller und Digitale Elektronik Externer Interrupt, Sprung in die Interruptroutine STM32


von Marcel B. (mabu1)


Lesenswert?

Guten Morgen,

ich stelle mir die folgende Frage: Wenn ich einen GPIO Interrupt auf 
beispielsweise eine steigende Flanke setze z.B. bei einem STM32F4, mit 
wie vielen Takten kann ich rechnen, bis der Sprung in die 
Interruptroutine erfolgt? Natürlich unter der Annahme, dass dieser 
Interrupt in dem Augenblick der mit der höchsten Priorität ist.

Viele Grüße
Marcel

von John Doe (Gast)


Lesenswert?

Marcel B. schrieb:
> Guten Morgen,
>
> ich stelle mir die folgende Frage: Wenn ich einen GPIO Interrupt auf
> beispielsweise eine steigende Flanke setze z.B. bei einem STM32F4, mit
> wie vielen Takten kann ich rechnen, bis der Sprung in die
> Interruptroutine erfolgt? Natürlich unter der Annahme, dass dieser
> Interrupt in dem Augenblick der mit der höchsten Priorität ist.


Du brauchst nicht rechnen. Schau einfach in die Doku, da steht das drin!

von Marcel B. (mabu1)


Lesenswert?

John Doe schrieb:
> Du brauchst nicht rechnen. Schau einfach in die Doku, da steht das drin!

Im Reference Manual habe ich keine Angabe dazu finden können, wie lange 
es dauert. Dort steht nur irgendwie dabei, dass der eigentliche 
Interrupt sehr hardwarenah an der CPU stattfindet und dadurch schnell 
ist.

Ich finde die Info nicht, vielleicht übersehe ich sie auch vor lauter 
Reference Manual, Programming Manual und Datenblatt..

von m.n. (Gast)


Lesenswert?

Marcel B. schrieb:
> Im Reference Manual habe ich keine Angabe dazu finden können, wie lange
> es dauert.

Du mußt in den Informationen zum NVIC nachsehen. Ohne selber nachgesehen 
zu haben: 12++ Takte je nach Aktivität, die gerade auf den internen 
Bussen abläuft.

von Marcel B. (mabu1)


Lesenswert?

m.n. schrieb:
> Du mußt in den Informationen zum NVIC nachsehen. Ohne selber nachgesehen
> zu haben: 12++ Takte je nach Aktivität, die gerade auf den internen
> Bussen abläuft.

Danke für den Hinweis, ich habe jetzt nochmal genauer gelesen. Im 
Programming Manual ab Seite 42 unter Exeption Entry ist erkennbar, dass 
zunächst 8 Datenworte in den Stack geschoben werden. Das würde ich also 
als untere Schranke von 8 Takten deuten.

Vielen Dank!

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Im Cortex-M4 Technical Reference Manual (siehe arm.com) stehen wenn ich 
mich recht erinnere 12 Takte. Dazu kommt noch eine etwaige Latenz durch 
die Peripherie von ST.

von Christopher J. (christopher_j23)


Lesenswert?

Ich meine auch 12 Takte + x im Kopf zu haben, wobei ich die genaue 
Quelle nicht mehr parat habe. Eventuell war das aus dem "Definitive 
Guide" von Joseph Yiu den ich auch unbedingt empfehlen kann.

Marcel B. schrieb:
> Danke für den Hinweis, ich habe jetzt nochmal genauer gelesen. Im
> Programming Manual ab Seite 42 unter Exeption Entry ist erkennbar, dass
> zunächst 8 Datenworte in den Stack geschoben werden. Das würde ich also
> als untere Schranke von 8 Takten deuten.

Achtung: Bei verwendung der FPU werden einige Register zusätzlich 
gesichert. Die Latenz erhöht sich dementsprechend.

von Stefan F. (Gast)


Lesenswert?

Christopher J. schrieb:
> Eventuell war das aus dem "Definitive
> Guide" von Joseph Yiu den ich auch unbedingt empfehlen kann.

Und zwar Seite 282, Chapter 8.3.1.

Demnach sind es mindestens 12 Takte (inclusive vector fetch und register 
stacking). Für die FPU kommen weitere 12 Takte dazu, um Speicherplatz 
für das lazy-stacking der FPU Register zu reservieren. Wirklich 
gesichert werden sie erst später, falls sie tatsächlich verwendet 
werden, was innerhalb der ISR weitere Takte in Anspruch nimmt.

Häufig ist es aber mehr, wegen diverser Wait States (auch von der 
vorherigen Operation).

von AVR-Umsteiger (Gast)


Lesenswert?

Stefanus F. schrieb:

> Häufig ist es aber mehr, wegen diverser Wait States (auch von der
> vorherigen Operation).

Kann man eine maximale Dauer angeben wenn sich die ISR im schnellen SRAM 
befindet?

von Stefan F. (Gast)


Lesenswert?

AVR-Umsteiger schrieb im Beitrag #5792252:
> Kann man eine maximale Dauer angeben wenn sich die ISR im schnellen SRAM
> befindet?

Nicht so einfach, weil der Code, der vorher ausgeführt wurde ja 
eventuell im Flash liegt und auf langsame Hardware zugreift (z.B. die 
RTC).

So aus dem Bauch heraus würde ich sagen, dass du insgesamt mit 12 bis 32 
Takten rechnen musst. Warum fragst du eigentlich danach, hast du einen 
Performance-Engpass?

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

AVR-Umsteiger schrieb im Beitrag #5792252:
> Kann man eine maximale Dauer angeben wenn sich die ISR im schnellen SRAM
> befindet?

Achtung, Code aus dem RAM auszuführen kann sogar langsamer sein, weil 
dann sowohl Daten-als auch Code-Zugriffe über den selben Bus gehen. Der 
STM32F4 hat ja auch den ART als Cache für den Flash, der die Laufzeit 
aber undeterministisch machen kann. Die F7 haben einen Extra-RAM für 
Instruktionen, mit eigener Anbindung.

von Marcel B. (mabu1)


Lesenswert?

Stefanus F. schrieb:
> So aus dem Bauch heraus würde ich sagen, dass du insgesamt mit 12 bis 32
> Takten rechnen musst. Warum fragst du eigentlich danach, hast du einen
> Performance-Engpass?

Jein, unsicher, es ist tatsächlich eine zeitkritische Stelle, aber bei 
dieser Abschätzung wohl eher an anderer Stelle zu suchen. Ich kann nur 
aktuell nicht messen, da ich nicht vor Ort sein kann daher die Frage. 
Ich kann keine genauen Details nennen, tut mir leid.

Viele Grüße

Marcel

von m.n. (Gast)


Lesenswert?

Marcel B. schrieb:
> Ich kann keine genauen Details nennen, tut mir leid.

Aber Du könntest dennoch sagen, wieviel Takte Verzögerung die Obergrenze 
wären. Wenn alles nicht hilft, gehe über F7xx zu H7xx µCs. Letztere 
laufen mit 400 MHz doch recht flott.

Es wäre auch zu prüfen, ob ein ext. Interrupt an einem input-capture 
Eingang eines Timers nicht schneller behandelt würde. Nur so als Idee.

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
Noch kein Account? Hier anmelden.