| Next revision | Previous revision |
| fr:avr:architecture [2010/03/18 15:49] – créée sdeniaud | fr:avr:architecture [2020/07/20 09:00] (current) – external edit 127.0.0.1 |
|---|
| ===== Instruction ===== | ===== Instruction ===== |
| |
| L'AVR a deux étapes d'instructions. Lorsqu'une instruction est executée, la suivante est rapportée de la mémoire du programme. C'est pourquoi réaliser des instructions de saut prend 2 cycles sur l'accomplissement de la condition de saut. Puisque la nouvelle instruction est toujours allée chercher à l'adresse de mémoire suivante, il est nécessaire de renoncer à l'instruction précédente pour permettre d'aller chercher une nouvelle en sautant à une autre adresse, parce qu'il a été allé chercher une ancienne, à un faux emplacement. | L'AVR a deux étapes d'instructions. Lorsqu'une instruction est exécutée, la suivante est rapportée de la mémoire du programme. C'est pourquoi réaliser des instructions de saut prend 2 cycles sur l'accomplissement de la condition de saut. Puisque la nouvelle instruction est toujours allée chercher à l'adresse de mémoire suivante, il est nécessaire de renoncer à l'instruction précédente pour permettre d'aller chercher une nouvelle en sautant à une autre adresse, parce qu'il a été allé chercher une ancienne, à un faux emplacement. |
| |
| ===== General purpose registers ===== | ===== Objectif général d'un registre ===== |
| |
| General purpose registers R0-R31 are like buffers for storing and operating with memory and peripheral data. They simplify the architecture of the processor, because they are quickly accessible by the ALU and the use of the data bus to read operands from the memory is not necessary for every operation. General purpose registers are used for performing all data-related arithmetical and logical operations. | Le but général d'un registre R0-R31 est proche de celui d'un buffer pour stocker et traiter a la fois avec la mémoire et des données externes. Ils simplifient l'architecture du processeur, parce qu'ils sont rapidement accessibles par l'ALU et l'utilisation du bus de données pour lire des opérandes de la mémoire n'est pas nécessaire pour chaque opération. Les objectifs des registres sont utilisés pour exécuter toutes les opérations arithmétiques et logiques concernant les données. |
| |
| While programming in assembler, it is possible to store the urgent data in general purpose registers. While programming in C and a need to store a variable in a general purpose register arises, the variable is additionally defined as "register". | En programmant dans l'assembleur, il est possible de stocker les données urgentes dans des registres de but généraux. En programmant en C il apparaît un besoin de stocker une variable dans un registre, la variable est de plus définie comme "le registre". |
| For example: | Par exemple: |
| |
| <code c> | <code c> |
| </code> | </code> |
| |
| ===== Instruction set ===== | ===== Instructions de configuration ===== |
| |
| The instruction set of most AVRs consists of 90-133 different instructions. ATmega128 has 133 instructions. Instructions have either one, two or no operands. Most instructions take only one cycle to complete, but the more complex ones can use up to 5 cycles. For XMega, the successor of AVR, several instructions have been modified to use less cycles. Most instructions in AVR are used for jumps, moving and comparing data and executing arithmetic calculations. A status register is used for performing calculations and comparisons. It stores the output status of the ALU - whether the result was negative, positive, zero, exceeded the maximum allowed value (8 bits), needed to transfer a bit to the next operation etc (there are a few more complex cases). | Les instructions de la plupart des AVRS consistent en 90-133 instructions différentes. ATmega128 a 133 instructions. Les instructions ont un, deux ou aucun opérande. La plupart des instructions prennent seulement un cycle pour être achevé, mais les plus complexes peuvent utiliser jusqu'à 5 cycles. Pour XMEGA, le successeur d'AVR, plusieurs instructions ont été modifiées pour utiliser moins de cycles. La plupart des instructions dans AVR sont utilisées pour des sauts, des déplacements et des comparaisons des données et exécutant des calculs arithmétiques. Un registre de statut est utilisé pour des calculs performants et des comparaisons. Il stocke le statut de sortie de l'ALU - si le résultat est négatif, positif, zéro, a excédé le maximum permis par la valeur (8 bits), a besoin de transférer un bit vers l'opération suivante etc (il y a quelques cas plus complexes). |
| |
| <box 100% round #EEEEEE|Example> | <box 100% round #EEEEEE|Exemple> |
| |
| This is a piece of code written in Assembler and consists of pure instructions, which adds 5 to the byte at random access memory address $100 (decimal 256). These instructions exist in all AVRs. | Voici un exemple de code rédigé en Assembleur qui contient de simples instructions, qui ajoutent 5 à un bit au hasard dans l'adresse de la mémoire $100 (256 en décimal). Ces instructions existent dans tous les AVR. |
| |
| <code asm> | <code asm> |
| </box> | </box> |
| |
| ===== Program stack ===== | ===== Le programme stack ===== |
| |
| Stack is a data structure, where the last data written to the memory is read out first. AVR's stack can be used while operating with subroutines, interrupts and temporary data. Before executing a subroutine or interrupt, the address in the program counter where the program was interrupted is stored in the stack. When the subroutine or interrupt has finished its execution, this address is read back from the stack and the program continues from the address it left off before. Storing temporary data in the stack is usually used when dealing with shorter chunks of code, which do not require reserved memory throughout the execution of the program. Simpler assembler programs are usually written so that it is not necessary to use the stack, but if the program contains a lot of variables and functions, the compilers automatically make use of it. | Le programme stack est une structure de données, où les dernières données écrites dans la mémoire sont lues d'abord. Le programme stack de l'AVR'S peut être utilisé en opérant avec des sous-programmes, des interruptions et des données temporaires. Avant l'exécution d'un sous-programme ou d'une interruption, l'adresse dans le compteur du programme où le programme a été interrompu est stocké dans le stack. Quand le sous-programme ou l'interruption a terminé son exécution, cette adresse est lue et le programme continue de l'adresse où il a cessée auparavant. Le stockage de données temporaire dans le stack est d'habitude utilisé en traitant avec des morceaux plus courts de code, qui n'utilise pas la mémoire réservée au cours de l'exécution du programme. Des programmes d'assembleur plus simples sont d'habitude écrits pour qu'il ne soit pas nécessaire d'utiliser le stack, mais si le programme contient beaucoup de variables et des fonctions, les compilateurs s'en servent automatiquement. |
| |
| The stack of MegaAVR series microcontrollers is physically located in the random access memory. Some tinyAVR series devices do not have a random access memory at all and the stack is realized as a separate, quite limited memory unit. Typically there are no compilers for devices with no random access memory. | Le stack des micro-contrôleurs de série MegaAVR sont localisés physiquement dans la mémoire vive. Quelques dispositifs de la série tinyAVR n'ont pas de mémoire vive du tout et le stack est traité séparément, l'unité de mémoire assez limitée. Typiquement il n'y a aucun compilateur pour des matériels sans mémoire vive. |
| |
| To program in a high level language (Pascal, C, C++), it is not necessary to be familiar with the inner workings of the microcontroller, because the compiler is capable of selecting general purpose registers and instructions by itself, but knowing what goes on in the controller is certainly beneficial. It is necessary to know the instructions of the microcontroller when developing time-critical applications, where the operations have to be completed in a limited amount of cycles. | Pour programmer dans une langage de plus haut niveau (le Pascal, C, C ++), il n'est pas nécessaire d'être familier avec les fonctions internes du micro-contrôleur, parce que le compilateur est capable de choisir les registres et les instructions séparément, mais savoir ce qu'il se passe dans le contrôleur est certainement avantageux. Il est nécessaire de connaître les instructions du micro-contrôleur en développant des applications critiques en termes de temps, où les opérations doivent être achevées avec une quantité limitée de cycles. |