MSP430 je rodina 16bitových mikrokontrolérů od Texas Instruments .
První kontrolér se zkratkou MSP430 se objevil v roce 1992 [1] . TI oznámila své přání vytvořit mikrokontrolér s instrukčním systémem blízkým architektuře PDP-11 populární v 70. a 80. letech .
Jádro MSP430 je 16bitové. Snažili se udělat příkazový systém co nejvíce ortogonální s různými způsoby adresování. Ortogonalita instrukčního systému znamená, že v jakékoli instrukci lze použít jakoukoli metodu adresování operandu: konstantu, přímou z registru nebo paměti, nepřímou atd.
V době zrodu rodiny byl hlavní důraz kladen na snižování spotřeby energie. Od té doby se však úspora energie stala v elektronické technologii pevnou myšlenkou a MSP430 je na tomto piedestalu aktivně vytlačován jinými výrobci s vlastní architekturou.
Klíčovým rozdílem a „vizitkou“ rodiny MSP430 je schopnost taktovat libovolný periferní modul asynchronně od jádra. U naprosté většiny jednočipových mikrokontrolérů je periferie synchronní s jádrem (s výjimkou některých speciálních uzlů). Tato funkce umožňuje flexibilně řídit rychlost (a tedy spotřebu) každého modulu. Kromě toho je modul rozhraní USB také jedinečný: má samostatnou doménu napájení, což zjednodušuje vývoj bateriově napájených zařízení s rozhraním USB.
Rodina MSP430 dnes nabízí širokou škálu jednočipových mikrokontrolérů s flash pamětí od jednotek až do 512 kilobajtů a RAM až do 64 kilobajtů. Takt jádra až 25 MHz.
MSP430 má Von Neumannovu architekturu s jediným adresním prostorem pro příkazy a data. Paměť může být adresována jak byte po byte, tak slovo po slovu. Pořadí uložení 16bitových slov je od nejmladšího po nejstarší ( anglicky little-endian ).
Procesor obsahuje 16 16bitových ortogonálních registrů. Registr R0 se používá jako programový čítač ( Program Counter - PC ), registr R1 jako ukazatel zásobníku ( anglicky Stack Pointer - SP ), registr R2 jako stavový registr ( Status Register - SR ) a R3 jako speciální registru s názvem generátor konstant ( ang. Constant Generator - CG ), R2 lze použít i jako generátor konstant. Generátor konstant se používá ke zkrácení celkové délky instrukce v důsledku implicitní reprezentace konstanty v operačním kódu. Registry R4 až R15 se používají jako registry pro všeobecné použití.
Sada instrukcí je velmi jednoduchá a je reprezentována 27 instrukcemi, 24 emulovanými instrukcemi. Instrukce mají 8bitové (bajtové) i 16bitové (slovo) formy zpracování operandů. B/W bit ovládá tuto funkci.
Příkazový systém MSP430patnáct | čtrnáct | 13 | 12 | jedenáct | deset | 9 | osm | 7 | 6 | 5 | čtyři | 3 | 2 | jeden | 0 | tým |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | jeden | 0 | 0 | operační kód | B/W | Tak jako | Registrovat | Jednooperandové instrukce | ||||||
0 | 0 | 0 | jeden | 0 | 0 | 0 | 0 | 0 | B/W | Tak jako | Registrovat | RRC Otočte doprava při přenášení | ||||
0 | 0 | 0 | jeden | 0 | 0 | 0 | 0 | jeden | 0 | Tak jako | Registrovat | Výměna bajtů SWPB | ||||
0 | 0 | 0 | jeden | 0 | 0 | 0 | jeden | 0 | B/W | Tak jako | Registrovat | RRA Aritmetika rotace vpravo | ||||
0 | 0 | 0 | jeden | 0 | 0 | 0 | jeden | jeden | 0 | Tak jako | Registrovat | SXT Znamení rozšíření bajtu na slovo | ||||
0 | 0 | 0 | jeden | 0 | 0 | jeden | 0 | 0 | B/W | Tak jako | Registrovat | PUSH Push operand do zásobníku | ||||
0 | 0 | 0 | jeden | 0 | 0 | jeden | 0 | jeden | 0 | Tak jako | Registrovat | CALL Volání podprogramu; uložte PC do zásobníku a načtěte PC s novou hodnotou | ||||
0 | 0 | 0 | jeden | 0 | 0 | jeden | jeden | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | RETI Návrat z přerušení; Pop SR a PC ze zásobníku |
0 | 0 | jeden | stav | 10bitový posun znaménka | Podmíněná větev; PC=PC+2×offset | |||||||||||
0 | 0 | jeden | 0 | 0 | 0 | 10bitový posun znaménka | JNE / JNZ Skok, pokud není_rovný/není_nula | |||||||||
0 | 0 | jeden | 0 | 0 | jeden | 10bitový posun znaménka | JEQ / JZ Skok, pokud je rovno/nula | |||||||||
0 | 0 | jeden | 0 | jeden | 0 | 10bitový posun znaménka | JNC / JLO Jump if not_carry/below (nepodepsané porovnání) | |||||||||
0 | 0 | jeden | 0 | jeden | jeden | 10bitový posun znaménka | JC / JHS Skok, pokud je přenášen/vyšší nebo stejný (nepodepsané srovnání) | |||||||||
0 | 0 | jeden | jeden | 0 | 0 | 10bitový posun znaménka | JN Skok, pokud je záporný | |||||||||
0 | 0 | jeden | jeden | 0 | jeden | 10bitový posun znaménka | JGE Skok, pokud je větší_nebo_rovno | |||||||||
0 | 0 | jeden | jeden | jeden | 0 | 10bitový posun znaménka | JL Skočit, pokud méně | |||||||||
0 | 0 | jeden | jeden | jeden | jeden | 10bitový posun znaménka | JMP Jump (okamžité) | |||||||||
operační kód | zdroj | Inzerát | B/W | Tak jako | destinace | Aritmetika dvou operandů | ||||||||||
0 | jeden | 0 | 0 | zdroj | Inzerát | B/W | Tak jako | destinace | MOV Odeslat zdroj do cíle | |||||||
0 | jeden | 0 | jeden | zdroj | Inzerát | B/W | Tak jako | destinace | ADD Přidat zdroj do cíle | |||||||
0 | jeden | jeden | 0 | zdroj | Inzerát | B/W | Tak jako | destinace | ADDC Přidat source_and_transfer do cíle | |||||||
0 | jeden | jeden | jeden | zdroj | Inzerát | B/W | Tak jako | destinace | SUBC Odečíst zdroj od cíle (s přenosem) | |||||||
jeden | 0 | 0 | 0 | zdroj | Inzerát | B/W | Tak jako | destinace | SUB Odečíst zdroj od cíle | |||||||
jeden | 0 | 0 | jeden | zdroj | Inzerát | B/W | Tak jako | destinace | CMP Porovnat (odečíst) zdroj s cílem | |||||||
jeden | 0 | jeden | 0 | zdroj | Inzerát | B/W | Tak jako | destinace | DADD Desetinné desetinné přidání zdroje a cíle (s přenosem) | |||||||
jeden | 0 | jeden | jeden | zdroj | Inzerát | B/W | Tak jako | destinace | BIT Bitová kontrola (operace AND) zdroje a cíle | |||||||
jeden | jeden | 0 | 0 | zdroj | Inzerát | B/W | Tak jako | destinace | BIC Bit flush (cíl &= ~src) | |||||||
jeden | jeden | 0 | jeden | zdroj | Inzerát | B/W | Tak jako | destinace | Nastavení bitu BIS (logické OR) | |||||||
jeden | jeden | jeden | 0 | zdroj | Inzerát | B/W | Tak jako | destinace | XOR Exclusive nebo source-destination | |||||||
jeden | jeden | jeden | jeden | zdroj | Inzerát | B/W | Tak jako | destinace | AND Logický AND zdroj s cílem (cíl &= src) |
Všechny instrukce jsou 16bitové. 4 metody adresování operandů, definované ve 2 bitech jako pole As.
Pole jako – Registrováno, indexováno, nepřímo registrováno, nepřímo registrováno s následným snížením. Pole Ad definuje dva způsoby adresování – registr a index.
MSP430 Režim adresováníTak jako | Registrovat | Syntax | Popis |
---|---|---|---|
00 | n | R n | Registrovat. Operand je obsah jednoho z registrů z R n . |
01 | n | x (R n ) | index. Operand je v paměti na adrese R n + x .
X-word je za aktuálním příkazem. |
deset | n | @Rn _ | Nepřímý registr. Operand je umístěn v paměti na adrese obsažené v registru Rn . |
jedenáct | n | @Rn + _ | Nepřímý registr s autoinkrementací. V závislosti na hodnotě bitu B/W se hodnota registru Rn po dokončení operace zvýší o 1 nebo 2. |
Režimy adresování při použití R0 (PC) | |||
01 | 0 (PC) | OZNAČENÍ | Příbuzný (znak). x(PC) Paměťový operand na PC+ x . |
jedenáct | 0 (PC) | # x | Přímo. @PC+ Adresa x-word operandu po aktuální instrukci. |
Použití R2 (SR) a R3 (CG), speciální způsob dekódování | |||
01 | 2 (SR) | & štítek | Absolutní. Operand v paměti na adrese převzaté z x . |
deset | 2 (SR) | #čtyři | Konstantní 4. |
jedenáct | 2 (SR) | #osm | Konstantní 8. |
00 | 3 (CG) | #0 | Konstantní 0. |
01 | 3 (CG) | #jeden | Konstanta 1. pro bajtové operace. |
deset | 3 (CG) | #2 | Konstantní 2. |
jedenáct | 3 (CG) | #-jeden | Konstanta −1 nebo 0xFFFF. |
Další instrukce podporované assemblerem MSP430 jsou tvořeny z hlavních a nazývají se emulované (způsob získání je v závorkách). Celkový počet emulovaných instrukcí podporovaných assemblerem je 24.
CLRZ - Vymazání registru stavu procesoru (PSW) Příznak Z ( BIC #2,SR ) CLRN - Vymazání registru stavu procesoru (PSW) Příznak N ( BIC #4,SR ) CLRC - Vymazání registru stavu procesoru (PSW) Příznak C ( BIC # 1,SR) SETZ - Nastavení příznaku Z registru stavu procesoru (PSW) ( BIS #2,SR ) SETN - Nastavení příznaku N registru stavu procesoru (PSW) ( BIS #4,SR ) SETC - Nastavení příznaku C Registr stavu procesoru (PSW) (BIS #1,SR) EINT - povolení přerušení ( BIC #8,SR ) DINT - zakázání přerušení ( BIS #8,SR ) CLR dst - Vymazat operand ( MOV #0,dst ) TST dst - Kontrola operandu na nulu ( CMP #0,dst ) INV dst - Invertovat bity operandu ( XOR #-1,dst ) ADC dst - přidání přenosu k operandu ( ADDC #0,dst ) DADC dst - přidání desetinného přenosu k cíli ( DADD #0,dst ) SBC dst - odečtení přenosu od operandu ( SUBC #0,dst) INC dst - zvýšení operandu ( ADD #1,dst ) DEC dst - snížení operandu ( SUB #1,dst ) INCD dst - zvýšení o 2 operandy ( ADD #2,dst ) DECD dst - snížení o 2 operandy ( SUB #2, dst) RLA dst - levý posun operandu, příznak přenosu je vyplněn z horního bitu a dolní bit výsledku je -0 ( ADD dst,dst ) RLC dst - levý posun operandu pomocí carry ( ADDC dst,dst ) RET - návrat z podprogramu ( MOV @sp+,pc ) POP dst - pop operand ze zásobníku ( MOV @sp+,dst ) BR dst - skok programu pomocí operandu ( MOV dst,pc) NOP - žádná operace ( MOV r3,r3 ) existují další možné operace pro generování zpoždění provádění programového kóduPoznámka: forma zápisu příkazů je dána bez uvedení typu operandů bajt/slovo.
Podporovaný formát příkazů assemblerem v mnemotechnické pomůcce má označení typu zpracovávaných dat.
Mikrokontroléry | ||||||||
---|---|---|---|---|---|---|---|---|
Architektura |
| |||||||
Výrobci |
| |||||||
Komponenty | ||||||||
Obvod |
| |||||||
Rozhraní | ||||||||
OS | ||||||||
Programování |
|