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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Marcel B. (mabu1)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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. (stefanus)


Bewertung
0 lesenswert
nicht 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).

: Bearbeitet durch User
von AVR-Umsteiger (Gast)


Bewertung
0 lesenswert
nicht 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. (stefanus)


Bewertung
0 lesenswert
nicht 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


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.