Die kurze (vereinfachte) Variante: bei AVRs ist 1 Cycle = 1 Takt.
Natürlich ist es intern ein klein wenig komplexer, wie auf dem von PicNick verlinkten Bild zu sehen. Denn normalerweise wird während der Ausführung eines Befehls, schon der nächste aus dem Flash geladen. Im Endeffekt spielt das im laufenden Programm dann aber keine wesentliche Rolle mehr, und man kann vereinfacht davon ausgehen daß 1 Cycle = 1 Takt ist.
Natürlich muss man auch aufpassen ob der Takt denn auf seinem Weg von der Takterzeugung zum CPU-Kern irgendwo runtergeteilt wurde (was zählt ist ja der CPU-Takt). Das ist aber meist nicht der Fall (zumindest wenn man den AVR mit einem externen Quarz betreibt).
Betreibst du einen ATmega32 also mit einem 16MHz Quarz, dann kann er pro Sekunde bis zu maximal 16 Millionen Befehle ausführen (üblicherweise wird dieses Maximum natürlich nicht erreicht, da eben nicht alle Befehle nur 1 Cycle brauchen)
Das steht aber auch alles im Datenblatt...
beim ATmega32 z.B. kann man unter "AVR CPU Core" -> "Instruction Execution Timing" folgendes nachlesen:
Und unter "System Clock and Clock Options" -> "Clock Systems and their Distribution" ist z.B. noch ein schönes Blockdiagramm das zeigt wie der Takt überhaupt an die einzelnen Teile des AVR verteilt wird. Auch das kann bei der Beantwortung derartiger Fragen hilfreich sein.The
AVR CPU is driven by the CPU clock clkCPU, directly generated from the selected clock
source for the chip. No internal clock division is used.
Lesezeichen