MSP430 este o familie de microcontrolere pe 16 biți de la Texas Instruments .
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.
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ă.
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.
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. |
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 programNotă: 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.
Microcontrolere | ||||||||
---|---|---|---|---|---|---|---|---|
Arhitectură |
| |||||||
Producătorii |
| |||||||
Componente | ||||||||
Periferie | ||||||||
Interfețe | ||||||||
OS | ||||||||
Programare |
|