This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revision | |||
| de:avr:architecture [2011/08/11 14:33] – wittkoepper | de:avr:architecture [2020/07/20 12:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Architektur ====== | ||
| + | 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, | ||
| + | |||
| + | [{{ : | ||
| + | |||
| + | ===== Befehls-Pipeline ===== | ||
| + | |||
| + | 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. | ||
| + | |||
| + | ===== Mehrzweckregister ===== | ||
| + | |||
| + | 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, | ||
| + | |||
| + | |||
| + | <code c> | ||
| + | register char x; | ||
| + | </ | ||
| + | |||
| + | ===== Befehlssatz ===== | ||
| + | |||
| + | 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, | ||
| + | <box 100% round # | ||
| + | |||
| + | Die ist ein Teil eines in Assembler geschrieben Codes, der bloße Befehle beinhaltet, welcher eine 5 zum Byte in der RAM-Adresse $100 (dezimal 256) hinzufügt. Diese Befehle gibt es alle im AVR. | ||
| + | |||
| + | <code asm> | ||
| + | ldi r1, 5 ; Lädt die Konstante 5 in das Mehrzweckregister r1 | ||
| + | lds r2, $100 ; Lädt das Byte aus dem Speicher in das Register r2 | ||
| + | add r2, r1 ; Fügt den Wert von r1 zu r2 hinzu | ||
| + | sts $100, r2 ; Schreibt den Wert von r2 zurück in den Speicher | ||
| + | </ | ||
| + | |||
| + | </ | ||
| + | |||
| + | ===== Programmstapelspeicher (stack) ===== | ||
| + | |||
| + | Ein Stapelspeicher (stack) ist eine Datenstruktur, | ||
| + | |||
| + | 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 kleine, separate und begrenzte Speichereinheit realisiert. 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 Mikrocontrollers zu beschäftigen, | ||