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
et:avr:architecture [2010/01/27 07:36] mikk.leiniet:avr:architecture [2020/07/20 09:00] (current) – external edit 127.0.0.1
Line 1: Line 1:
 ====== Arhitektuur ====== ====== Arhitektuur ======
- +AVR-il on sisemine 8-bitine andmesiin, mille 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 aadressilt, mille määrab programmiloendur. ALU juurde kuuluvad 32 üldkasutatavat 8-bitist registrit, mida kasutatakse paljude instruktsioonide täitmisel operandidena.
-AVR-il on sisemine 8-bitine andmesiin, kustkaudu 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 Flash-mälu aadressilt, mille määrab programmiloendur. ALU juurde kuuluvad 32 üldkasutatavat 8-bitist registrit, mida kasutatakse paljude instruktsioonide täitmisel operandidena. +
- +
-[{{  :images:avr:avr_atmega128_block_diagram.png?580  |ATmega128 struktuur}}]+
  
 ===== Käsukonveier ===== ===== Käsukonveier =====
  
-AVR-i käsukonveier on kaheastmeline. Samal ajal kui üht instruktsiooni täidetakse, laetakse järgmine instruktsioon programmimälust juba valmis ära. See on ka põhjus, miks siirdekäskude täitmine võtab 2 takti siirdetingimuse täitumisel. Kuna uus instruktsioon laetakse käsukonveierisse alati järgmiselt mäluaadressilt, siis siiretel muule programmiaadressile tuleb eelnevalt laetud instruktsioon minema visata ja uus laadida, sest see oli vanast ehk siis valest kohast laetud.+AVR-i käsukonveier on kaheastmeline. Samal ajal kui üht instruktsiooni täidetakse, laetakse järgmine instruktsioon programmimälust ootele. See on ka põhjus, miks siirdekäskude täitmine võtab 2 takti siirdetingimuse täitumisel. Kuna uus instruktsioon laetakse käsukonveierisse alati järgmiselt mäluaadressilt, siis siiretel muule programmiaadressile tuleb eelnevalt laetud instruktsioon minema visata ja uus laadida, sest see oli vanast ehk siis valest kohast laetud.
  
 ===== Üldkasutatavad registrid ===== ===== Üldkasutatavad registrid =====
  
-Üldkasutatavaid registrid R0-R31 on justkui vahepuhvrid mälu ja perifeeria andmete hoidmiseks ning nendega toimetamiseks. Üldkasutatavad registrid lihtsustavad protsessori arhitektuuri, kuna ALU jaoks on need kiirelt kättesaadavad ja igal arvutusel ei pea operandide lugemiseks mälust andmesiini kasutama hakkama. Üldkasutatavaid registreid kasutatakse kõikide andmetega seotud aritmeetiliste ja loogiliste operatsioonide tegemiseks.+Üldkasutatavad registrid R0-R31 on justkui vahepuhvrid mälu ja perifeeria andmete hoidmiseks ning nendega toimetamiseks. Üldkasutatavad registrid lihtsustavad protsessori arhitektuuri, kuna 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.
  
-Assemblerkeeles programmeerides võib kiiret töötlust vajavaid andmeid üldkasutatavas registrites hoida. Kui programmeeritakse C-keeles ja on soov  kindlasti kasutada üldkasutatavat registrit muutuja hoidmiseks, defineeritakse muutuja täiendavalt "register" tüüpi. Näiteks:+Assemblerkeeles programmeerides võib kiiret töötlust vajavaid andmeid üldkasutatavates registrites hoida. Kui programmeeritakse C-keeles ja on kindel soov muutuja hoidmiseks üldkasutatavat registrit kasutada, defineeritakse muutuja täiendavalt "register" tüüpi. Näiteks:
  
 <code c> <code c>
Line 21: Line 18:
 ===== Käsustik ===== ===== Käsustik =====
  
-Enamiku AVR-ide käsustik koosneb 90-133 erinevast instruktsioonist. ATmega128-l on 133 instruktsiooni. Instruktsioonid on kas ühe, kahe või üldse ilma operandideta. Enamik instruktsioone täidab mikrokontrolleri protsessor ühe takti jooksul, kuid keerukamad kulutavad kuni 5. AVR-i järeltulija XMega puhul on mitmeid instruktsioone täiendatudnii et need kulutavad vähem takte. Suurem osa AVR-i instruktsioonidest on siireteks, andmete liigutamiseks, võrdlusteksloogilisteks ning aritmeetilisteks teheteks. Tehete ja võrdluste puhul on kasutusel olekuregister,kus märgitakse vastavate bittidena ära juhud kui tehte tulemus ALU-s oli negatiivne või positiivne, oli null, ületas maksimaalse võimaliku väärtuse (8-bitti), vajab biti ülekandmist järgmisesse tehtesse ja paaril keerukamal juhul veel.+Enamiku AVR-ide käsustik koosneb 90-133 erinevast instruktsioonist. ATmega128-l on 133 instruktsiooni. Instruktsioonid on kas ühe, kahe või üldse ilma operandideta. Enamik instruktsioone täidab mikrokontrolleri protsessor ühe takti jooksul, kuid keerukamad kulutavad kuni 5 takti. AVR-i järeltulija xmega puhul on mitmeid instruktsioone täiendatud niiet need kulutavad vähem takte. Suurem osa AVR-i instruktsioonidest on siireteks, andmete liigutamiseks, võrdlusteks ja loogilisteks ning aritmeetilisteks teheteks. Tehete ja võrdluste puhul on kasutusel olekuregister, kus märgitakse vastavate bittidena ära juhudkui tehte tulemus ALU-s olinegatiivne või positiivne, null, ületas maksimaalse võimaliku väärtuse (8-bitti), vajas biti ülekandmist järgmisesse tehtesseja veel paaril keerukamal juhul.
  
-==== Näide ====+<box 100% round #EEEEEE|Näide>
  
-Toodud on assembleris ehk puhtalt instruktsioonidena kirjutatud kood, mis liidab muutmälus aadressil $100 (detsimaalarvuna 256) asuvale baidile juurde arvu 5. Kasutatud käsud on olemas kõigil AVR-idel.+Toodud on Assembleris ehk puhtalt instruktsioonidena kirjutatud kood, mis liidab muutmälus aadressil $100 (detsimaalarvuna 256) asuvale baidile juurde arvu 5. Kasutatud käsud on olemas kõigil AVR-idel.
  
 <code asm> <code asm>
Line 31: Line 28:
 lds  r2, $100    ; Baidi laadimine muutmälust registrisse r2 lds  r2, $100    ; Baidi laadimine muutmälust registrisse r2
 add  r2, r1      ; Registrile r2 registri r1 väärtuse liitmine add  r2, r1      ; Registrile r2 registri r1 väärtuse liitmine
-sts  $100, r2    ; Registri r2 väärtuse kirjutamine muutmällu vanale kohale tagasi+sts  $100, r2    ; Registri r2 väärtuse kirjutamine tagasi muutmällu
 </code> </code>
  
-===== Programmi pinumälu =====+</box>
  
-Pinumälu (inglise keeles //Stack//) on andmete ülesehitus, kus viimasena mällu kirjutatud andmed loetakse esimesena välja. AVR-is saab pinumälu kasutada alamfunktsioonide, katkestuste ja ajutiste andmete juures. Alamfunktsioonide ja katkestuste täitmisel lisatakse eelnevalt pinumällu programmiloenduri aadress, mille pealt programm katkes. Kui alamfunktsioon või katkestus on töö lõpetanud, loetakse pinumälust aadress, kust programmi tööd jätkata. Ajutisi andmeid lisatakse pinumällu tavaliselt lühemate programmilõikude juures, mis ei vaja mälu reserveerimist kogu programmi ajaks. Lihtsamad assemblerkeele programmid on kirjutatud üldjuhul nii, et pinumälu ei pea kasutama, kuid selle võtavad kasutusele kompilaatorid kui programmis on palju muutujaid ning funktsioone.+===== Programmi pinumälu =====
  
-MegaAVR-seeria mikrokontrolleritel on pinumälu füüsiline asukoht muutmäluskuid mõnel tinyAVR-seerial muutmälu üldse puudub ja pinumälu tarbeks on spetsiaalne üsna piiratud mahuga mäluSellisteleilma muutmäluta mikrokontrolleritele kompilaatoreid üldjuhul pole.+Pinumälu (inglise keeles //stack//on andmete ülesehituskus viimasena mällu kirjutatud andmed loetakse välja esimesena. AVR-is saab pinumälu kasutada alamfunktsioonide, katkestuste ja ajutiste andmete juures. Alamfunktsioonide ja katkestuste täitmisel lisatakse eelnevalt pinumällu programmiloenduri aadress, mille pealt programm katkes. Kui alamfunktsioon või katkestus on töö lõpetanud, loetakse 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 ajaks. Lihtsamad assemblerkeele programmid on kirjutatud üldjuhul nii, et pinumälu kasutama ei pea, kuid selle võtavad kasutusele kompilaatorid, kui programmis on palju muutujaid ning funktsioone.
  
-Kõrgtaseme keeles (PascalC, C++) programmeerides ei pea otseselt mikrokontrolleri siseeluga kursis olema, sest kompilaator valib ise oma äranägemise järgi üldkasutavaid registreid ja instruktsioone, kuid see teadmine tuleb kasuksOluline on mikrokontrolleri instruktsioone tunda ajakriitilistes rakendusteskus protseduurid peavad toimuma loetud protsessori taktide jooksul.+MegaAVR seeria mikrokontrolleritel on pinumälu füüsiline asukoht muutmäluskuid mõnel tinyAVR seerial muutmälu üldse puudub ja pinumälu tarbeks on spetsiaalne üsna piiratud mahuga mäluSellisteleilma muutmäluta mikrokontrolleritele kompilaatoreid üldjuhul pole.
  
 +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.
et/avr/architecture.1264577801.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