Mikrovaldiklių programinį modelį sudaro:
procesoriaus vidiniai specialios paskirties registrai, skirti specifinėms funkcijoms atlikti (PC - programos skaitiklis, SR - būsenos registras ir kt.) ir taikomosiose programose dazniausiai naudojami netiesiogiai;
programuotojui laisvai prieinami procesoriaus vidiniai bendros paskirties registrai, (jų skaičius ir registro talpa (palaiko 8, 16 ir daugiau bitų instrukcijas);
pastovios atminties, skirtos programoms saugoti kiekis ir adresų erdvė;
operatyviosios atminties, skirtos duomenims saugoti kiekis ir adresų erdvė;
komandų sistema ir adresavimo rezimai.
Mikrovaldiklių MSP430 procesoriai turi 16 registrų. Visi jie integruoti procesoriaus viduje, tokiu būdu sumazinamas instrukcijos vykdymo laikas. Tai leidzia operacijas is registro į registrą atlikti per vieną taktą. Keturi registrai rezervuoti specialiam naudojimui: komandų skaitiklis PC, steko rodiklis SP, būsenos registras SR ir konstantų generatorius CG. Kiti dvylika registrų yra bendro naudojimo. Visi periferiniai įrenginiai susieti su procesoriumi duomenų ir adresų magistralėmis.
Komandų skaitiklis (PC) nurodo mikrovaldikliui, kokią instrukciją vykdyti ir kuri instrukcija bus vykdoma sekanti. Kiekviena instrukcija naudoja jai reikalingą informacijos kiekį (instrukcijos ilgis gali būti du, keturi, sesi ar daugiau baitų).
Steko rodiklis (SP) naudojamas centrinio procesoriaus valdymui ir nurodo atminties srities, kurioje saugojami laikini duomenys, adresą. Tai gali būti nuoroda centriniam procesoriui, kurioje pertrauktos programos vietoje grįzti is paprogramės arba apdorojus aparatinį pertraukimą. Steko rodiklis gali būti programiniu būdu keičiamas (komandomis CALL, PUSH ir POP), tačiau negalima uzmirsti, kad steko rodiklį naudoja ir centrinis procesorius.
Pozymių registrą sudaro 16 bitų. Tik jaunesnysis baitas registro y 242r1721c ra naudojamas.
7 pav. Pozymių registras
V - persipildymo bitas . Nustatomas į "1", jeigu rezultatas aritmetinės operacijos aritmetinis perpildymas.
SCG1, SCG0 - siais bitais kontroliuojami mikrovaldiklio generatoriaus taktiniai impulsai, naudojami visoje sistemoje.
OscOff - mikrovaldiklio kvarcinio generatoriaus isjungimo bitas . Jeigu nustatytas į "1", kvarcinis generatorius pereina į isjungimo rezimą. Į sį rezimą galima pereiti tik tada, kai sistemoje nenaudojami dazniai ACLK arba MCLK.
CPU Off - centrinio procesoriaus isjungimo bitas. Jeigu nustatytas į "1", centrinio procesoriaus daznis MCLK yra isjungtas.
GIE - (GENERAL INTERRUPT ENABLE) bitas. Jeigu bitas nustatytas į "1", galimi pertraukimai sistemoje. GIE bitas po įvykdyto pertraukimo yra isvalomas "0". Instrukcija RETI GIE bitą atstato į "1".
N - neigiamo operacijos rezultato pozymis. Nustatomas į "1", jeigu įvykdytos operacijos rezultatas yra neigiamas.
Z - nulinio operacijos rezultato pozymis. Nustatomas į "1", jeigu įvykdytos operacijos rezultatas lygus nuliui, priesingu atveju bitas Z isvalomas (t.y. lygus "0").
C - pernesimo į vyresniąją skiltį pozymis sumuojant, arba jei nėra paskolos bito is vyresnės skilties atliekant atimties operaciją.
Konstantų generatoriai CG1 ir CG2 Dazniausiai naudojamos konstantos gali būti generuojamos konstantų registrais R2 ir R3. Generuojamos konstantos suteikia galimybę sutrumpinti instrukcijos vykdymo laiką.
Bendro naudojimo registrai nuo R4 iki R15 Registrus nuo R4 iki R15 vartotojas gali naudoti savo nuoziūra. Į juos talpinti duomenis arba su jais atlikti įvairius veiksmus. Registrai yra valdomi programiniu būdu.
Adresavimo rezimai
Visi septyni adresavimo rezimai naudojami saltinio operando isrinkimui ir keturi adresavimo rezimai naudojami paskirties operando isrinkimui. MSP430 mikrovaldikliuose realizuota ortogonalinė adresavimo sistema, t.y. kiekviena instrukcija gali naudoti bet kurį adresavimo rezimą.
3 lentelė. Adresavimo rezimai
Adresavimo rezimas |
Sintaksė |
Aprasymas ir pavyzdziai |
Registrinis rezimas |
Rn |
Instrukcijoje abu operandai yra registrai. Pvz.: mov R10, R6. |
Indeksinis rezimas |
X(Rn) |
Instrukcijoje operandas randasi adresu (Rn + X). X reiksmė yra saugojama sekančiame zodyje po instrukcijos kodo. Pvz.: add R9, 3(R6). |
Tiesioginis rezimas |
ADDR |
Instrukcijoje operandas randasi adresu (PC + X). X reiksmė yra saugojama sekančiame zodyje po instrukcijos kodo. Pvz.: xor.b R12, Mem_loc. |
Absoliutinis rezimas |
&ADDR |
Instrukcijoje nurodomas absoliutinis adresas. Pvz.: jmp &Service |
Netiesioginis registro rezimas |
@Rn |
Pvz.: mov @R6, R8. Skaičius esantis registre R6 suprantamas, kaip atminties ląstelės adresas ir toje ląstelėje esantys duomenys bus patalpinti į registrą R8. |
Automatinio didinimo rezimas |
@Rn+ |
Pvz.: mov @R6+, R8. Skaičius esantis registre R6 suprantamas, kaip atminties ląstelės adresas ir toje ląstelėje esantys duomenys bus patalpinti į registrą R8, o registro R6 turinys bus padidintas dviem. |
Betarpinės adresacijos rezimas |
#N |
Pvz.: mov #2, R8. Į registrą R8 įrasomas skaičius, siuo atveju 2. |
Atminties struktūra mikrovaldiklyje MSP430F449 pateikta 8 pav. Mikrovaldiklio atmintį sudaro operacinė ir pastovioji atmintys. Galimas pastoviosios (flash tipo) atminties skaitymas, rasymas ir trynimo daugkartinės operacijos. Priėjimas prie sios atminties yra apsaugotas nuo atsitiktinio atminties turinio trynimo. Mikrovaldiklio atmintį sudaro:
32 B Flash atminties, skirti pertraukimo vektoriams. Atminties adresai nuo 0FFE0h iki 0FFFFh.
60 KB Flash atminties yra suskirstyti į 78 segmentus po 512 baitų. Nuo 0 iki 76 segmento Flash atmintis gali būti trinama individuliai arba kaip grupė segmentų nuo 0 iki 76. Atminties adresas nuo 01100h iki 0FE00h.
Informacinė atmintis yra dviejų segmentų A ir B po 128 B Flash atminties. Si atmintis gali būti trinama individualiai arba kaip grupė segmentų kartu su Flash atminties segmentais. Atminties adresas nuo 01000h iki 010FFh.
0FFFFh |
Pertraukimo |
0FFE0h |
vektoriai |
0FFDFh | |
60KB |
|
Flash |
|
atminties |
|
segmentai 0 - 77 |
|
01100h | |
010FFh | |
2x128 B |
|
Flash |
|
atminties |
|
segmentai A, B |
|
01000h | |
0FFFh |
1 KB, ROM |
uzkrovimo |
|
0C00h |
programa |
09FFh | |
2 KB, RAM |
|
0200h | |
01FFh |
16 bitų |
0100h |
periferijos moduliai |
00FFh |
8 bitų |
0010h |
periferijos moduliai |
000Fh |
SFR - specialios |
paskirties |
|
0000h |
registrai (8 bitų) |
8pav. Mikrovaldiklio MSP430F449 atminties struktūra
1 KB uzkrovimo programa is pastoviosios ROM atminties. Atminties adresas nuo 0C00h iki 0FFFh.
2 KB operatyvinės (RAM) atminties. Galimas atminties įrasymas, skaitymas ir trynimas. Atminties adresas nuo 0200h iki 09FFh.
256 B atminties, isskirti periferiniams moduliams, kurie valdomi per 16 bitų duomenų magistralę (taimeriai). Atminties adresas nuo 0100h iki 01FFh.
240 B atminties, isskirti periferiniams moduliams, kurie valdomi per 8 bitų duomenų magistralę (P1, P2 įėjimai - isėjimai ). Atminties adresas nuo 010h iki 0FFh.
16 B atminties, isskirti specialios paskirties registrams (SFR). Atminties adresas nuo 0000h iki 000Fh.
MSP430 seimos Assembler-io programavimo kalba
MSP430 seimos kontrolerių Assembler-io kalbą sudaro 51 instrukcija, is kurių 27 pagrindinės ir 24 emuliuojančios. Procesoriaus greitaveika priklauso nuo individualių instrukcijų, nuo instrukcijų formato ir adresavimo metodo bei ciklų skaičiaus reikalingų įvykdyti tam tikrai instrukcijai (komandai).
4 lentelė. MSP430 serijos mikrovaldiklio instrukcijų sąrasas
INSTRUKCIJA |
PAAISKINIMAI |
POZYMIS |
||||
V |
N |
Z |
C |
|||
ADC(B) dst |
dst + C → dst |
x |
x |
x |
x |
|
ADD(B) src, dst |
src + dst → dst |
x |
x |
x |
x |
|
ADDC(B) src, dst |
src + dst + C → dst |
x |
x |
x |
x |
|
AND(B) src, dst |
src AND dst → dst |
x |
x |
x |
||
BIC(B) src, dst |
(NOT src) AND dst → dst | |||||
BIS(B) src, dst |
src OR dst → dst | |||||
BIT(B) src, dst |
src AND dst |
x |
x |
x |
||
BR(B) dst |
Programos atsaka į dst | |||||
CALL dst |
PC + 2 →TOS, dst → PC | |||||
CLR(B) dst |
0 → dst | |||||
CLRC |
0 → C | |||||
CLRN |
0 → N | |||||
CLRZ |
0 → Z | |||||
CMP(B) src, dst |
dst - src |
x |
x |
x |
x |
|
DADC(B) dst |
dst + C → dst (decimally) |
x |
x |
x |
x |
|
DADD(B) src, dst |
src + dst + C → dst (decimally) |
x |
x |
x |
x |
|
DEC(B) dst |
dst - 1 → dst |
x |
x |
x |
x |
|
DECD(B) dst |
dst - 2 → dst |
x |
x |
x |
x |
|
DINT |
Gesinami pertraukimai | |||||
EINT |
Leidziami pertraukimai | |||||
INC(B) dst |
dst + 1 → dst |
x |
x |
x |
x |
|
INCD (B) dst |
dst + 2 → dst |
x |
x |
x |
x |
|
INV (B) dst |
Invertuojamas dst |
x |
x |
x |
x |
|
JC/JHS label |
Persokti į zymeklį (label), jei C = 1 | |||||
JEQ/JZ label |
Persokti į zymeklį (label), jei Z = 1 | |||||
JG label |
Persokti į zymeklį , jei (N xor V) = 0 | |||||
JL label |
Persokti į zymeklį , jei (N xor V) = 1 | |||||
JMP label |
Besąlygiskai persokti į zymeklį (label) | |||||
JN label |
Persokti į zymeklį (label), jei N = 1 | |||||
JNC/JLO label |
Persokti į zymeklį (label), jei C = 0 | |||||
JNE/JNZ label |
Persokti į zymeklį (label), jei Z = 0 | |||||
MOV(B) src, dst |
src → dst | |||||
NOP |
Jokia operacija nevykdoma | |||||
POP(B) dst |
@SP → dst, SP + 2 → SP | |||||
PUSH(B) src |
SP - 2 → SP, src → @SP |
| ||||
RETI |
TOS → SR, SP + 2 → SP TOS → PC, SP + 2 → SP |
x |
x |
x |
x |
|
RET dst |
Sugrįzimas is paprogramės TOS → PC, SP + 2 → SP | |||||
RLA(B) dst |
MSB ← MSB-1 . LSB ← 0 |
x |
x |
x |
x |
|
RLC(B) dst |
C ← MSB . LSB ← C |
x |
x |
x |
||
RRA(B) dst |
MSB → MSB, MSB → MSB-1. LSB → C |
x |
x |
x |
x |
|
RRC(B) dst |
C → MSB . LSB → C |
x |
x |
x |
x |
|
SBC(B) dst |
dst - C → dst |
x |
x |
x |
x |
|
SETC |
1 → C | |||||
SETN |
1 → N | |||||
SETZ |
1 → Z | |||||
SUB(B) src, dst |
dst - src → dst |
x |
x |
x |
x |
|
SUBC(B) src, dst |
dst - src - 1 + C → dst |
x |
x |
x |
x |
|
SWPB dst |
Sukeisti baitus vietomis | |||||
SXT dst |
Bit1 ... Bit7 → Bit8 ... Bit15 |
x |
x |
x |
||
TST(B) dst |
Patikrinimas |
x |
x |
x |
x |
|
XOR(B) dst |
src XOR dst → dst |
x |
x |
x |
x |
Sutrumpinimų, naudojamų lentelėje paaiskinimai: Source (src.) - duomenų saltinis, Destination (dst.) - galutinis operacijos rezultatas, Program Counter (PC) - komandų skaitiklis. Stack Pointer (SP) - steko rodiklis. Status Register (SR) - pozymių registras. Top Of Stack (TOS) - duomenys steko virsuje, MSB - didziausios vertės bitas, LSB - maziausios vertės bitas.
Pozymio registro bitai: V - persipildymo pozymis, N - neigiamas pozymis, Z - nulio pozymis, C - pernesimo pozymis. "x" - reiskia, kad įvykdzius komandą pozymių registro bitai keičiasi, "-" liko nepakitę, "*" - emuliuojamos komandos.
|