This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| et:avr:architecture [2010/02/09 19:14] – raivo.sell | et:avr:architecture [2020/07/20 12:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== 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. | ||
| + | ===== Käsukonveier ===== | ||
| + | |||
| + | AVR-i käsukonveier on kaheastmeline. Samal ajal kui üht instruktsiooni täidetakse, | ||
| + | |||
| + | ===== Üldkasutatavad registrid ===== | ||
| + | |||
| + | Üldkasutatavad registrid R0-R31 on justkui vahepuhvrid mälu ja perifeeria andmete hoidmiseks ning nendega toimetamiseks. Üldkasutatavad registrid lihtsustavad protsessori arhitektuuri, | ||
| + | |||
| + | 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 " | ||
| + | |||
| + | <code c> | ||
| + | register char x; | ||
| + | </ | ||
| + | |||
| + | ===== 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 takti. AVR-i järeltulija xmega puhul on mitmeid instruktsioone täiendatud nii, et need kulutavad vähem takte. Suurem osa AVR-i instruktsioonidest on siireteks, andmete liigutamiseks, | ||
| + | |||
| + | <box 100% round # | ||
| + | |||
| + | 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> | ||
| + | ldi r1, 5 ; Konstandi 5 laadimine üldkasutatavasse registrisse r1 | ||
| + | lds r2, $100 ; Baidi laadimine muutmälust registrisse r2 | ||
| + | add r2, r1 ; Registrile r2 registri r1 väärtuse liitmine | ||
| + | sts $100, r2 ; Registri r2 väärtuse kirjutamine tagasi muutmällu | ||
| + | </ | ||
| + | |||
| + | </ | ||
| + | |||
| + | ===== Programmi pinumälu ===== | ||
| + | |||
| + | Pinumälu (inglise keeles //stack//) on andmete ülesehitus, | ||
| + | |||
| + | 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. Sellistele, ilma 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, | ||