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
en:avr:architecture [2010/02/28 14:32] mikk.leinien:avr:architecture [2020/07/20 09:00] (current) – external edit 127.0.0.1
Line 1: Line 1:
 ====== Architecture ====== ====== Architecture ======
  
-AVR-il on sisemine 8-bitine andmesiinmille kaudu liiguvad andmed arvutusüksuse (ALU), olekuregistri (SREG), programmiloenduri (PC), muutmälu (SRAM) ja perifeeria vahel. ALU-s täitmisele minev programm ehk instruktsioonide jada tuleb välkmälu aadressiltmille määrab programmiloendur. ALU juurde kuuluvad 32 üldkasutatavat 8-bitist registritmida kasutatakse paljude instruktsioonide täitmisel operandidena.+AVR has an internal 8-bit data busthrough which the data is moved between the arithmetic logic unit (ALU), status register (SREG), program counter (PC), random access memory (SRAM) and peripheralsThe program, an array of commands that is executed in the ALU, comes from an address in the flash memory, specified by the program counterThe ALU has 32 8-bit general purpose registerswhich are used as operands when carrying out instructions.
  
-[{{  :images:avr:avr_atmega128_block_diagram.png?580  |ATmega128 struktuur}}]+[{{  :images:avr:avr_atmega128_block_diagram.png?580  |Block diagram of ATmega128}}]
  
-===== Käsukonveier =====+===== Instruction Pipeline =====
  
-AVR-i käsukonveier on kaheastmelineSamal ajal kui üht instruktsiooni täidetakselaetakse järgmine instruktsioon programmimälust ooteleSee on ka põhjusmiks siirdekäskude täitmine võtab 2 takti siirdetingimuse täitumisel. Kuna uus instruktsioon laetakse käsukonveierisse alati järgmiselt mäluaadressiltsiis siiretel muule programmiaadressile tuleb eelnevalt laetud instruktsioon minema visata ja uus laadidasest see oli vanast ehk siis valest kohast laetud.+AVR has a two-stage instruction pipelineWhile one instruction is executedthe next is fetched from the program memoryThis is why carrying out jump instructions takes 2 cycles on fulfillment of the jump condition. Since the new instruction is always fetched from the next memory addressit is necessary to discard the previously fetched instruction and fetch a new one when jumping to another addressbecause it was taken from an oldwrong location.
  
-===== Üldkasutatavad registrid =====+===== General Purpose Registers =====
  
-Üldkasutatavad registrid R0-R31 on justkui vahepuhvrid mälu ja perifeeria andmete hoidmiseks ning nendega toimetamiseksÜldkasutatavad registrid lihtsustavad protsessori arhitektuurikuna ALU jaoks on need kiirelt kättesaadavad ja igal arvutusel ei pea operandide mälust lugemiseks kasutama andmesiiniÜldkasutatavaid registreid kasutatakse kõikide andmetega seotud aritmeetiliste ja loogiliste operatsioonide tegemiseks.+General purpose registers R0-R31 are like buffers for storing and operating with memory and peripheral dataThey simplify the architecture of the processorbecause 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 operationGeneral purpose registers are used for performing all data-related arithmetical and logical operations.
  
-Assemblerkeeles programmeerides võib kiiret töötlust vajavaid andmeid üldkasutatavates registrites hoidaKui programmeeritakse C-keeles ja on kindel soov muutuja hoidmiseks üldkasutatavat registrit kasutadadefineeritakse muutuja täiendavalt "register" tüüpiNäiteks:+While programming in assembler, it is possible to store the urgent data in general purpose registersWhile programming in and a need to store a variable in a general purpose register arisesthe variable is additionally defined as "register". 
 +For example:
  
 <code c> <code c>
Line 19: Line 20:
 </code> </code>
  
-===== Käsustik =====+===== Instruction Set =====
  
-Enamiku AVR-ide käsustik koosneb 90-133 erinevast instruktsioonist. ATmega128-l on 133 instruktsiooniInstruktsioonid on kas ühekahe või üldse ilma operandidetaEnamik instruktsioone täidab mikrokontrolleri protsessor ühe takti jooksulkuid keerukamad kulutavad kuni taktiAVR-i järeltulija XMega puhul on mitmeid instruktsioone täiendatud niiet need kulutavad vähem takteSuurem osa AVR-i instruktsioonidest on siireteks, andmete liigutamiseksvõrdlusteks ja loogilisteks ning aritmeetilisteks teheteksTehete ja võrdluste puhul on kasutusel olekuregister, kus märgitakse vastavate bittidena ära juhud, kui tehte tulemus ALU-s oli: negatiivne või positiivnenullületas maksimaalse võimaliku väärtuse (8-bitti), vajas biti ülekandmist järgmisesse tehtesse, ja veel paaril keerukamal juhul.+The instruction set of most AVRs consists of 90-133 different instructions. ATmega128 has 133 instructionsInstructions have either onetwo or no operandsMost instructions take only one cycle to completebut the more complex ones can use up to cyclesFor XMega, the successor of AVR, several instructions have been modified to use less cyclesMost instructions in AVR are used for jumpsmoving and comparing data and executing arithmetic calculationsA status register is used for performing calculations and comparisons. It stores the output status of the ALU - whether the result was negativepositivezero, exceeded the maximum allowed value (8 bits), needed to transfer a bit to the next operation etc (there are a few more complex cases).
  
-<box 100% round #EEEEEE|Näide>+<box 100% round #EEEEEE|Example>
  
-Toodud on Assembleris ehk puhtalt instruktsioonidena kirjutatud koodmis liidab muutmälus aadressil $100 (detsimaalarvuna 256) asuvale baidile juurde arvu 5Kasutatud käsud on olemas kõigil AVR-idel.+This is a piece of code written in Assembler and consists of pure instructionswhich adds 5 to the byte at random access memory address $100 (decimal 256). These instructions exist in all AVRs.
  
 <code asm> <code asm>
-ldi  r1, 5       ; Konstandi laadimine üldkasutatavasse registrisse r1 +ldi  r1, 5       ; Load the constant to general purpose register r1 
-lds  r2, $100    ; Baidi laadimine muutmälust registrisse r2 +lds  r2, $100    ; Load the byte from the memory to register r2 
-add  r2, r1      ; Registrile r2 registri r1 väärtuse liitmine +add  r2, r1      ; Add the value of r1 to r2 
-sts  $100, r2    ; Registri r2 väärtuse kirjutamine tagasi muutmällu+sts  $100, r2    ; Write the value of r2 back to the memory
 </code> </code>
  
 </box> </box>
  
-===== Programmi pinumälu =====+===== Program Stack =====
  
-Pinumälu (inglise keeles //stack//) on andmete ülesehituskus viimasena mällu kirjutatud andmed loetakse välja esimesena. AVR-is saab pinumälu kasutada alamfunktsioonidekatkestuste ja ajutiste andmete juuresAlamfunktsioonide ja katkestuste täitmisel lisatakse eelnevalt pinumällu programmiloenduri aadressmille pealt programm katkesKui alamfunktsioon või katkestus on töö lõpetanudloetakse pinumälust aadress, kust programmi tööd jätkataAjutisi andmeid lisatakse pinumällu tavaliselt lühemate programmilõikude juuresmis ei vaja mälu reserveerimist kogu programmi ajaksLihtsamad assemblerkeele programmid on kirjutatud üldjuhul nii, et pinumälu kasutama ei peakuid selle võtavad kasutusele kompilaatoridkui programmis on palju muutujaid ning funktsioone.+Stack is a data structurewhere the last data written to the memory is read out first. AVR's stack can be used while operating with subroutinesinterrupts and temporary dataBefore executing a subroutine or interruptthe address in the program counter where the program was interrupted is stored in the stackWhen the subroutine or interrupt has finished its executionthis address is read back from the stack and the program continues from the address it left off from beforeStoring temporary data in the stack is usually used when dealing with shorter chunks of codewhich do not require reserved memory throughout the execution of the programSimpler assembler programs are usually written so that it is not necessary to use the stackbut if the program contains a lot of variables and functionsthe compilers automatically make use of it.
  
-MegaAVR seeria mikrokontrolleritel on pinumälu füüsiline asukoht muutmälus, kuid mõnel tinyAVR seerial muutmälu üldse puudub ja pinumälu tarbeks on spetsiaalne üsna piiratud mahuga mälu. Sellisteleilma muutmäluta mikrokontrolleritele kompilaatoreid üldjuhul pole. +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 separatequite limited memory unitTypically there are no compilers for devices with no random access memory.
- +
-Kõrgtaseme keeles (Pascal, C, C++) programmeerides ei pea otseselt mikrokontrolleri siseeluga kursis olema, sest kompilaator valib ise vastavalt vajadusele üldkasutavaid registreid ja instruktsioone, kuid see teadmine tuleb kasuks. Mikrokontrolleri instruktsioone on oluline tunda ajakriitilistes rakendustes, kus protseduurid peavad toimuma loetud protsessori taktide jooksul.+
  
 +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.
en/avr/architecture.1267367527.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