Forum: Mikrocontroller und Digitale Elektronik wieviele Taktzyklen bis in Interrupt?


von hmann (Gast)


Lesenswert?

Hi!

Kann mir jemand sagen wieviele Taktzyklen ein Mega16 braucht um in eine
Interruptroutine zu springen?

danke
 hmann

von Chris (Gast)


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ß

von Fritz Ganter (Gast)


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.

von OldBug (Gast)


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...

von hmann (Gast)


Lesenswert?

Danke für die Antworten. Obwohls im Datenblatt steht.

Steh wohl heute a weng aufm Schlauch. Habs im Datenblatt übersehen.

ciao

von Chris (Gast)


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ß

von Stefan Kleinwort (Gast)


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

von leo9 (Gast)


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

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.