Differences

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

Link to this comparison view

Next revision
Previous revision
fr:avr:registers [2010/03/17 11:06] – créée sdeniaudfr:avr:registers [2020/07/20 09:00] (current) – external edit 127.0.0.1
Line 18: Line 18:
 Chaque bouton à une fonction, mais seulement quand il est utilisé correctement. Par exemple, le bouton d'arrêt n'a pas de fonction à moins que la cassette fonctionne - only then will it do something apparent et arrête la lecture. Les boutons avance rapide et rembobinage, d'autre part, peuvent être utilisés à tout moment, parce que la bande peut être orientée dans les deux directions, peu importe si elle fonctionne ou s'est arrêtée. L'enregistrement commence seulement quand les boutons play et enregistrement sont appuyés simultanément. Certains peuvent avoir essayé d'appuyer sur plusieurs ou tous les boutons à la fois - dans ce cas, le lecteur de cassette pourrait faire quelque chose d'inattendu ou mettre tout en pause. Chaque bouton à une fonction, mais seulement quand il est utilisé correctement. Par exemple, le bouton d'arrêt n'a pas de fonction à moins que la cassette fonctionne - only then will it do something apparent et arrête la lecture. Les boutons avance rapide et rembobinage, d'autre part, peuvent être utilisés à tout moment, parce que la bande peut être orientée dans les deux directions, peu importe si elle fonctionne ou s'est arrêtée. L'enregistrement commence seulement quand les boutons play et enregistrement sont appuyés simultanément. Certains peuvent avoir essayé d'appuyer sur plusieurs ou tous les boutons à la fois - dans ce cas, le lecteur de cassette pourrait faire quelque chose d'inattendu ou mettre tout en pause.
  
-Microcontroller registers behave like buttons on a tape player each button does somethingwhen used correctlyBy pressing the wrong buttonsa microcontroller usually won't breakbut it won't work eitherIn realitythere are no buttons in the registersinstead there are whole lot of transistors, which turn the electricity on and offSimpler microcontrollers have 8 transistor-based switches in a single registerA register can be thought of as an 8-bit numberwhere every bit is marked by the state of one of those switchesFor examplea bit value of can mean that the switch is on and that the switch is off.+Les registres du micro-contrôleur se comportent comme des boutons d'un lecteur de cassette - chaque bouton à une fonctionlorsqu'il est utilisé correctementEn appuyant les mauvais boutonsun micro-contrôleur ne se détériorera pasmais il ne fonctionnera pas non plusEn réalitéil n'y a aucun bouton dans les registresau lieu de cela il y une série de transistors, qui s'allument et s'éteignentDes micro-contrôleurs plus simples ont 8 interrupteurs basés sur des transistors dans un registre simpleUn registre peut être imaginé comme un nombre de bitsoù chaque bit marque l'état d'un de ces interrupteurPar exemplela valeur signifie que l'interrupteur est branché et que l'interrupteur est débranché.
  
-[{{  :images:logic:register_buttons_and_bits.png?240|Register'"buttonsand bit values}}]+[{{  :images:logic:register_buttons_and_bits.png?240|Les "boutonsdu registre et la valeur des bits}}]
  
-Since the state of a register's switches can easily be displayed as a number and vice versa, a register can be compared to a memorywhich can hold data in the size of one numberBy this comparisonwe see that registers actually are memory slotsThe difference between a register and a memory slot is that a memory slot only stores the informationbut in a register this information actually controls somethingFor exampleif a binary value of 01100001 is written to a registerthen three imaginary buttons are pressed down and something happens.+Puisque l'état des interrupteurs du registre peut facilement être traité comme un nombre et vice versa, un registre peut être comparé à une mémoirequi peut contenir des données de la taille d'un nombrePar cette comparaisonnous voyons que les registres sont en réalité des créneaux de mémoireLa différence entre un registre et un slot de mémoire est qu’un slot de mémoire stocke seulement les informationsalors que dans un registre ces informations contrôlent en réalité quelque chosePar exemplesi une valeur binaire de 01100001 est écrite à un registrecela signifie que trois boutons imaginaires sont appuyés et quelque chose arrive.
  
-On a tape player it is possible to press each button separatelybut in a register it is more difficult to change the value of one "switchor bit. Typically it is necessary to change the entire content of the registerBefore moving on to bit changingone should know that there are lot of registers in a microcontrollerSome parts of the microcontroller use tens of registers to control themThe variety of registers means that there has to be a way to distinguish between different registers and that is done by naming the registersOne registerfor exampleis called PORTB. Actuallythese names are just to make things easier for the developer and each name corresponds to a numeric address.+Avec un lecteur de cassette il est possible d'appuyer sur chaque bouton séparémentmais dans un registre il est plus difficile de changer la valeur d'un "interrupteurou le bit. Concrètement il est nécessaire de changer le contenu entier du registreAvant le changement de la valeur d'un bit, il faut savoir qu'il y beaucoup de registres dans un micro-contrôleurCertaines parties du micro-contrôleur utilisent des dizaines de registres pour les contrôlerLa variété des registres signifie qu'il y doit avoir une façon de distinguer les différents des registres ce que l'on réalise en les nommantUn registrepar exempleest appelé PORTB. En réalitéces noms doivent juste rendre les choses plus faciles pour le développeur et chaque nom correspond à une adresse numérique.
  
 ===== Usage ===== ===== Usage =====
  
-To write to a register or read a value from itit has to be addressed as a variable in C. The following example demonstrates writing a binary value to an imaginary register REG and then reading it to variable //reg//. Binary values are distinguished by 0b (leading zero), so that the compiler understands the numeric system.+Pour écrire sur un registre ou en lire une valeuril doit être adressé comme une variable dans C. L'exemple suivant montre l'écriture d'une valeur binaire sur un registre imaginaire REG et ensuite sa lecture dans la variable // Reg //. Des valeurs binaires sont distinguées par 0b (zéro), pour que le compilateur comprenne le système numérique.
  
 <code c> <code c>
Line 35: Line 35:
 </code> </code>
  
-There is nothing difficult in writing and reading register values, but it gets little tricky if only a single bit needs to be changedTo change bits, one needs to know how to do binary math and use different numeric systems. It isn't forbidden to deal only with binary numbersbut they can be a bit troublesomebecause binary numbers are quite long, and this is why most people use shorter hexadecimal numbers.+Il n'rien de difficile à écrire et lire les valeurs d'un registre, mais il devient un peu délicat si on doit modifier seulement un bit. Pour modifier des bits, on a besoin d'avoir des connaissances en mathématiques binaires et utiliser des systèmes numériques différents. Il ne serait pas impossible de ne traiter que des nombres binairesmais ils peuvent être un peu ennuyeuxparce que des nombres binaires sont assez longs et c'est pourquoi la plupart des personnes utilisent des nombres hexadécimaux plus courts.
  
-[{{  :images:logic:logic_hexadecimal.png?209|Hexadecimal numbers}}]+[{{  :images:logic:logic_hexadecimal.png?209|Nombres hexadécimaux}}]
  
-In hexadecimalthe numbers are not only and as in binary or to as in decimalbut instead to F. A hexadecimal number consists of four bits. The table on the right shows the binary numbers and their hexadecimal counterpartsBinary numbers are converted to hexadecimal by reading bits four at a timestarting from the lowest rankRanks are read from right to left and their numbers start from 0. For examplethe lowest ranked (rank 0) bit is and the highest (rank 3) is 1. In the previous example, the register's binary value is 01100001, which is 61 in hexadecimal and is written as 0x61 (leading zeroin C.+En hexadécimalles nombres ne sont pas seulement des et des comme dans le fichier binaire ou de à en décimalemais au lieu de cela de à F. Un nombre hexadécimal est composé de quatre bits. La table à droite montre les nombres binaires et leurs équivalents hexadécimauxDes nombres binaires sont convertis en hexadécimal en lisant des bits quatre à la foisen commençant par le rang le plus basLes rangs sont lus de droite à gauche en commençant par 0. Par exemplele bit le plus bas classé (au rang 0) est et le plus haut (au rang 3) est 1. Dans l'exemple précédent, la valeur binaire du registre est 01100001, qui correspond au 61 en hexadécimal et est écrit 0x61 (zéroen langage C.
  
-To change single bits in a number (register, variable or anywhere else for that matterit is necessary to use binary operationsBinary operation is an operation between two binary numberswhere each bit of the numbers is subject to its own logical operationTypically a microcontroller supports four binary operationseach having several namesThe following section describes the logical operation behind each of these four binary operations with a single bit or multpile bits.+Pour changer un bit seul dans un nombre (le registrela variable ou n'importe où autrement à cet égardil est nécessaire d'utiliser des opérations binairesL'opération binaire est une opération entre deux nombres binairesoù chaque bit des nombres sont soumis à leur propre opération logiqueTypiquement un micro-contrôleur supporte quatre opérations binaireschacune ayant plusieurs nomsLa section suivante décrit l'opération logique derrière chacune de ces quatre opérations binaires avec un bit seul ou des bits multiples.
  
-[{{  :images:logic:logic_all_4.png?550  |Negationlogical multiplication, logical addition and exclusive disjunction }}]+[{{  :images:logic:logic_all_4.png?550  |Négation, multiplication logique, addition logique et séparation exclusive}}]
  
-~~PB~~+<pagebreak>
  
-  * **Negation / Inversion** \\ Negation changes the bit's value to its oppositebecomes a and vice versa. In C, negation is marked with "~"+  * **Négation / Inversion** \\ Le négation inverse la valeur du bit, un devient et vice et versa. En C, la négation correspond au symbole "~"
-  * **Logical multiplication Conjunction** \\ When multiplying two bits, the answer is if both bits are and in any other case 0In C, logical multiplication is marked with "&"+  * **Multiplication logiqueConjonction** \\ Lorsqu'on multiplie deux bits, le résultat est lorsque les deux valeurs sont à 1. En C, la multiplication logique correspond au symbole "&"
-  * **Logical addition Disjunction** \\ When adding two bits, the answer is if at least one of the bits is and if both bits are 0. In C, logical addition is marked with "|"+  * **Addition logique Disjonction** \\ Lorsqu'on additionne deux bits, le résultat est lorsqu'au moins une des deux valeurs est à 1, quelle que soit la valeur de l'autre. La valeur est quand les deux bits sont à 0. En C, l'addition logique correspond au symbole "|"
-  * **Exclusive disjunction Exclusive OR / XOR** \\ Exclusive OR operation will return if the two bits differ from each other (one is and the other 0), otherwise the answer is 0. In C, exclusive disjunction is marked with "^".+  * **Disjonction exclusive OU Exclusif / XOR** \\ L'opération du OU Exclusif renvoi lorsque les deux bits on des valeurs différentes (le premier est à 1, le second à 0), sinon l'opération renvoi 0. En C, le OU Exclusif correspond au symbole "^".
  
-This is all one needs to know to change single bits. The theory alone is probably not enoughthough, and that is why there are some typical examples with registers in the next few paragraphs.+C'est tout ce qu'il y a à savoir pour modifier les bits seulsLa théorie seule n'est probablement pas suffisantec'est pourquoi il y a quelques exemples typiques avec des registres dans les paragraphes suivants.
  
 ~~CL~~ ~~CL~~
  
-==== Setting a single bit high ====+==== Mettre un simple bit en valeur haute ====
  
-[{{  :images:logic:op_bit_set.png?230|Setting a single bit high}}]+[{{  :images:logic:op_bit_set.png?230|Mettre un bit en haut}}]
  
-To set one or more bits in a register high (1) a logical addition operation is neededOne of the operands of the operation must be the register and the other a binary numberwhere the only high bit is the one that needs to be set high in the registerThis binary number is called a bitmask. Below is the C code for the operation shown on the right:+Pour mettre un ou plusieurs bits dans un registre en valeur haute (1) une opération d'addition logique est nécessaireUn des opérandes de l'opération doit être le registre et l'autre un nombre binaireoù seul le bit haut est celui qui doit être mis haut dans le registreCe nombre binaire est appelé un bitmask. Ci-dessous le code de C correspondant à l'opération montrée à droite :
  
 ~~CL~~ ~~CL~~
Line 71: Line 71:
 </code> </code>
  
-==== Setting a single bit low ====+==== Mettre un simple bit en valeur basse ====
  
-[{{  :images:logic:op_bit_clear.png?229|Setting a single bit low}}]+[{{  :images:logic:op_bit_clear.png?229|Mettre un bit en bas}}]
  
-To set one or more bits in a register low (0) a logical multiplication operation is neededOne operand of the operation must be the register and the other a bitmask, in which the only low bit is the one that needs to be set low in the registerBelow is the C code for the operation shown on the right:+Pour mettre un ou plusieurs bits dans un registre en valeur basse (0) une opération de multiplication logique est nécessaireUn des opérandes de l'opération doit être le registre et l'autre un bitmask, où seul le bit bas est celui qui doit être mis bas dans le registreCi-dessous le code de C correspondant à l'opération montrée à droite :
  
 ~~CL~~ ~~CL~~
Line 86: Line 86:
 </code> </code>
  
-~~PB~~+<pagebreak>
  
-==== Inverting a single bit ====+==== Inverser la valeur d'un bit ====
  
-[{{  :images:logic:op_bit_invert.png?229|Inverting a single bit}}]+[{{  :images:logic:op_bit_invert.png?229|Inverser la valeur d'un bit}}]
  
-To invert one or more bits in a register an exclusive disjunction operation is requiredOne of the operands of the operation must be the register and the other a bitmask, where the only high bit is the one that needs to be inverted in the registerBelow is the C code for the operation shown on the right:+Pour inverser un ou plusieurs bits dans un registre une opération de disjonction exclusive est nécessaireUn des opérandes de l'opération doit être le registre et l'autre un bitmask, où seul le bit bas est celui qui doit être inversé dans le registreCi-dessous le code de C correspondant à l'opération montrée à droite :
  
 ~~CL~~ ~~CL~~
Line 103: Line 103:
 </code> </code>
  
-==== Inverting the whole register ====+==== Inverser tout le registre ====
  
-[{{  :images:logic:op_reg_invert.png?229|Inverting all bits}}]+[{{  :images:logic:op_reg_invert.png?229|Inverser tous les bits}}]
  
-To invert all bits in a register a negation operation is usedThis operation is unarywhich means it has only one operandBelow is the C code for the operation shown on the right:+Pour inverser tous les bits d'un registre on utilise l'opération de négationCette opération est unairece qui signifie qu'elle ne nécessite qu'un seul opérandeCi-dessous le code de C correspondant à l'opération montrée à droite :
  
 ~~CL~~ ~~CL~~
Line 117: Line 117:
 </code> </code>
  
-==== Reading the value of a single bit ====+==== Lire la valeur d'un bit ====
  
-[{{  :images:logic:op_bit_get.png?229|Reading the value of a bit}}]+[{{  :images:logic:op_bit_get.png?229|Lire la valeur d'un bit}}]
  
-To read one or more bits from a register the same operation is required as was used for setting a bit low logical multiplication. One of the operands of the operation must be the register and the other a bitmask, where the only high bit is the one that needs to be read from the registerBelow is the C code for the operation shown on the right:+Pour lire une ou plusieurs valeurs d'un bit d'un registre la même opération que pour mettre un bit en position basse est nécessaire la multiplication logiqueL'un des opérants doit être le registre et l'autre le bitmask, où le seul bit en position haute est celui que l'on doit lire sur le registreCi-dessous le code de C correspondant à l'opération montrée à droite :
  
 ~~CL~~ ~~CL~~
Line 131: Line 131:
 </code> </code>
  
-~~PB~~+<pagebreak>
  
-==== Shifting a bit ====+==== Déplacer la valeur d'un bit ====
  
-Many programming languages actually have a few additional bitwise operationswhich make it easier for the programmersThese are bit shifting operations that shift bits left or right in a binary numberThe main value of shift operations in dealing with registers is their ability to convert bit ranks to bitmasks and vice versa.+Beaucoup de langages de programmation ont en réalité quelques opérations bitwise supplémentairesqui le rendent plus facile pour les programmeursCelles-ci sont des opérations de déplacement de bits qui les déplacent vers la gauche ou vers la droite dans un nombre binaireLa valeur principale de l'opération de déplacement traitant avec des registres est sa capacité à convertir des rangs de bits en bitmasks et vice versa.
  
-[{{  :images:logic:op_bit_shift_left.png?241|Shift left}}]+[{{  :images:logic:op_bit_shift_left.png?241|Déplacement à gauche}}]
  
-The image on the right shows a shift left operationAlthough bit shifting is not a logical operation and has no corresponding symbolin it is marked as "<<"Shift left is used to transform a bit rank to a bitmask. For exampleto get the mask for the 6th bit (NB! rank 5), number has to be shifted left timesThe example operation looks like this in C:+L'image à droite montre une opération de déplacement à gaucheBien que le déplacement de bit ne soit pas une opération logique et n'ait aucun symbole correspondanten il est marqué par "<<"Le déplacement à gauche est utilisé pour transformer le rang d'un bit en un bitmask. Par exemplepour obtenir le masque pour le 6ème bit (NB! Au rang 5), le chiffre doit être déplacé de fois vers la gaucheL'opération en ressemble à ça:
  
 ~~CL~~ ~~CL~~
Line 148: Line 148:
 </code> </code>
  
-[{{  :images:logic:op_bit_shift_right.png?241|Shift right}}]+[{{  :images:logic:op_bit_shift_right.png?241|Déplacement à droite}}]
  
-Shift right operation works similarly to shift left operationIt is marked as ">>" in C. Right shift is used to get the logical value of a bit from a bitmask. A leading example showed how to read the value of a single bit. Let'suppose the bit to read is not of the lowest rankbut for example of rank 5. In this case, the result would be either 0x20 or 0x00, but sometimes a result of 1 or is needed and that is when the right shift comes to the rescue. The example operation on the right looks like this in C:+L'opération de déplacement à droite fonctionne de la même manière que celle à gaucheElle est représentée par le symbole ">>" en langage C. Le déplacement à droite est utilisé pour récupérer la valeur logique d'un bit à partir d'un bitmask. Un exemple principal montre comment lire la valeur d'un bit simpleCe qui suppose que le bit qui doit être lu n'est pas à son rang le plus basmais par exemple au rang 5. Dans ce cas le résultat pourrait à la fois être 0x20 ou 0x00, mais parfois il est nécessaire d'avoir ou ou 1 comme résultat, c'est dans ce cas que l'on utilise le décalage à droite. L'opération en ressemble à ça:
  
 ~~CL~~ ~~CL~~
Line 160: Line 160:
 </code> </code>
  
-If a bit is shifted right from the lowest rank or left from the highest rank by the bit shifting operationit disappearsSome programming languages also have rotating bit shift operationswhere the bit doesn't disappearbut moves from the lowest rank to the highest or vice versa. C doesn't have that kind of bit shift operationsbut they can be written by the programmer if needed.+Si un bit est déplacé vers la droite à partir du rang le plus bas ou vers la gauche à partir du rang le plus hautalors il disparaîtCertains langages de programmation contiennent des opérations de déplacement de bits rotativesavec lesquelles le bit ne disparaît pasmais se déplace du rang le plus haut vers le rang le plus bas et vice versa. Le langage ne prévoit pas ce type d'opérationmais rien n'empêche le programmeur de l'écrire si nécessaire.
  
-All bit operations work with not only registersbut with variables and constants as well. The latter can of course only be used as operands and not the result.+Toutes les opérations sur les bits ne fonctionne pas seulement avec les registresmais aussi avec les variables ou les constantesCe dernier peut bien sur être utilisé comme opérande et non comme résultat
  
-===== AVR registers =====+===== Les registres AVR =====
  
-To do anything actual with the microcontroller's registersone needs to know how to use that particular microcontrollerEach microcontroller comes with one or several datasheetswhich describe the whole structure and functionality or the microcontrollerThe datasheet also describes the registersThe following will help understand the register descriptions in AVR datasheets.+Pour faire quoi que ce soit avec les registres du micro-contrôleuril est nécessaire de connaître l'utilisation de ce micro-contrôleur en particulierChaque micro-contrôleur est accompagné d'une ou plusieurs fiches techniquesqui décrivent la structure entière et les fonctionnalités du micro-contrôleurLa fiche technique décrit aussi les registresL'exemple suivant permettra de comprendre les descriptions des registres dans les fiches techniques AVR.
  
-[{{  :images:logic:avr_example_register.png?580  |One of AVRs registers from its datasheet}}]+[{{  :images:logic:avr_example_register.png?580  |L'un des registres AVR dans sa fiche technique}}]
  
-The image shows ATmega128 microcontroller'UCSRnA registerwhich stands for "USART Control and Status Register A"This register is used to configure AVR's USART module and read its statesAll AVR register names are written in capital lettersbut as the reader might notice, the register name contains also a lower case n. A lower is used to mark some module'index. Since ATmega128 has 2 almost identical USART modules, they are not described twicebut only once and the must be read as or by the userTherefore ATmega128 has registers UCSR0A and UCSR1A.+L'image montre le registre UCSRnA du micro-contrôleur ATmega128qui supporte "le contrôle USART et le statut du registre A"Ce registre est utilisé pour configurer le module USART de l'AVR afin d'en lire ses statutsTous les noms de registres de l'AVR sont écrits en lettre capitalesmais le lecteur notera que le nom du registre contient la lettre minuscule n. On utilise un minuscule pour identifier l'index du module; Certains ATmega128 contiennent deux modules USART identiquesqui ne sont décrit qu'une seule foisl'utilisateur remplacera alors le par un ou 1. ATmega128 contient donc les deux registres UCSR0A et UCSR1A.
  
-The content of the register is marked by an 8-slot box with a bold line around itEach slot marks one bit. Bit ranks are marked above the box increasing from right to leftSince AVR is an 8-bit microcontrollermost of the registers are 8-bit as wellThere are some exceptions, a few registers are 16-bitbut they actually consist of two 8-bit registersLike each register has nameeach bit in the register has also name just like the buttons on a tape playerEach bit is described in the datasheetBit names are abbreviations as well and the lower must be substituted with the module'index, just like with register namesSome registers don't use all 8 bits, in this case the bit's slot is marked with a hyphen.+Le contenu d'un registre est représenté par une boîte à slots avec une ligne en grasChaque slot représente un bit. Les rangs des bits sont marqués au-dessus de la boîte - en croissant de droite à gauchePuisque AVR est un micro-contrôleur de bitsla plupart des registres sont de bits aussiIl y a quelques exceptions, quelques registres sont de 16 bitsmais ils consistent en réalité en deux registres de bitsComme chaque registre un nomchaque bit dans le registre aussi un nom comme les boutons sur un lecteur de cassetteChaque bit est décrit dans la fiche techniqueLes noms de bit sont des abréviations et la lettre minuscule peut être remplacée par l'index du modulecomme avec les noms de registreQuelques registres n'utilisent pas tous les 8 bits, dans ce cas le slot du bit est marquée avec un trait d'union.
  
-Below the register'bits are two lineswhich state whether the bit is readable (R), writable (W) or both (R/W). For examplethe status bits can't be overwritten and even if it's attempted in the programthe bit will remain unchangedIf the bit is marked as writablereading it will always result in one specific value stated in the datasheetThe second line specifies the default value of the bit, which it has after the reset of the microcontroller.+Au-dessous des bits du registre on trouve deux lignesqui définissent si le bit est en lecture (R), en écriture (W) ou les deux (R/W). Par exempleles bits de statut ne peuvent pas être écrasés et même s'il est essayé dans le programmele bit restera inchangéSi le bit est marqué en écriturela lecture aboutira toujours à une valeur spécifique définie dans la fiche techniqueLa deuxième ligne spécifie la valeur par défaut du bit, valeur prise après chaque remise à zéro du micro-contrôleur.
  
-While AVR register names point to an actual memory slot addressthe bit names hold the rank number of the corresponding bit. Therefore it is necessary to transform the names to bitmasks using a shift operationin order to manipulate with bits in a registerThe following code contains a few example lines for using the USART 0 module's register.+Tandis que le de noms des registres de l'AVR pointent vers une adresse de slot de mémoire réelleles noms de bits gardent le numéro du rang du bit correspondantDonc il est nécessaire de transformer les noms en bitmasks en utilisation d'une opération de déplacementpour manipuler les bits dans un registreLe code suivant contient quelques lignes d'exemple pour utiliser le registre du module USART 0.
  
 <code c> <code c>
fr/avr/registers.1268823980.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