wieviele Taktzyklen bis in Interrupt?

Gast #90869
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

>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
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren