Dies ist eher eine theoretische Frage ... (Auch meine erste zu Stack Overflow)
Ich frage mich, was mit den Registern des Atmel AVR-Mikrocontrollers (dh ATTINY85) während eines Mehrzyklusbefehls passiert.
Das heißt, es ADIW
dauert zwei Zyklen, um einem Zwei-Byte-Register (Wortregister) ein Sofortregister hinzuzufügen.
Ich stelle mir vor, dass während des ersten Zyklus eines der Bytes bearbeitet wird und dann im nächsten Zyklus das andere Byte bearbeitet wird. Aber ist dieser Prozess überall dort definiert, wo ich lesen kann? Und was ist mit den anderen Mehrzyklusanweisungen?
Im Wesentlichen interessiert mich der Zustand des Mikrocontrollers nach jedem einzelnen Zyklus, auch innerhalb von Anweisungen mit mehreren Zyklen.
assembly
microcontroller
avr
voltage
oscilloscope
microcontroller
led
transistors
resistors
integrated-circuit
led
resistors
ohms-law
usb
resistors
lithium-ion
electromagnetism
generator
filter
arduino
current
pwm
signal
filter
power
voltage
digital-logic
multiplexer
inverter
input
transistors
low-voltage
power
batteries
power-electronics
lipo
frequency
series
fourier
digital-logic
integrated-circuit
flipflop
mips
amplifier
led
current-source
interrupts
8051
memory
ram
arm
display
tft
rf
antenna
433mhz
memory
microprocessor
power-supply
efficiency
memory
microcontroller
fpga
pcb
pcb-design
kicad
eda
voltage
mosfet
current-mirror
microcontroller
flipflop
home-automation
multimeter
inductor
wire
inductance
coil
Tristan
quelle
quelle
ADIW
das untere Ergebnisregister nach dem ersten Zyklus und das obere Ergebnisregister nach dem zweiten Zyklus aktualisiert werden. Dazu habe ich die MCU manuell extern über den Ausgang eines anderen Chips getaktet und die ursprüngliche MCU in der Mitte desADIW
Befehls zurückgesetzt. Beim Zurücksetzen testete die MCU dann ihre niedrigeren und höheren Ergebnisregister, und interessanterweise wurde nur das niedrigere Ergebnisregister aktualisiert. Wenn ich stattdessen die MCU nach der vollständigenADIW
Anweisung zurücksetze , wurden sowohl das niedrigere als auch das höhere Ergebnisregister aktualisiert.Antworten:
Hier ist meine Interpretation:
Damit ein 8-Bit-uC 16-Bit-Berechnungen durchführen kann, muss er zuerst die niedrigstwertigen Bits berechnen und dann zu den höchstwertigen Bits wechseln. Der erste Zyklus addiert also 8-Bit mit einem Übertrag und addiert dann diesen Übertrag zu den höheren 8 -Bits.
Im abstrakten Sinne kann 8-Bit keine 16-Bit-Berechnung in einem einzelnen Befehl durchführen, da sich die Ergebnisse gegenseitig beeinflussen.
quelle