MSP430 er en familie af 16-bit mikrocontrollere fra Texas Instruments .
Den første controller med forkortelsen MSP430 dukkede op i 1992 [1] . TI annoncerede sit ønske om at skabe en mikrocontroller med et instruktionssystem tæt på PDP-11- arkitekturen populær i 70'erne og 80'erne .
MSP430 kerne er 16-bit. De forsøgte at gøre kommandosystemet så ortogonalt som muligt med en række forskellige adresseringsmetoder. Ortogonaliteten af instruktionssystemet betyder, at i enhver instruktion kan enhver metode til adressering af operanden bruges: en konstant, direkte fra et register eller hukommelse, indirekte osv.
På tidspunktet for familiens fødsel var hovedfokus på at reducere energiforbruget. Men siden da er energibesparelse blevet en fast idé inden for elektronisk teknologi, og MSP430 bliver aktivt presset ud på denne piedestal af andre producenter med deres egne arkitekturer.
Den vigtigste forskel og "telefonkort" i MSP430-familien er evnen til at clocke ethvert perifert modul asynkront fra kernen. I langt de fleste single-chip mikrocontrollere er periferien synkron med kernen (med undtagelse af nogle specielle noder). Denne funktion giver dig mulighed for fleksibelt at styre hastigheden (og dermed forbruget) af hvert modul. Derudover er USB -interfacemodulet også unikt: Det har et separat strømdomæne, som forenkler udviklingen af batteridrevne enheder med et USB-interface.
I dag tilbyder MSP430-familien en bred vifte af single-chip mikrocontrollere med flashhukommelse fra enheder op til 512 kilobyte og RAM op til 64 kilobyte. Kerne-urhastigheder op til 25 MHz.
MSP430 har en Von Neumann -arkitektur med et enkelt adresseområde til kommandoer og data. Hukommelse kan adresseres både byte-for-byte og ord-for-ord. Lagringsrækkefølgen for 16-bit ord er fra den yngste til den ældste ( engelsk little-endian ).
Processoren indeholder 16 16-bit ortogonale registre. R0 registret bruges som programtæller ( Program Counter - PC ), R1 registret som stack pointer ( English Stack Pointer - SP ), R2 registret som statusregister ( Status Register - SR ), og R3 som en speciel register kaldet konstant generator ( eng. Constant Generator - CG ), R2 kan også bruges som konstant generator. Konstantgeneratoren bruges til at reducere den samlede længde af instruktionen på grund af den implicitte repræsentation af konstanten i opkoden. Registrene R4 til R15 bruges som registre til generelle formål.
Sættet af instruktioner er meget enkelt og repræsenteres af 27 instruktioner, 24 emulerede instruktioner. Instruktioner har både 8-bit (byte) og 16-bit (ord) operandhåndteringsformer. S/H-bitten styrer denne funktion.
MSP430 kommandosystemfemten | fjorten | 13 | 12 | elleve | ti | 9 | otte | 7 | 6 | 5 | fire | 3 | 2 | en | 0 | Hold |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | en | 0 | 0 | opkode | S/H | Som | Tilmeld | Enkelt Operand Instruktioner | ||||||
0 | 0 | 0 | en | 0 | 0 | 0 | 0 | 0 | S/H | Som | Tilmeld | RRC Roter lige gennem bære | ||||
0 | 0 | 0 | en | 0 | 0 | 0 | 0 | en | 0 | Som | Tilmeld | SWPB Byte Exchange | ||||
0 | 0 | 0 | en | 0 | 0 | 0 | en | 0 | S/H | Som | Tilmeld | RRA Rotationshøjre aritmetik | ||||
0 | 0 | 0 | en | 0 | 0 | 0 | en | en | 0 | Som | Tilmeld | SXT Sign-udvidelse af byte til ord | ||||
0 | 0 | 0 | en | 0 | 0 | en | 0 | 0 | S/H | Som | Tilmeld | PUSH Skub operand ind på stakken | ||||
0 | 0 | 0 | en | 0 | 0 | en | 0 | en | 0 | Som | Tilmeld | CALL Subrutineopkald; gem pc'en på stakken og indlæs pc'en med den nye værdi | ||||
0 | 0 | 0 | en | 0 | 0 | en | en | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | RETI Retur fra afbrydelse; Pop SR og PC fra stakken |
0 | 0 | en | tilstand | 10-bit tegn offset | Betinget filial; PC=PC+2×offset | |||||||||||
0 | 0 | en | 0 | 0 | 0 | 10-bit tegn offset | JNE / JNZ Hop hvis ikke_lige/ikke_nul | |||||||||
0 | 0 | en | 0 | 0 | en | 10-bit tegn offset | JEQ / JZ Hop hvis lig/nul | |||||||||
0 | 0 | en | 0 | en | 0 | 10-bit tegn offset | JNC / JLO Hop hvis ikke_bære/under (usigneret sammenligning) | |||||||||
0 | 0 | en | 0 | en | en | 10-bit tegn offset | JC / JHS Hop hvis bære/højere eller samme (usigneret sammenligning) | |||||||||
0 | 0 | en | en | 0 | 0 | 10-bit tegn offset | JN Hop hvis negativ | |||||||||
0 | 0 | en | en | 0 | en | 10-bit tegn offset | JGE Hop hvis større_eller_lige | |||||||||
0 | 0 | en | en | en | 0 | 10-bit tegn offset | JL Hop hvis mindre | |||||||||
0 | 0 | en | en | en | en | 10-bit tegn offset | JMP Jump (øjeblikkelig) | |||||||||
opkode | kilde | Ad | S/H | Som | bestemmelsessted | To operander aritmetik | ||||||||||
0 | en | 0 | 0 | kilde | Ad | S/H | Som | bestemmelsessted | MOV Send kilde til destination | |||||||
0 | en | 0 | en | kilde | Ad | S/H | Som | bestemmelsessted | ADD Tilføj kilde til destination | |||||||
0 | en | en | 0 | kilde | Ad | S/H | Som | bestemmelsessted | ADDC Tilføj source_and_transfer til destination | |||||||
0 | en | en | en | kilde | Ad | S/H | Som | bestemmelsessted | SUBC Træk kilde fra destination (med carry) | |||||||
en | 0 | 0 | 0 | kilde | Ad | S/H | Som | bestemmelsessted | SUB Træk kilde fra destination | |||||||
en | 0 | 0 | en | kilde | Ad | S/H | Som | bestemmelsessted | CMP Sammenlign (træk fra) kilde til destination | |||||||
en | 0 | en | 0 | kilde | Ad | S/H | Som | bestemmelsessted | DADD Decimal Decimal tilføjelse af kilde og destination (med carry) | |||||||
en | 0 | en | en | kilde | Ad | S/H | Som | bestemmelsessted | BIT Bitkontrol (OG operation) af kilde og destination | |||||||
en | en | 0 | 0 | kilde | Ad | S/H | Som | bestemmelsessted | BIC Bit flush (dest &= ~src) | |||||||
en | en | 0 | en | kilde | Ad | S/H | Som | bestemmelsessted | BIS Bit-indstilling (logisk ELLER) | |||||||
en | en | en | 0 | kilde | Ad | S/H | Som | bestemmelsessted | XOR Eksklusiv eller kildedestination | |||||||
en | en | en | en | kilde | Ad | S/H | Som | bestemmelsessted | OG Logisk OG kilde med destination (dest &= src) |
Alle instruktioner er 16-bit. 4 operandadresseringsmetoder, defineret i 2 bit som As-feltet.
Felt Som – Registreret, indekseret, indirekte registreret, indirekte registreret med post-dekrement. Annoncefeltet definerer to adresseringsmetoder - register og indeks.
MSP430 AdresseringstilstandSom | Tilmeld | Syntaks | Beskrivelse |
---|---|---|---|
00 | n | R n | Tilmeld. Operanden er indholdet af et af registrene fra R n . |
01 | n | x ( Rn ) | indeks. Operaanden er i hukommelsen på adressen R n + x .
X-ordet er efter den aktuelle kommando. |
ti | n | @Rn _ | Indirekte register. Operaanden er placeret i hukommelsen på adressen indeholdt i registeret Rn . |
elleve | n | @Rn + _ | Indirekte register med autoincrement. Afhængigt af værdien af B/W-bitten øges værdien af Rn - registret efter operationen er fuldført med 1 eller 2. |
Adresseringstilstande ved brug af R0 (pc) | |||
01 | 0 (pc) | ETIKET | Relativ (karakter). x(PC) Hukommelsesoperanden ved PC+ x . |
elleve | 0 (pc) | # x | Direkte. @PC+ Adresse på x-ord-operanden efter den aktuelle instruktion. |
Brug af R2 (SR) og R3 (CG), speciel afkodningsmåde | |||
01 | 2 (SR) | & etiket | Absolut. Operanden i hukommelsen på adressen taget fra x . |
ti | 2 (SR) | #fire | Konstant 4. |
elleve | 2 (SR) | #otte | Konstant 8. |
00 | 3 (CG) | #0 | Konstant 0. |
01 | 3 (CG) | #en | Konstant 1. for byte-operationer. |
ti | 3 (CG) | #2 | Konstant 2. |
elleve | 3 (CG) | #-en | Konstant −1 eller 0xFFFF. |
Andre instruktioner, der understøttes af MSP430-samleren, er dannet ud fra de vigtigste og kaldes emulerede (metoden til opnåelse er i parentes). Det samlede antal emulerede instruktioner, der understøttes af assembleren, er 24.
CLRZ - Ryd Processor Status Register (PSW) Z Flag ( BIC #2,SR ) CLRN - Ryd Processor Status Register (PSW) Flag N ( BIC #4,SR ) CLRC - Ryd Processor Status Register (PSW) Flag C ( BIC # 1,SR) SETZ - Indstil Z-flaget for processorstatusregistret (PSW) ( BIS #2,SR ) SETN - Indstil N-flaget for processorstatusregistret (PSW) ( BIS #4,SR ) SETC - Indstil C-flaget for Processor Status Register (PSW) (BIS # 1,SR) EINT - aktiver interrupts ( BIC #8,SR ) DINT - deaktiver interrupts ( BIS #8,SR ) CLR dst - Slet operand ( MOV #0,dst ) TST dst - Tjek operand for nul ( CMP #0,dst ) INV dst - Inverter operandbits ( XOR #-1,dst ) ADC dst - add carry til operand ( ADDC #0,dst ) DADC dst - add decimal carry til destination ( DADD #0,dst ) SBC dst - subtraher carry fra operand ( SUBC #0,dst) INC dst - operand stigning ( ADD #1,dst ) DEC dst - operand reduktion ( SUB #1,dst ) INCD dst - øg med 2 operander ( ADD #2,dst ) DECD dst - sænk med 2 operander ( SUB #2, dst) RLA dst - venstre skift af operanden, bæreflaget udfyldes fra den høje bit, og den lave bit af resultatet er -0 ( ADD dst,dst ) RLC dst - venstre skift af operanden ved hjælp af carry ( ADDC dst,dst ) RET - retur fra subrutine (MOV @sp+,pc) POP dst - pop operand fra stakken ( MOV @sp+,dst) BR dst - programspring ved hjælp af operand (MOV dst,pc) NOP - ingen betjening (MOV r3,r3) der er andre mulige operationer til at generere en programkodeeksekveringsforsinkelseBemærk: formen for skrivekommandoer er givet uden at angive typen af operander byte/ord.
Det understøttede format af kommandoer af assembleren i mnemonikken har en indikation af typen af data, der behandles.
Mikrocontrollere | ||||||||
---|---|---|---|---|---|---|---|---|
Arkitektur |
| |||||||
Producenter |
| |||||||
Komponenter | ||||||||
Periferi |
| |||||||
Grænseflader | ||||||||
OS | ||||||||
Programmering |
|