wieviele Taktzyklen bis in Interrupt?

Gast #90869
Hallo,

in dem 349 Seiten starken Datenblatt des mega16 steht bereits auf Seite
16 ein eigenes Kapitel "Interrupt response time", in dem die Sache
erklärt ist.
Bis zum Schluß braucht man also gar nicht zu lesen, nützt aber immer.
Link gibt's hier unter "Datenblätter". Die Anzahl Taktzyklen kann
man auch im Simulator ausprobieren.

GRuß
Gast #90870
Wenn ich rate, würde ich sagen: einen.

Aber  es wird (wenn du in C programmierst) in der IR noch einiges
gemacht (Register sichern), bevor deine erste Zeile Code abgearbeitet
wird.
Sieht man schön im Assembler Listing.
Gast #90871
Hi!

S. 13 des ATMega16 Datenblattes sagt dazu folgendes:

>Interrupt Response Time
>
>The interrupt execution response for all the enabled AVR interrupts
>is four clock cycles minimum.
>After four clock cycles the program vector address for the
>actual interrupt handling routine is executed.
>During this four clock cycle period, the Program Counter is pushed
>onto the Stack.

Gruß,
Patrick...
Gast #90873
Wenn er es nicht mehr nachschauen muß, benötigt der hmann vielleicht
noch eine Übersetzung.

Und der momentane Befehl wird noch zu Ende gemacht. Und manche Befehle
dauern länger als 1 Takt. Oder?

Gruß
Gast #90874
>Aber  es wird (wenn du in C programmierst) in der IR noch einiges
>gemacht (Register sichern), bevor deine erste Zeile Code abgearbeitet
>wird.
>Sieht man schön im Assembler Listing.

Kleiner Tip:
Im IR möglichst KEINE ander Funktion aufrufen, sondern Spagetticode
schreiben. Dann kann der gcc das Sichern der Register optimieren und
muss nicht alle wegspeichern. I.d.R. werden dann nur 3-4 Register
gespeichert statt alle 32.

Stefan
Gast #90875
um noch ein wenig zur Verwirrung beizutragen:
Da ein Interrupt asynchron zum Takt auftreten kann ist die erste
variable Zeit: 0 bis 1 Taktzyklus.
Dazu kommen noch die bereits genannten vier Zyklen und die Abarbeitung
des aktuellen Befehls (ein bis zwei Zyklen).
Zusätzlich sind noch ein paar Zyklen zum Register retten udgl.
einzurechnen.
Bei assembler-Programmen kann man mit etwa 15 Taktzyklen rechnen. Dazu
kommen noch max. 1,99999 Taktzyklen, die leider nicht vorhersagbar
sind. Wenns Timing sehr kritisch ist kann man den uP vor Auftreten des
Ints schlafen schicken, dann reduziert sich der Fehler auf +null bis
+0,99999 Taktzyklen.

grüsse leo9

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.