MSP430

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită la 2 iulie 2015; verificările necesită 12 modificări .

MSP430 este o familie de microcontrolere  pe 16 biți de la Texas Instruments .

Istoricul creației și caracteristici speciale

Primul controler cu abrevierea MSP430 a apărut în 1992 [1] . TI și-a anunțat dorința de a crea un microcontroler cu un sistem de instrucțiuni apropiat de arhitectura PDP-11 populară în anii 70 și 80 .

Miezul MSP430 este pe 16 biți. Ei au încercat să facă sistemul de comandă cât mai ortogonal posibil cu o varietate de metode de adresare. Ortogonalitatea sistemului de instrucțiuni înseamnă că în orice instrucțiune poate fi folosită orice metodă de adresare a operandului: o constantă, directă dintr-un registru sau memorie, indirectă etc.

La momentul nașterii familiei, accentul principal era pe reducerea consumului de energie. Cu toate acestea, de atunci, economisirea energiei a devenit o idee fixă ​​în tehnologia electronică, iar MSP430 este îndelungat în mod activ pe acest piedestal de către alți producători cu arhitecturi proprii.

Diferența cheie și „cartea de apel” a familiei MSP430 este capacitatea de a tacta orice modul periferic asincron de la nucleu. În marea majoritate a microcontrolerelor cu un singur cip, periferia este sincronă cu nucleul (cu excepția unor noduri speciale). Această caracteristică vă permite să controlați în mod flexibil viteza (și, prin urmare, consumul) fiecărui modul. În plus, modulul de interfață USB este, de asemenea, unic: are un domeniu de alimentare separat, ceea ce simplifică dezvoltarea dispozitivelor alimentate cu baterie cu o interfață USB.

Astăzi, familia MSP430 oferă o gamă largă de microcontrolere cu un singur cip cu memorie flash de la unități de până la 512 kiloocteți și RAM de până la 64 kiloocteți. Viteze de ceas de bază de până la 25 MHz.

Sistemul de comandă MSP430

MSP430 are o arhitectură Von Neumann , cu un singur spațiu de adresă pentru comenzi și date. Memoria poate fi adresată atât octet cu octet, cât și cuvânt cu cuvânt. Ordinea de stocare a cuvintelor pe 16 biți este de la cel mai tânăr la cel mai vechi ( în engleză  little-endian ).

Procesorul conține 16 registre ortogonale pe 16 biți. Registrul R0 este folosit ca un numărător de programe ( Program Counter - PC ), registrul R1 ca un indicator de stivă ( Engleză Stack  Pointer - SP ), registrul R2 ca un registru de stare ( Status Register - SR ) și R3 ca un registru special registru numit generator constant ( ing. Generator constant - CG ), R2 poate fi folosit si ca generator constant. Generatorul de constante este folosit pentru a reduce lungimea totală a instrucțiunii datorită reprezentării implicite a constantei în opcode. Registrele R4 la R15 sunt folosite ca registre de uz general.    

Setul de instrucțiuni este foarte simplu și este reprezentat de 27 de instrucțiuni, 24 de instrucțiuni emulate. Instrucțiunile au atât forme de manipulare a operanzilor de 8 biți (octeți) cât și de 16 biți (cuvânt). Bitul B/N controlează această caracteristică.

Sistem de comandă MSP430
cincisprezece paisprezece 13 12 unsprezece zece 9 opt 7 6 5 patru 3 2 unu 0 Echipă
0 0 0 unu 0 0 opcode alb/negru La fel de Inregistreaza-te Instrucțiuni cu un singur operand
0 0 0 unu 0 0 0 0 0 alb/negru La fel de Inregistreaza-te RRC Rotiți la dreapta prin transport
0 0 0 unu 0 0 0 0 unu 0 La fel de Inregistreaza-te Schimb de octeți SWPB
0 0 0 unu 0 0 0 unu 0 alb/negru La fel de Inregistreaza-te RRA Aritmetică de rotație la dreapta
0 0 0 unu 0 0 0 unu unu 0 La fel de Inregistreaza-te Extensie semn SXT de la octet la cuvânt
0 0 0 unu 0 0 unu 0 0 alb/negru La fel de Inregistreaza-te PUSH Împingeți operandul pe stivă
0 0 0 unu 0 0 unu 0 unu 0 La fel de Inregistreaza-te CALL Apel de subrutină; salvați PC-ul pe stivă și încărcați PC-ul cu noua valoare
0 0 0 unu 0 0 unu unu 0 0 0 0 0 0 0 0 RETI Întoarcere de la întrerupere; Scoateți SR și PC din stivă
0 0 unu condiție offset semn pe 10 biți Ramura condiționată; PC=PC+2×offset
0 0 unu 0 0 0 offset semn pe 10 biți JNE / JNZ Salt dacă nu este_egal/nu_zero
0 0 unu 0 0 unu offset semn pe 10 biți JEQ / JZ Salt dacă este egal/zero
0 0 unu 0 unu 0 offset semn pe 10 biți JNC / JLO Jump if not_carry/below (comparație nesemnată)
0 0 unu 0 unu unu offset semn pe 10 biți JC / JHS Salt dacă este transportat/mai mare sau același (comparație nesemnată)
0 0 unu unu 0 0 offset semn pe 10 biți JN Salt dacă este negativ
0 0 unu unu 0 unu offset semn pe 10 biți JGE Jump dacă mai mare_sau_egal
0 0 unu unu unu 0 offset semn pe 10 biți JL Salt dacă mai puțin
0 0 unu unu unu unu offset semn pe 10 biți JMP Jump (imediat)
opcode sursă Anunț alb/negru La fel de destinaţie Aritmetică cu doi operanzi
0 unu 0 0 sursă Anunț alb/negru La fel de destinaţie MOV Trimite sursa către destinație
0 unu 0 unu sursă Anunț alb/negru La fel de destinaţie ADAUGĂ Adăugați sursa la destinație
0 unu unu 0 sursă Anunț alb/negru La fel de destinaţie ADDC Adăugați source_and_transfer la destinație
0 unu unu unu sursă Anunț alb/negru La fel de destinaţie SUBC Scădere sursa de la destinație (cu transport)
unu 0 0 0 sursă Anunț alb/negru La fel de destinaţie SUB Scădeți sursa din destinație
unu 0 0 unu sursă Anunț alb/negru La fel de destinaţie CMP Comparați (scădeți) sursa cu destinația
unu 0 unu 0 sursă Anunț alb/negru La fel de destinaţie DADD Decimal Adăugarea zecimală a sursei și destinației (cu transport)
unu 0 unu unu sursă Anunț alb/negru La fel de destinaţie BIT Verificare biți (funcționare ȘI) a sursei și a destinației
unu unu 0 0 sursă Anunț alb/negru La fel de destinaţie BIC Bit flush (dest &= ~src)
unu unu 0 unu sursă Anunț alb/negru La fel de destinaţie Setarea biților BIS (SAU logic)
unu unu unu 0 sursă Anunț alb/negru La fel de destinaţie XOR Exclusiv sau sursă-destinație
unu unu unu unu sursă Anunț alb/negru La fel de destinaţie AND Sursă AND logică cu destinație (dest &= src)

Toate instrucțiunile sunt pe 16 biți. 4 metode de adresare a operanzilor, definite pe 2 biți ca câmpul As.

Câmp ca—Înregistrat, indexat, înregistrat indirect, înregistrat indirect cu post-decrementare. Câmpul Anunț definește două metode de adresare - înregistrare și indexare.

MSP430 Mod de adresare
La fel de Inregistreaza-te Sintaxă Descriere
00 n R n Inregistreaza-te. Operandul este conținutul unuia dintre registrele din R n .
01 n x (R n ) index. Operandul este în memorie la adresa R n + x .

Cuvântul X este după comanda curentă.

zece n @Rn _ Registrul indirect. Operandul este localizat în memorie la adresa cuprinsă în registrul R n .
unsprezece n @Rn + _ Registrul indirect cu autoincrementare. În funcție de valoarea bitului B/W, valoarea registrului R n este incrementată după ce operația este finalizată cu 1 sau 2.
Moduri de adresare când utilizați R0 (PC)
01 0 (PC) ETICHETA Relativ (personaj). x(PC) Operandul de memorie la PC+ x .
unsprezece 0 (PC) # x Direct. @PC+ Adresa operandului x-word după instrucțiunea curentă.
Folosind R2 (SR) și R3 (CG), mod special de decodare
01 2 (SR) & etichetă Absolut. Operandul din memorie la adresa luată din x .
zece 2 (SR) #patru Constanta 4.
unsprezece 2 (SR) #opt Constanta 8.
00 3 (CG) #0 Constanta 0.
01 3 (CG) #unu Constanta 1. pentru operaţii cu octeţi.
zece 3 (CG) #2 Constanta 2.
unsprezece 3 (CG) #-unu Constanta −1 sau 0xFFFF.

Mnemonice pentru comenzi emulate

Alte instrucțiuni suportate de asamblatorul MSP430 sunt formate din cele principale și se numesc emulate (metoda de obținere este între paranteze). Numărul total de instrucțiuni emulate acceptate de asamblator este de 24.

CLRZ - Șterge registrul de stare procesor (PSW) Z Flag ( BIC #2,SR ) CLRN - Șterge registrul de stare procesor (PSW) Flag N ( BIC #4,SR ) CLRC - Șterge registrul de stare procesor (PSW) Flag C ( BIC # 1,SR) SETZ - Setați steagul Z al registrului de stare procesor (PSW) ( BIS #2,SR ) SETN - Setați steagul N al registrului de stare procesor (PSW) ( BIS #4,SR ) SETC - Setați steagul C al Registrul de stare procesor (PSW) ( BIS # 1,SR) EINT - activare întreruperi (BIC #8,SR) DINT - dezactivare întreruperi (BIC #8,SR) CLR dst - Șterge operand (MOV #0,dst) TST dst - Verificați operand pentru zero (CMP #0,dst) INV dst - Inversează biții operand (XOR #-1,dst) ADC dst - adăugați transport la operand ( ADDC #0,dst ) DADC dst - adăugați transfer zecimal la destinație ( DADD #0,dst ) SBC dst - scadeți transportul din operand ( SUBC #0,dst) INC dst - increment operand ( ADD #1,dst ) DEC dst - decrement operand ( SUB #1,dst ) INCD dst - creștere cu 2 operanzi ( ADD #2,dst ) DECD dst - scădere cu 2 operanzi ( SUB #2, dst) RLA dst - deplasarea la stânga a operandului, indicatorul de transport este completat de la bitul înalt, iar bitul inferior al rezultatului este -0 ( ADD dst,dst ) RLC dst - deplasarea la stânga a operandului utilizând carry ( ADDC dst,dst ) RET - întoarcere din subrutină ( MOV @sp+, pc ) POP dst - operand pop din stivă (MOV @sp+,dst) BR dst - salt program folosind operand ( MOV dst, pc) NOP - nicio operațiune (MOV r3,r3) există și alte operații posibile pentru generarea unei întârzieri de execuție a codului de program

Notă: forma de scriere a comenzilor este dată fără a indica tipul de operanzi octet/cuvânt.

Formatul acceptat al comenzilor de către asamblator în mnemonic are o indicație a tipului de date care sunt procesate.

Note

  1. DE STEPHEN EVANCZUK.  Cele mai populare MCU vreodată  ? . https://www.edn.com/ (20 august 2013). Preluat la 15 ianuarie 2021. Arhivat din original la 9 iunie 2021.

Link -uri

Compilatoare și asamblatoare

Emulatori

Link-uri utile