Hi! Kann mir jemand sagen wieviele Taktzyklen ein Mega16 braucht um in eine Interruptroutine zu springen? danke hmann
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ß
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.
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...
Danke für die Antworten. Obwohls im Datenblatt steht. Steh wohl heute a weng aufm Schlauch. Habs im Datenblatt übersehen. ciao
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ß
>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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.