Die Mikrocontroller der MSP430-Familie sind 16-Bit-MCUs, die in verschiedenen Ausführungen erhältlich sind. Es gibt derzeit (Stand 2010) etwa 279 verschiedene Typen, die von Texas Instruments vertrieben werden. Viele weitere sind in Planung oder bereits angekündigt. Einen ersten Überblick kann man in der Übersichtsbroschüre von Texas Instruments [Tex07c] gewinnen. Alternativ bietet die Webseite von TI [Tex07g] eine Familienübersicht, in der eine parametrische Eingrenzung auf gewünschte Modelle vorgenommen werden kann.
Aus Gründen der Übersichtlichkeit teilt Texas Instruments die Familie der MSP430-Prozessoren in sechs Gruppen auf (die x sind hierbei Platzhalter):
Betrachtet man die gesamte Auswahl des Herstellers an zur Verfügung stehenden Typen, so verliert man leicht die Übersicht, welcher konkrete Prozessor denn nun für das eigene Projekt geeignet ist. Bei den meisten Projekten definiert die funktionelle Anforderung in Bezug auf die integrierten Funktionskomponenten die Auswahl. Exemplarisch sind in Tabelle 1.3 die Eigenschaften einiger Typen aus der MSP430-Familie dargestellt. In dem später noch vorgestellten Experimentierboard können beispielsweise alle zu MSP430F1612 oder MSP430F149 pinkompatiblen Typen der MSP430x1xx-Familie eingesetzt werden. Ein einfach zu lötendes Gehäuse prädestiniert den MSP430F1232 für Hobby-Prototypen, da nicht gleich eine SMD-Lötausrüstung angeschafft werden muss. Der MSP430F2013-Controller findet sich z.B. im Texas Instruments Starter-Kit eZ430-F2013. Obwohl dort als SMD-Baustein integriert, gibt es diesen sogar im 14-poligen DIP-Gehäuse für diejenigen, die jetzt partout mit SMD auf Kriegsfuß stehen.
| Tabelle 1.3.: | Vergleich verschiedener MSP430-Typen |
| Bezeichnung | Flash/RAM | GPIO | ADC | Andere Peripherie |
| MSP430F2013 | 2 KB/128 B | 22 | 16-Bit Sigma-Delta | 16-Bit Timer, Watchdog, USI |
| MSP430F1232 | 8 KB/256 B | 22 | 10-Bit SAR | 16-Bit Timer, Watchdog, USART |
| MSP430F149 | 60 KB/2 KB | 48 | 12-Bit SAR | Analog-Comparator, Hardware-Multiplier, 2x 16-Bit Timer, Watchdog, 2 USART (SPI or UART) |
| MSP430F1612 | 55 KB/5 KB | 48 | 12-Bit SAR | 2 DAC 12, Analog-Comparator, DMA, Hardware-Multiplier, SVS, 2x 16-Bit Timer, Watchdog, 2x USART (SPI or UART or I2C) |
Vergleicht man die Eigenschaften der genannten Mikrocontroller fällt auf, dass der MSP430F1232 und der MSP430F2013 über deutlich weniger Speicher und Peripheriemodule verfügen. Dies spiegelt sich aber auch in einem entsprechend geringeren Preis im Vergleich zum MSP430F1612 wider. Der MSP430F2013 gehört also eher zu den kleinen Modellen, verfügt aber immerhin über einen 16-Bit-Sigma-Delta-Analog/Digital-Wandler. Zudem hat er nur wenige außen zugängliche I/O-Pins. Die Auswahlentscheidung zu Gunsten eines bestimmten Typs ist zwar im Wesentlichen durch die Anwendung bestimmt, aber durchaus auch durch wirtschaftliche Erwägungen geprägt. Spätestens wenn man die Ebene des Hobbyprojektes verlässt, werden Fragen nach Preis, aber auch nach Verfügbarkeit und Fertigungskosten bestimmend für den Auswahlprozess. Der Vorteil einer Prozessorfamilie wie der des MSP430 ist, dass bei Wechsel der Anforderungen der Prozessor relativ leicht zu wechseln ist und die Software nur an wenigen Stellen angepasst werden muss.
Der MSP430 verfügt über einen Registerblock, der sich in drei funktionale Bereiche gliedern lässt: 8-Bit-Peripherie-Register, 16-Bit-Peripherie-Register und Spezial-Register. Zu diesen Spezial-Registern gehören die 16 je 16-Bit breiten CPU-internen Steuer- und Rechenregister. Sie werden von R0 bis R15 durchnummeriert. Eine Übersicht über die Registeraufteilung des MSP430 ist in Abbildung 1.3 dargstellt. Manche dieser Register (R0 bis R3) haben eine spezielle Bedeutung.
Die übrigen Register sind General-Purpose-Register (Allzweckregister), die für Rechenoperationen verwendet werden können. Die Vielzahl der vorhandenen Allzweckregister ist typisch für RISC-Rechner. Mit diesen Allzweckregistern lassen sich Rechenoperationen besonders schnell und effizient ohne Speicherzugriffe durchführen.
R0 Programm-Counter Das Programm-Counter-Register ist der Befehlszähler der CPU des MSP430. Das Register R0 zeigt immer auf den nächsten abzuarbeitenden Befehl. Dabei ist das Bit 0 (LSB) stets 0, da der MSP nur Befehle mit einer Länge von 2 Byte bis 6 Byte verwaltet und alle Adressen gradzahlig sind.
R1 Stack-Pointer Der Stack ist ein LIFO- (last in first out) organisierter Bereich im Arbeitsspeicher. In diesem werden beispielsweise beim Aufruf von Unterprogrammen die Rücksprungadressen sowie der Inhalt veränderter Register kurzzeitig gespeichert. Das Stack-Pointer- Register verwaltet diesen Arbeitsbereich. Um mit dem Stack arbeiten zu können, muss dieser zunächst mit dem Stack-Pointer-Register initialisiert werden. Dabei zeigt der Stack-Pointer stets auf die oberste Adresse des aktuellen Stacks. Zusätzlich sollte man beachten, dass der Stack ausgehend von der Initialisierungsadresse von hohen nach niedrigen Adressen wächst. Ähnlich wie beim Programm-Counter ist auch beim Stack-Pointer das Bit 0 stets nicht gesetzt.
Im Stack lassen sich sowohl 1 Byte breite als auch 2 Byte (1 Word) breite Zahlen ablegen. Da der Stack jedoch intern nur 16 Bit verarbeitet, werden bei 1 Byte breiten Zahlen die restlichen acht Bits aufgefüllt.
R2/SR/CG1 Status-Register Das Status-Register beinhaltet alle wichtigen Flags der CPU. Sie dienen unter anderem der Steuerung und dem selektiven Programmfluss mit bedingten Sprungbefehlen. Dabei sind allerdings nur die untersten acht Bits belegt. Die restlichen acht Bits des Registers sind reserviert. Die Aufteilung der Flags ist in Abbildung 1.4 skizziert.
R3/CG2 Constant-Generator Das Constant-Generator-Register ist eine Besonderheit der MSP430-Mikrocontroller. Damit lassen sich besonders schnell ohne Initialisierung Konstanten wie 0, 1, 2, 4, 8 und -1 darstellen, die für viele Rechneranwendungen immer wieder benötigt werden.
R4 bis R15 Dies sind so genannte ”General-Purpose-Register”, die ohne Einschränkung zur Programmierung verwendet werden können. Da Befehle mit Registern sehr schnell abgearbeitet werden können, kann man durch die geschickte Wahl der Registerzuordnung sehr effizienten Code produzieren. Dies ist allerdings nur in der Assemblerprogrammierung möglich, in C übernimmt diese Optimierung der Compiler.