Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
de:avr:architecture [2010/10/15 09:46] Wemberde:avr:architecture [2020/07/20 09:00] (current) – external edit 127.0.0.1
Line 1: Line 1:
 ====== Architektur ====== ====== Architektur ======
  
-Der AVR hat einen internen 8-Bit Daten-Bus, durch den die Daten zwischen der arithmetisch-logischen Einheit (ALU), Status Register (SREG), Befehlszähler (PC), Random-Access-Memory (SRAM), und Peripherals. Das Programm, eine Reihe an Befehlen, die in der ALU ausgeführt werden, kommen von einer Adresse im Flash-Speicher, spezifiziert vom Befehlszähler. Der ALU hat 32 8-bit Mehrzweckregister, welche als Operanden genutzt werden ,wenn Befehle ausgeführt werden.+Der AVR hat einen internen 8-Bit Daten-Bus, durch den Daten zwischen der arithmetisch-logischen Einheit (ALU), dem Status Register (SREG), dem Befehlszähler (PC), dem Random-Access-Memory (SRAM), und den Peripherieschnittstellen bewegt werden können. Das Programm, eine Reihe an Befehlen, die in der ALU ausgeführt werden, resultiert aus einer Adresse im Flash-Speicher, spezifiziert vom Befehlszähler. Der ALU hat 32 8-bit Mehrzweckregister, welche als Operanden genutzt werden, wenn Befehle ausgeführt werden.
  
 [{{  :images:avr:avr_atmega128_block_diagram.png?580  |Block diagram of ATmega128}}] [{{  :images:avr:avr_atmega128_block_diagram.png?580  |Block diagram of ATmega128}}]
  
-===== Instruction pipeline =====+===== Befehls-Pipeline =====
  
-Der AVR hat eine zwei-Etappen Befehls Pipeline. Während ein Befehl ausgeführt wird, wird der nächste aus dem Programmspeicher geholt. Darum wird beim Ausführen einer "Jump-Instructionzwei Takte benötigt, um die Bedingungen des Jumps zu erfüllen. +Der AVR hat eine zweistufige Befehls-Pipeline. Während ein Befehl ausgeführt wird, wird der nächste aus dem Programmspeicher geholt. Darum sind beim Ausführen einer Jump-Instruction“ zwei Takte notwendig, um die Bedingungen des Jumps zu erfüllen. Neue Befehle werden immer von der nächsten Speicheradresse geholt. Dadurch ist es notwendig die vorherigen Befehle zu löschen und neue zu laden, wenn man zu einer neuen Adresse springt, da der Ort an dem der Befehl geholt wurde nun nicht mehr stimmt.
-Weil die neuen Befehle immer von der nächsten Speicheradresse geholt werden, ist es notwendig die vorherigen Befehle zu löschen und neue zu laden, wenn man zu einer neuen Adresse springt, da der Ort an dem der Befehl geholt wurde nun nicht mehr stimmt.+
  
 ===== Mehrzweckregister ===== ===== Mehrzweckregister =====
Line 14: Line 13:
 Mehrzweckregister R0-R31 sind wie Buffer, um mit Speicher- und Peripheriedaten zu arbeiten und sie zu speichern. Sie vereinfachen die Architektur des Prozessors, weil sie schnellen Zugang der ALU erlauben und der Datenbus nicht immer benutzt werden muss um Operanden aus dem Speicher zu lesen. Mehrzweckregister werden für alle datenbezogenen arithmetischen und logischen Abläufe benutzt. Mehrzweckregister R0-R31 sind wie Buffer, um mit Speicher- und Peripheriedaten zu arbeiten und sie zu speichern. Sie vereinfachen die Architektur des Prozessors, weil sie schnellen Zugang der ALU erlauben und der Datenbus nicht immer benutzt werden muss um Operanden aus dem Speicher zu lesen. Mehrzweckregister werden für alle datenbezogenen arithmetischen und logischen Abläufe benutzt.
  
-Wenn man in Assembler programmiert, ist es möglich die benötigten Daten im Mehrzweckregister zu speichern. Wenn man in C Programmiert und man muss eine Variable im Mehrzweckregister speichern, wird die Variable zusätzlich als "Registerdefiniert. +Wenn man in Assembler programmiert, ist es möglich die benötigten Daten im Mehrzweckregister zu speichern. Programmiert man in C und muss eine Variable im Mehrzweckregister speichern, wird die Variable zusätzlich als Register“ definiert. Zum Beispiel:
-Zum Beispiel:+
  
  
Line 24: Line 22:
 ===== Befehlssatz ===== ===== Befehlssatz =====
  
-Der Befehlssatz der meisten AVRs besteht aus 90-133 verschiedenen Befehlen. +Der Befehlssatz der meisten AVRs besteht aus 90-133 verschiedenen Befehlen. Der ATmega128 hat 133 Befehle. Befehle haben entweder ein, zwei, oder keine Operanden. Die meisten Befehle benötigen nur einen Takt zur Ausführung, komplexere Befehle können jedoch bis zu fünf Taktzyklen benötigen. Für den XMega, den Nachfolger des AVR, wurden viele Befehle modifiziert, damit weniger Taktzyklen genutzt werden. Die meisten Befehle im AVR werden benutzt für Jumps, um Daten zu bewegen und zu vergleichen und um arithmetische Berechnungen auszuführen. Ein Status-Register wird genutzt um Berechnungen und Vergleiche auszuführen. Es speichert den Output-Status der ALU - ob das Ergebnis negativ, positiv, null, den maximal erlaubten Wert (8 Bits) überschreitet, oder einen Bit in die nächste Operation transferieren muss, usw. (Es gibt noch ein paar kompliziertere Fälle).
-Der ATmega128 hat 133 Befehle. Befehle haben entweder ein, zwei, oder keine Operanden. Die meisten Befehle benötigen nur einen Takt zur Ausführung, aber komplexere Befehle können bis zu fünf Taktzyklen benötigen. Für den XMega, den Nachfolger des AVR, wurden viele Befehle modifiziert, damit sie weniger Taktzyklen nutzen. Die meisten Befehle im AVR werden benutzt für Jumps, um Daten bewegen und vergleichen und um Arithmetische Berechnungen auszuführen. +
-Ein Status-Register wird genutzt um Berechnungen und Vergleiche auszuführen. Es speichert den Output-Status der ALU - ob das Ergebnis negativ, positiv, null, den maximal erlaubten Wert (8 Bits) überschreitet, oder einen Bit in die nächste Operation transferieren muss, usw. (Es gibt noch ein paar kompliziertere Fälle)+
 <box 100% round #EEEEEE|Example> <box 100% round #EEEEEE|Example>
  
-Die ist ein Teil eines Codes, welcher in Assembler geschrieben wurdeund beinhaltet pure Befehle, welche eine 5 zum Byte in der RAM-Adresse $100 (dezimal 256) hinzufügt. Diese Befehle gibt es alle im AVR+Die ist ein Teil eines in Assembler geschrieben Codesder bloße Befehle beinhaltetwelcher eine 5 zum Byte in der RAM-Adresse $100 (dezimal 256) hinzufügt. Diese Befehle gibt es alle im AVR.
  
 <code asm> <code asm>
-ldi  r1, 5       ; Load the constant to general purpose register r1 +ldi  r1, 5       ; Lädt die Konstante in das Mehrzweckregister r1 
-lds  r2, $100    ; Load the byte from the memory to register r2 +lds  r2, $100    ; Lädt das Byte aus dem Speicher in das Register r2 
-add  r2, r1      ; Add the value of r1 to r2 +add  r2, r1      ; Fügt den Wert von r1 zu r2 hinzu 
-sts  $100, r2    ; Write the value of r2 back to the memory+sts  $100, r2    ; Schreibt den Wert von r2 zurück in den Speicher
 </code> </code>
  
 </box> </box>
  
-===== Programm stack =====+===== Programmstapelspeicher (stack=====
  
-Ein Stack ist eine Datenstruktur, wo der letzte Wert welcher in den Speicher geschrieben wurde, als erstes ausgelesen wird. Die Stacks im AVR können genutzt werden, wenn man mit Subroutinen, Interrupts und temporären Daten arbeitet. +Ein Stapelspeicher (stack) ist eine Datenstruktur, bei der der letzte in den Speicher geschriebene Wert, als erstes ausgelesen wird. Die Stacks im AVR können genutzt werden, wenn man mit Subroutinen, Interrupts und temporären Daten arbeitet. Bevor eine Subroutine oder ein Interrupt ausgeführt wird,  speichert der Stack die Adresse im Befehlszähler, bei welcher das Programm unterbrochen wurde. Wenn die Subroutine oder der Interrupt ausgeführt wurde, wird die Adresse wieder aus dem Stack gelesen, und das Programm fährt von der Adresse vor der Unterbrechung wieder fort. Das Speichern temporärer Daten im Stack wird normalerweise dann genutzt, wenn man mit kleineren Stücken Code arbeitet, welche keinen reservierten Speicher während ihrer Ausführung benötigen. Einfache Assembler Programme werden normalerweise so geschrieben, dass es nicht notwendig ist, den Stack zu nutzen, aber wenn das Programm viele Variablen und Funktionen enthählt, verwendet der Compiler den Stack automatisch.
-Bevor eine Subroutine oder ein Interrupt ausgeführt wird, die Adresse im Befehlszähler, wo das Programm unterbrochen wurde, wird im Stack gespeichert. Wenn die Subroutine oder der Interrupt ausgeführt wurde, wird die Adresse wieder vom Stack ausgelesen, und das Programm fährt von der Adresse vor der Unterbrechung wieder fort. +
-Das speichern temporärer Daten im Stack wird normalerweise benutzt, wenn man mit kleinen Stücken von Code arbeitet, welche keinen reservierten Speicher während ihrer Ausführung benötigen. Einfache Assembler Programme werden normalerweise so geschrieben, dass es nicht notwendig ist, den Stack zu nutzen, aber wenn das Programm viele Variablen und Funktionen enthählt, macht der Compiler automatisch Gebrauch vom Stack.+
  
-Der Stack der MegaAVR-Serie Microcontroller ist physikalisch im Random-Access-Memory zu finden. Einige tinyAVR-Serie Modelle haben kein Random-Access-Memory und der Stack durch eine kleine separate begrenzte Speichereinheit realisiert. +Der Stack der MegaAVR-Serie ist physikalisch im Random-Access-Memory zu finden. Einige Modelle der tinyAVR-Serie besitzen jedoch keinen Random-Access-Memory sodass der Stack hier durch eine kleineseparate und begrenzte Speichereinheit realisiert. Normalerweise gibt es keinen Compiler für Modelle ohne Random-Access-Memory.
-Normalerweise gibt es keinen Compiler für Modelle ohne Random-Access-Memory.+
  
-Um in einer hochleveligen Sprache zu programmieren (Pascal, C, C++), ist es nicht notwendig, sich mit der inneren Arbeitsweise eine Microcontrollers zu beschäftigen, da der Compiler fähig ist, Mehrzweckregister und Befehle selbst zu wählen. +Um in einer hochleveligen Sprache zu programmieren (Pascal, C, C++), ist es nicht notwendig, sich mit der inneren Arbeitsweise eine Mikrocontrollers zu beschäftigen, da der Compiler in diesem Fall Mehrzweckregister und Befehle selbst auswählen kannEs kann jedoch nur von Vorteil seinzu wissen was in einem Mikrocontroller abläuft. Es ist notwendig die Befehle des Mikrocontrollers genau zu kennen, wenn man zeitkritische Applikationen entwickelt, bei denen die Operationen in einer begrenzten Anzahl an Taktzyklen beendet sein müssen.
-Wenn man jedoch weiß, was in einem Microcontroller passiert, kann das nur zum eigenen Vorteil sein. Es ist notwendig die Befehle des Microcontrollers genau zu kennen, wenn man zeitkritische Applikationen entwickelt, wobei die Operationen in einer begrenzten Anzahl an Taktzyklen beendet sein müssen.+
de/avr/architecture.1287136002.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0