Mikrocontroller

TI MSP430

aus Wikipedia, der freien Enzyklopädie

Wechseln zu: Navigation, Suche

Der MSP430 ist ein 16-Bit-RISC-Microcontroller der Firma Texas Instruments. Er wurde in Freising, Deutschland entwickelt. Der Microcontroller ist für Anwendungen mit niedrigstem Stromverbrauch optimiert. Der Prozessorkern ist einfach und effizient in der Programmiersprache C und/oder Assembler programmierbar. Der Controller ist in vielen Ausführungen mit leistungsfähiger Peripherie verfügbar. Texas Instruments erweitert die Palette laufend, was auf einen großen Erfolg dieser Controllerlinie hindeutet. Typische Anwendungen sind Geräte mit Langzeitbatterie, wie z. B. Wärmezähler, Heizkostenverteiler, Tauchcomputer oder auch Blutdruckmessgeräte im medizinischen Bereich.

Inhaltsverzeichnis

[Bearbeiten] Speicheraufteilung

Der MSP430 besitzt eine klassische Von-Neumann-Architektur. Die Größe des adressierbaren Speichers ist bei den meisten Derivaten auf 64 kByte limitiert. Speichergrößen liegen bei bis zu 60 kByte FLASH und bis zu 10 kByte RAM (natürlich nicht im gleichen Baustein). Ca. 2 kByte der adressierbaren 64 kByte sind für interne Funktionen (wie z.B. einen Boot-Loader) reserviert, so dass mit den zwei größten Speicherausbauten 60 kByte FLASH mit 2 kByte RAM bzw. 48 kByte FLASH mit 10 kByte RAM bereitstehen.

Seit November 2006 bietet TI auch eine Familie mit einer so genannten MSP430X-CPU an. Diese basiert auf einem Speichermodell, welches bis zu 1 MByte Speicher adressieren kann. Der Adressbus hat hierbei 20 Bit, alle Register (außer dem Statusregister R2/SR) sind deshalb nicht mehr 16 Bit breit, sondern 20 Bit. So sind die in den „normalen“ CPUs verfügbaren Befehle weiterhin ohne Änderung verfügbar. Die interne Abarbeitung musste jedoch an die größere Adressbreite angepasst werden, z.B. muss beim CALL-Befehl ein Wort mehr auf den Stack geschrieben werden, da ja 4 weitere Bit als Rücksprungadresse abgelegt werden müssen. Erhältlich sind Bausteine mit bis zu 120 kByte Flash/4 kByte RAM bzw. 116 kByte Flash/8 kByte RAM, alle mit LCD-Treibern.

In den untersten 16 Byte (Adresse 0000h bis 000Fh) sind spezielle Register (SFR, Special Function Register) für die Interrupt- und „Modul“-Steuerung eingeblendet. Die Register der 8-Bit-Peripherie belegen die nächsten 240 Byte (Adresse 0010h bis 00FFh). Bis hierher ist ein Speicherzugriff byteweise notwendig. Darüber sind die nächsten 255 Byte (Adresse 0100h bis 01FFh) für die 16-Bit-Peripherie reserviert. Ab hier wird wortweise auf den Speicher zugegriffen.

Ab dem 513. Byte (Adresse 0200h bis 09FFh) liegt das RAM. Bei den größeren RAM-Ausbauten (größer 2 kByte) liegt dieses tatsächlich im Speicher weiter oben (Adresse 1100h bis 38FFh), wird aber zum Teil in den unteren Adressbereich gespiegelt. Dazwischen liegen Boot- und Informations-Speicher (Adresse 0C00h bis 0FFFh resp. 1000 bis 10FFh).

Der Informations-Speicher ist wie der Code-Speicher ein Flash-Speicher, dessen Besonderheit die Aufteilung in zwei 128 Byte große Segmente darstellt, die als „Zwischenspeicher“ benutzt werden können, für Daten, die immer mal wieder zu ändern sind. Der restliche FLASH-Speicher (für den Programmcode und Konstanten) hat Segmente von 512 Byte. Er liegt grundsätzlich im Speicherbereich 1100h bis FFFFh, wird aber je nach Speicherausbau (mehr RAM oder kleineres FLASH) erst ab Adresse FC00h (für 1 kByte FLASH) liegen. Außerdem sind die obersten 32 Byte (Adresse FFE0h bis FFFFh) des Speichers für die Interrupt-Vektoren vorbehalten, die jedoch nur bei Bedarf benutzt werden. Werden keine Interrupts benutzt, kann auch der Speicher für deren Vektoren als Programmspeicher genutzt werden.

[Bearbeiten] Interruptbehandlung

Der MSP430 kennt grundsätzlich 16 Interruptquellen, die nach ihrer Lage in den Interrupt-Vektoren priorisiert sind. Nicht jeder Baustein belegt alle Quellen. Dies ist vom Ausbau der „internen“ Peripherie abhängig. Es können mehrere Interrupts den gleichen Vektor belegen. Ist dies der Fall, muss von der Software über entsprechende Bits entschieden werden, welcher Interrupt aktuell vorliegt. Außerdem haben verschiedene Interrupts „eigene“ Vektorregister, über die es jeweils wieder bis zu 10 unterschiedliche Quellen (erweiterbar bis zu 128!) geben kann. Als Beispiel seien hier die Timer-Interrupts genannt.

Der MSP430 beherrscht mehrere Power-Down-Modi, in denen die Befehlsverarbeitung gestoppt oder der Takt abgeschaltet wird. Im niedrigsten Modus liegt der Stromverbrauch bei 0,4 µA. Will man eine Echtzeituhr realisieren, werden ca. 2 µA benötigt. Die CPU kann durch verschiedene Interrupts wieder aufgeweckt werden.

[Bearbeiten] Befehlssatz

Der Befehlssatz beinhaltet nur 27 „Grundinstruktionen“ und 24 „emulierte“ Instruktionen, die aus den Grundinstruktionen zusammengesetzt sind. Der Begriff „RISC“ ist dafür angemessen.

Die Dauer der Befehlsabarbeitung hängt vom Befehl ab: 1 bis 6 Takte sind möglich. Bei Taktfrequenzen von bis zu 16 MHz werden so Schrittzeiten von bis zu 62,5 ns erreicht.

[Bearbeiten] Interne Peripherie („Module“)

Die Register der „internen“ Peripherie (Takt-Erzeugung, SVS (Überwachung der Versorgungsspannung), Hardwaremultiplizierer, DMA, Ports, Watchdog, Timer, serielle Schnittstellen, Komparatoren, ADCs und DACs) sind (wie oben erwähnt) im Adressbereich eingebunden. Diese Peripherie ist je nach Modell mit auf dem Chip integriert. Es wird zwischen 8-Bit-Peripherie und 16-Bit-Peripherie unterschieden.

[Bearbeiten] Takterzeugung

Bei der Takt-Erzeugung setzt TI auf drei unterschiedliche Quellen, die je nach Bedarf sehr geringen Stromverbrauch (32 kHz Uhrenquarz), sehr schnelles Aufwachen nach einem Interrupt (interner RC-Oszillator, 6 µs Zeit bis zum Erreichen der nominellen RC-Taktfrequenz) oder hohe Frequenz (bis zu 16 MHz) ermöglichen. Der MSP430 eignet sich sehr gut zum Übertakten: Der Niederfrequenzoszillator kann mit einem 100-kHz-Quarz(rund 200 % Übertaktung) betrieben werden, und der HF-Oszillator kann um 100 % übertaktet werden, zumindest bei Raumtemperatur und bei der maximal zulässigen Betriebsspannung.

[Bearbeiten] SVS

Der Supply Voltage Supervisor, auch Brown Out Reset oder Brown Out Detector genannt, überwacht die Versorgungsspannung und ermöglicht auch bei einem kurzfristigen Unterschreiten der Mindestspannung ein geregeltes neues Hochfahren (Reset) des Systems. Wird die Mindestspannung unterschritten, können unvorhersehbare Fehler im System auftreten, die zu nicht gewollten Programmausführungen oder Hängen bleiben führen können. Mit dem SVS werden solche Fehler vermieden und ein geregelter Neustart, auch ohne Abschaltung der Versorgungsspannung, vollzogen.

[Bearbeiten] Hardwaremultiplizierer

Der Hardwaremultiplizierer beherrscht die Multiplikation von vorzeichenlosen und vorzeichenbehafteten 8-Bit- und 16-Bit-Zahlen, wobei als Ergebnis eine bis zu 32 Bit große Zahl entsteht. Er beherrscht ebenso vorzeichenloses und vorzeichenbehaftetes Multiplizieren und Zusammenzählen (MAC, eine Domäne der DSPs). Der erste Operand dieser vier Operationen ist jeweils in einem speziellen Register abzulegen, der zweite Operand immer im gleichen Register. Das Ergebnis steht immer in den beiden gleichen Ausgangs-Registern zur Verfügung. Es liegt automatisch drei (!) Takte nach dem Ablegen des zweiten Operanden zur Verfügung.

[Bearbeiten] DMA

Mit Hilfe des DMA-Controllers können ohne Zutun der CPU sehr schnell Daten von einem Speicherbereich in einen anderen transferiert werden. In dieser Zeit kann die CPU nicht auf den Bus zugreifen, weshalb sie natürlich angehalten werden muss. Der DMA-Transfer ist aber auch in den Low-Power-Modi zugelassen, wobei der CPU-Takt aber hochgefahren werden muss.

[Bearbeiten] Ports

Die Ports sind zum Teil interrupt-fähig, was bedeutet, dass der MSP430 über sie aus einem Low-Power-Mode aufgeweckt werden kann. In solch einem Zustand verbraucht der MSP430 die wenigste Energie (ca. 0,4 µA). Die Ports selbst können nur sehr wenig Strom treiben und aufnehmen (ca. 6 mA, wobei der Gesamtstrom in den Baustein je nach Typ bei weitem kein Vielfaches der Pinanzahl dieses Wertes ist!).

[Bearbeiten] Watchdog

Der Watchdog-Timer wird eingesetzt, wenn das System nach einem Deadlock ohne Zutun des Nutzers wieder bedienbar sein soll. Dazu zählt der Watchdog einen Timer herauf, der von der Applikation immer wieder auf Null gesetzt werden muss. Ist die Applikation wegen eines Deadlocks dazu nicht in der Lage (im Allgemeinen sagt man, sie hat sich verlaufen), wird durch den Watchdog ein Reset ausgelöst. Das System fängt von vorne an und ist wieder bedienbar (auch wenn es dem Benutzer nicht unbedingt gefällt, wenn er von vorne anfangen muss). So kann sichergestellt werden, dass auch nach einer intensiven Störung von außen, z.B. ESD-Entladung über den Prozessor, das Programm wieder in einen definierten Betriebszustand zurückkehrt. Die Funktion des Watchdog-Timers kann jedoch auch abgeschaltet werden, wenn die oben genannte Funktionalität nicht gewünscht wird bzw. störend ist. Man kann den Watchdog-Timer auch als zusätzlichen Zähler benutzen, um damit z.B. eine Real-Time-Clock zu realisieren. Dies geschieht, indem man den Zähler so konfiguriert, dass er jede Sekunde einen Interrupt auslöst, und zählt dann in dem Interrupt die Sekunden hoch. Nachteil dieser „Softwareuhr“ gegenüber einem externen Uhrenschaltkreis: Wenn der MSP430 komplett ausgeschaltet wird, also keine Möglichkeit mehr hat den Interrupt auszulösen, kann natürlicherweise die Zeit nicht mitgezählt werden und muss dann beim nächsten Starten neu initialisiert werden.

[Bearbeiten] Timer

Die Timer sind grundsätzlich 16-Bit-Timer. Sie können durch unterschiedliche Takte angesprochen werden, auch von externen Ereignissen. Damit sind von sehr kurzen Timerzeiten im Bereich einiger hundert Nanosekunden (schneller 16-MHz-Takt) bis zu beliebig langen Timerzeiten (viele Monate und Jahre durch sehr langsame externe Signale) möglich. Selbst durch die zweite eigene Zeitbasis mit 32 kHz sind noch direkte Timerzeiten von bis zu zwei Sekunden, bei Benutzung eines zusätzlichen Registers von bis zu 1,5 Tagen, realisierbar. Auch Timer können die CPU aus einem Low-Power-Modus aufwecken. Damit sie aber laufen – sie brauchen einen Takt – kann die Stromsparfunktionalität nicht so hoch getrieben werden wie bei den Ports, wo praktisch keine interne Peripherie zur Unterstützung notwendig ist.

[Bearbeiten] Serielle Schnittstellen

Bei den seriellen Schnittstellen sind derzeit als Protokoll UART, SPI und I²C in Hardware realisiert. Weitere (wie LIN) sollen folgen. (CAN wird auf absehbare Zeit nicht durch den MSP430 unterstützt werden, da der Fertigungsprozess, mit dem die Controller hergestellt werden, nicht für den Temperaturbereich im Automotive-Sektor geeignet ist.) Die Baudrate könnte theoretisch auf bis zu 16 MBit/s gesetzt werden. Serielle Schnittstellen laufen sicher bis 115,2 kBit/s, SPI arbeitet um 1 MBit/s und I²C in den unterstützten Modi bis 400 kBit/s.

[Bearbeiten] Komparatoren

Mit den Komparatoren können analoge Spannungen gegen unterschiedliche Referenzspannungen verglichen werden. Die Referenzspannung kann intern (0,5*VCC, 0,25*VCC oder rund 0,55V) oder extern erzeugt werden. Mit dem Ergebnis können Interrupts ausgelöst oder Timer getriggert werden. Mit dem getriggerten Timer sind so PWM-Signale erzeugbar, die von einem Eingangssignal abhängig pulsweiten-moduliert sind. Man kann auch den Vergleich direkt auf einen Port, CAOUT, schalten. Wenn die 2 Eingangsports des Comparators mit + und - bezeichnet sind, dann ist CAOUT High, wenn die Spannung größer ist, die an + anliegt. Welcher der beiden Ports + und welcher - ist, kann mittels der Bits CARSEL und CAEX im Comparator Control Register eingestellt werden.

[Bearbeiten] ADCs

Die AD-Wandler haben eine Auflösung von 10, 12, 14 oder 16 Bit, wobei je nach Typ des MSP430 als Wandlungsverfahren das SAR- (Sukzessive Approximation), Slope- (Rampenverfahren) oder Sigma-Delta-Verfahren eingesetzt wird. Wie bei den Komparatoren benötigt man für AD-Wandler ebenfalls eine Referenzspannung, die intern oder extern erzeugt werden kann. Die Abtastrate kann nominell bis 5 MHz betragen, womit Signale bis theoretisch 2,5 MHz abtastbar wären. Nur erhebt sich die Frage, was mit den Abtastwerten zu tun ist, da die CPU dann maximal 3,2 Taktzyklen (bei 16 MHz) pro Abtastwert zur Verarbeitung zur Verfügung hätte.

[Bearbeiten] DACs

Die DACs haben eine Auflösung von 8 oder 12 Bit. Das analoge Ausgangssignal kann also in 256 oder 4096 Stufen variiert werden. Als Referenzspannung können hier wie bei den Komparatoren und ADCs die internen oder externen Referenzen benutzt werden. Als „Ausgabeformat“ können die binären Daten direkt oder als Zweierkomplement ausgegeben werden. Der Ausgangsverstärker kann automatisch kalibriert werden, damit die Ausgangsspannung korrekt den digitalen Werten folgt. Der DAC selbst kann mit bis zu 550 kHz getaktet werden, was entsprechend eine theoretische Ausgangsfrequenz bis zu 275 kHz ermöglicht.

[Bearbeiten] Operationsverstärker

Bausteine mit integrierten Operationsverstärkern erlauben es, analoge Spannungen zu verstärken (was der Nutzung in Messsystemen zugute kommt). Die Operationsverstärker sind wie der Rest des Bausteins stromsparend und werden aus einer einzigen Spannungsquelle versorgt (single supply, low current). Die Ausgangs- wie die Eingangsspannung kann bis zur Versorgungsspannung reichen (rail to rail). Die Einschwingzeit (settling time) kann bei höherem Stromverbrauch kürzer programmiert werden. Für eine programmierbare Verstärkung sind unterschiedliche Widerstände für die Rückkopplung eingebaut.

[Bearbeiten] LCD-Treiber

Der in den Bausteinen der 4xx-Serie eingebaute LCD-Treiber kann statische und gemultiplexte LCDs versorgen. Dabei sind bis zu 40 Segmente und 4 gemeinsame Anschlüsse möglich. Dafür reicht der Displayspeicher mit 20 Byte aus, der im Adressbereich 0091h bis 00A4h eingeblendet ist. Über externe Widerstände kann der Kontrast eingestellt werden.

[Bearbeiten] Programmierung

Der MSP430 besitzt 16 Register. Register 0 ist der Program-Counter (PC), Register 1 der Stack-Pointer (SP, Stapelspeicher) und Register 2 das Prozessor-Status-Register (PS). Register 3 (Constant-Generator, CG) ist ein Pseudo-Register, das verschiedene Konstanten liefert. Diese vier Register haben spezielle Funktionen, sind aber wie alle anderen zwölf Register auch frei benutzbar. Die Möglichkeit den Program-Counter oder den Stack-Pointer als „freie“ Register zu benutzen wurde bereits bei der PDP-11 verwendet.

Mögliche Adressierungsarten sind Register-Adressierung (Rn), Indizierte Adressierung (X(Rn)), Symbolische Adressierung, Absolute Adressierung, Indirekte Adressierung (@Rn), Indirekte Adressierung mit Autoinkrement (@Rn+) und Direkte Adressierung für Konstanten. Diese Adressierungsarten stehen für den Quell-Operanden zur Verfügung. Bei Instruktionen mit zwei Operanden stehen für den Ziel-Operanden nur Register-Adressierung, Symbolische Adressierung, Absolute Adressierung und Indizierte Adressierung bereit.

Als Programmiersprache bietet sich C an. Die Architektur ist dafür ausgelegt. Zeiger, Arrays und Stapelspeicher lassen sich leicht implementieren. Obwohl der MSP430 einen RISC-Befehlssatz hat, lässt er es zum Teil zu, dass ein C-Ausdruck dank der unterschiedlichen Adressierungsmodi in eine einzelne Maschinenanweisung übersetzt wird. Unterschiedliche kommerzielle und freie C-Compiler stehen zur Verfügung.

[Bearbeiten] Unvollständige Liste der verfügbaren C-Compiler

Name Hersteller Erhältliche Versionen
MSP-CCE430 TI Freeware-Version vorhanden. Bis zu 16 kB Code sind in der neuen Version 3 erlaubt.
IAR EW430 Kickstart TI Freeware, de facto von IAR, mit bis zu 4 kB Code.
AQ430 Quadravox Demo-Version mit Codebegrenzung auf 4 kB.
Crossworks Rowley Associates 30-Tage Demo.
Hi-Tech HI-TECH Software Zeitlich begrenzte Demo-Version erhältlich.
EW430 IAR 30-Tage Demo-Version mit 4 kB Code Limit.
ICC430 Imagecraft 30-Tage Demo
MCC-430 MicroCOSM Demo mit Codebegrenzung auf 4 kB
MSPGCC SourceForge Team Freie GNU-Variante

Es gibt jedoch auch Anwender, die den MSP430 in Assembler programmieren. Da die C-Compiler in der Regel hoch optimierend eingestellt werden können und es eigentlich per se auch schon sind, ist dies wirklich nur für zeitkritische Applikationsteile notwendig. Im Übrigen können bei den meisten C-Compilern C-Code und Assembler gemischt werden.

Ein etwas ausgefallenes aber sehr effizientes Programmier- und Testsystem ist FORTH. Neben einigen OpenSource FORTH-Projekten gibt es ein sehr gutes professionelles FORTH-Entwicklungssystem "Swift-X". Es verwendet die Umgekehrte Polnische Notation (UPN).

Die Programmierung des Bausteins und das Debugging sind über eine JTAG-Schnittstelle zu realisieren. Dazu bietet TI eine als FLASH-Emulation-Tool (FET) bezeichnete Hardware an, die über den Parallelport oder die USB-Schnittstelle des PC auf den JTAG-Port zugreift. In den neuesten Varianten (MSP430F20xx) ist der JTAG-Port (der eigentlich über mindestens vier Signalleitungen und Reset verfügt) durch ein Interface, das TI „Spy Bi-Wire“ nennt, auf 2 Signalleitungen reduziert worden, so daß nur noch vier Anschlüsse auf einem Zielsystem zum Debugging notwendig sind: Zwei für Spy By-Wire, Masse und Versorgungsspannung. Das FET-Tool wird als USB-Stick geliefert. Wenn das Zielsystem die Leistungsanforderungen des USB einhält ist eine externe Spannungsversorgung nicht notwendig.

Des weiteren enthält jeder programmierbare MSP 430 einen Bootstraploader, der über eine RS-232-Schnittstelle das Programmieren der Bausteine erlaubt. Details sind in [1] angeführt.

[Bearbeiten] Liste der FETs, sehr unvollständig

Name Hersteller Schnittstelle Protokoll
MSP-FET430PIF TI Parallel-Port JTAG
MSP-FET430UIF TI USB-Schnittstelle JTAG, Spy-Bi-Wire
eZ430-F2013 TI USB-Schnittstelle Spy-Bi-Wire
eZ430-RF2500 TI USB-Schnittstelle Spy-Bi-Wire
FETP SoftBaugh Parallel-Port JTAG
USBP SoftBaugh USB-Schnittstelle JTAG, Spy-Bi-Wire
MSP430-JTAG Olimex Parallel-Port JTAG
MSP430-JTAG-ISO Olimex USB-Schnittstelle JTAG, Spy-Bi-Wire
MSP430-JTAG-Tiny Olimex USB-Schnittstelle JTAG, Spy-Bi-Wire
MSP430-JTAG-RF Olimex USB-Schnittstelle JTAG, Spy-Bi-Wire


Mit Hilfe des Boot-Loaders kann aber auch über eine serielle Schnittstelle das Programm neu geladen werden.

[Bearbeiten] Trivia/Übertaktung

Ein unfreiwilliges Eingeständnis von TI zur Übertaktung zeigt das Entwicklungstool eZ430: Es beinhaltet als Hostrechner für die USB-Bridge einen MSP430F169. Laut Datenblatt hat dieser eine maximale Taktfrequenz von 8MHz. Der Quarz für diesen Baustein ist aber ein 12MHz Typ. Somit gibt TI hier ein eigenes Produkt mit einer Übertaktung von 50% in den Markt.

[Bearbeiten] Einzelnachweise

  1. Application Note - Features of the MSP430 Bootstrap Loader

1. http://focus.ti.com/mcu/docs/mcusupporttechdocsc.tsp?sectionId=96&tabId=1502&abstractName=slaa089d

[Bearbeiten] Weblinks

Copyright © 2005-2010 Hardware-Aktuell. Alle Rechte vorbehalten.