Inhaltszusammenfassung für Texas Instruments MSP430
Seite 1
TI-Projekt SS12 Thema: Implementierung eines 16 Bit Controllers mit MSP430 Entwicklungsboard ins Praktikum der Rechnerarchitektur Mariela Cuya (Frank Schäfer / Jan Pridal) FH-Köln Campus Gummersbach 05.06.2012...
Die folgende Anleitung soll den Studenten zur Hilfestellung dienen, um einen schnelleren und leichteren Einstieg mit dem Umgang eines MSP430Gxxx Mikrocontroller und IAR’s Simulatorzu ermöglichen. Voraussetzung für das Arbeiten mit dem MSP430 Mikrocontroller sind Vorkenntnisse mit dem Mikrocontroller Moses, da sich beide Mikrocontroller nicht stark voneinander unterscheiden (CPU Architektur und Programmierung).
FH-Köln Campus Gummersbach MSP430 Mikrocontroller 1.- Moses (R65xxx)vs.MSP430 (RISC) Der 6502 ist ein Mikroprozessor mit zweistufiger Pipeline-Architektur, d.h. wenn nur nochinterne Schaltschritte für einen Befehl notwendig sind, kannder nächste Befehl gleichzeitig aus dem Speicher geholt werden. Der Befehlssatz des 6502 kann als „fast orthogonal“ angesehen werden.
Energiesparmodi, ist für tragbare Mess-Anwendungen mit einer längeren Akkulaufzeit ausgerüstet. Das MSP430 verfügt über einen leistungsstarken 16-Bit RISC CPU und ein 16-Bit-Register. Vier der Register, R0 bis R3, werden als Programmzähler, Stack-Pointer, Status-Register oder konstante Generatoren verwendet. Die restlichen Register sind Mehrzweck-Register. Das 16-Bit-Register bietet eine reduzierte Befehlsausführungszeit, die konstanten Generatoren tragen...
FH-Köln Campus Gummersbach MSP430 Mikrocontroller 3. Betriebsarten Der MSP430 verfügt über einen aktiven Modus und fünf einstellbare Energiesparbetriebsarten. Die folgenden sechs Betriebsarten können per Software konfiguriert werden: Betriebsart ACLK SMCLK MCLK Aktiver Modus Low Power Modus 0 (LPM0) Low Power Modus 1 (LPM1)
Verfügung gestellt werden können 5.1. Grundtakt-Modul (Betrieb) Der Mikrocontroller MSP430 umfasst vier Oszillatoren, die als Frequenzquelle für die drei Zähler- Module dienen. Nach einem PUC können MCLK und SMCLK aus einem DCOCLK stammen (bei ~ 1,1 MHz). Das ACLK stammt aus der LFXT1CLK im LF Modus mit einer internen Lastkapazität von 6 pF.
FH-Köln Campus Gummersbach MSP430 Mikrocontroller 5.1.2. Niederfrequenz Oszillator (VLO) Der interne Niederfrequenz-Oszillator (VLO)bietet eine typische Frequenz von 12kHz ohne einen Quarz-Zähler. Die VLOCLK Oszillator-Quelle wird mit LFXT1Sx= 10, wenn XTS= 0definiert.DerOSCOFF- Bitdeaktiviert den VLO für denLPM4-Modus. Der VLO wird für eine Verringerung des zeitigen Stromverbrauchs ausgewählt, solange die LFTXT1 deaktiviert bleibt.
Seite 11
FH-Köln Campus Gummersbach MSP430 Mikrocontroller Beispiel: //****************************************************************************** // MSP430Gxxxx - Basic Clock, MCLK und ACLK // Beschreibung: Puls P1.0 1/100 und P1.6 1/1 aktiver Arbeit Zyklus mittels Software . // VLO mit einer Frequenz von ~ 1.5kHz, Low-Power Modus vorgeführt.
MSP430 Mikrocontroller 6. Steuerleitung (Digitale I/O) MSP430-Geräte haben bis zu acht digitale I / O-Steuerleitungen (Ports) implementiert (P1 bis P8) und verfügen über bis zu acht I/O Pins. Jeder I/O-Pin kann individuell als Eingang oder Ausgang konfiguriert werden. Jede I/O-Leitung kann einzeln gelesen oder beschrieben werden.
Seite 13
FH-Köln Campus Gummersbach MSP430 Mikrocontroller Beispiel: //****************************************************************************** // MSP430G2xx2 Demo - P1 Hardware Interrupt // Beschreibung: CPU ist im Sleep Modus solange kein Hardware Interrupt // ausgelöst wird, ist P1.3 hi P1.0 LED an oder low, P1.0 LED aus ACLK = n/a, MCLK = SMCLK = default DCO...
FH-Köln Campus Gummersbach MSP430 Mikrocontroller 7. Überwachungstimer (Watchdog TimerWDT +) Die primäre Funktion des WDT + Modul ist für die Durchführung eines gesteuerten Systems zuständig, wenn nach einem Software-Neustart Probleme auftreten sollten. Nach dem Ablauf eines Zeitintervalls wird vom System ein Reset durchgeführt. Wenn die Überwachungstimer-Funktion nicht für die Anwendung benötigt wird, kann sie als Intervall-Timer konfiguriert werden und für bestimmte...
FH-Köln Campus Gummersbach MSP430 Mikrocontroller 8.- Interrupt-Vektor Bei einem Interrupt Vektor handelt es sich um einen Zeiger auf eine Interrupt Service Routine Es gibt eine Vielzahl an Ereignissen, die wiederum eine Vielzahl verschiedener Interrupt Service Routinen aufrufen können, wobei jedem Ereignis eine bestimmte Interrupt Service Routine fest zugeordnet ist.
Seite 16
FH-Köln Campus Gummersbach MSP430 Mikrocontroller Interrupt-Freigabe Adresse 7 NMIIE OFIE WDTIFE WDTIFG : Freigabe des Wachtdog Timer Interrupt OFIFE : Freigabe des Oszillator-Interrupts NMIIE : Freigabe des Interrupts-NMI Adresse unbenutzt Interrupt-Flag Adresse NMIIFG RSTIFG PORIFG OFIFG WDTIFG WDTIFG : Watchdog-Timer-Überlauf, Einschalten oder Reset am RST / NMI...
FH-Köln Campus Gummersbach MSP430 Mikrocontroller 9. Timer A und Timer B Die Timer bestehen aus mehreren Capture/Compare-Register, PWM-Ausgängen und Zeitintervallen. Die Timer verfügen über umfassende Interrupts-Funktionen, die bei einer Überlauf-Bedingung und von jedem Capture/Compare-Register ausgelöst werden können. Der Timer B ist bei den von uns verwendeten Controllern nicht verfügbar! Timer Merkmale: 1.
FH-Köln Campus Gummersbach MSP430 Mikrocontroller 9.3 Timer-Modus Der Timer hat vier Modi als Operationen, die durch MCx konfiguriert werden Modi Beschreibung Stop Timer wird angehalten Timer wiederholt das Zählen von 0 bis zu dem Wert von TACCR0 Continuous Timer wiederholt das Zählen von 0 bis 0FFFFh Up/Down Timer wiederholt das Zählen von 0 bis zu dem Wert von TACCR0 und...
FH-Köln Campus Gummersbach MSP430 Mikrocontroller 9.3.2 Continuos Modus Das TACCR0 Register arbeitet vergleichsweise wie ein Capture/Compare Register. Der TAIG Interrupt Flag wird gesetzt, wenn der Timer von 0FFFFh bis null zählt. Im Continuos Modus wird auch der Interrupt Flag zyklisch gesetzt. Der Continuos Modus kann zur Erzeugung von verschiedenen Zeitintervallen und unterschiedlichen Ausgangsfrequenzen verwendet werden.
FH-Köln Campus Gummersbach MSP430 Mikrocontroller 9.4 Taktung und Teilung Der Timer kann aus der ACLK/SMCLK oder extern aus der TACLK/INCLK erfolgen. Die Auswahl des Taktgebers (Clock) erfolgt durch die TASSELx Bits. Der ausgewählte Taktgeber (Clock) kann direkt in den Timer weitergegeben oder dividiert werden (2, 4 oder 8 mit den IDx Bits). Der Timer, Zeitgeber und Teiler werden zurückgesetzt, wenn der TACLR gesetzt wird...
Hardwareinterrupt implementieren. Während unserer ausgiebigen Tests und Versuche haben wir z.B. folgende wichtige Erkenntnisse erlangt, die man bei der Entwicklung einer Applikation für den MSP430 Controller immer berücksichtigen sollte: 1.: Bei Verwendung von Timer Funktionen sollten immer alle Timer Interrupt Service Routinen im Programm implementiert werden.
FH-Köln Campus Gummersbach MSP430 Mikrocontroller Beispiel 1: 9.5.1 CCTL0 enabled, CCTL1 disabled und TAIE im TACTL gesetzt #include <msp430G2231.h> int X = 0; unsigned int TimeValue = 10000; void INIT(); //-----------------------MAIN PROGRAM-------------------------------- int main( void ) if (X==0) INIT(); X = 1;...
Seite 23
FH-Köln Campus Gummersbach MSP430 Mikrocontroller //............. //-------------------IRQ SERVICE ROUTINES--------------------------- //TimerA0 interrupt service routine #pragma vector=TIMERA0_VECTOR __interrupt void TIMERA0_ISR(void) // CCTL0.CCIFG flag will acknowledge automatically P1OUT^=0x01; // Toggle P1.0 //------------------------------------------------------------------ //TimerA1 interrupt service routine #pragma vector=TIMERA1_VECTOR __interrupt void TIMERA1_ISR(void) // Acknowledge TAIFG IRQ Flag by reading TAIV register via switch operation...
Seite 24
FH-Köln Campus Gummersbach MSP430 Mikrocontroller P1.0 : Toggle Time = P1.1 : Toggle Time IRQ A0-Timer Intervall = 68 ms (CCR0 = 10000) 10.000 * 6,8µs = 68 ms IRQ A1-Timer Intervall = 68 ms (CCR0 = 10000) 10.000 * 6,8µs = 68 ms...
Seite 25
FH-Köln Campus Gummersbach MSP430 Mikrocontroller Bemerkung: Dieses Bild zeigt die Verzögerung zwischen A0-Timer Interrupt (gelb) und A1-Timer Interrupt (grün). Beim Up-Mode sollte diese Zeit eigentlich nur einen Clock betragen. Wie auch beim 6802 (Moses) sind Messungen im µs Bereich nicht realisierbar, da die Abarbeitungszeit einer C oder Assembler Anweisung schon >...
FH-Köln Campus Gummersbach MSP430 Mikrocontroller Beispiel 2: 9.5.2 CCTL0 enabled, CCTL1 enabled mit (TA)CCR1 = (TA)CCR0/2 und TAI im TACTL gesetzt #include <msp430G2231.h> int X = 0; unsigned int TimeValue = 10000; void INIT(); //-----------------------MAIN PROGRAM-------------------------------- int main( void ) if (X==0) INIT();...
Seite 27
FH-Köln Campus Gummersbach MSP430 Mikrocontroller //(prescaler =8)) the time for 1 clock = 6,8µs! //............. //-------------------IRQ SERVICE ROUTINES--------------------------- //TimerA0 interrupt service routine #pragma vector=TIMERA0_VECTOR __interrupt void TIMERA0_ISR(void) // CCTL0.CCIFG flag will acknowledge automatically P1OUT^=0x01; // Toggle P1.0 //------------------------------------------------------------------ //TimerA1 interrupt service routine...
Seite 28
FH-Köln Campus Gummersbach MSP430 Mikrocontroller P1.0 : Toggle Time = IRQ A0-Timer Intervall = 68 ms (CCR0 = 10000) 10.000 * 6,8µs = 68 ms P1.1 : Toggle Time = IRQ A1-Timer Intervall = 34 ms (CCR1 = 5000) ...
FH-Köln Campus Gummersbach MSP430 Mikrocontroller Beispiel 3: 9.5.3 CCTL0 enabled, CCTL1 disabled und TAIE im TACTL nicht gesetzt #include <msp430G2231.h> int X = 0; unsigned int TimeValue = 10000; void INIT(); //-----------------------MAIN PROGRAM-------------------------------- int main( void ) if (X==0) INIT();...
Seite 30
FH-Köln Campus Gummersbach MSP430 Mikrocontroller //............. //-------------------IRQ SERVICE ROUTINES--------------------------- //TimerA0 interrupt service routine #pragma vector=TIMERA0_VECTOR __interrupt void TIMERA0_ISR(void) // CCTL0.CCIFG flag will acknowledge automatically P1OUT^=0x01; // Toggle P1.0 //------------------------------------------------------------------ //TimerA1 interrupt service routine #pragma vector=TIMERA1_VECTOR __interrupt void TIMERA1_ISR(void) // Acknowledge CCTL1.CCIFG IRQ-Flag and/or TAIFG IRQ Flag by reading...
Seite 31
FH-Köln Campus Gummersbach MSP430 Mikrocontroller Wenn sowohl CCTL1 disabled ist, also ein CCR1 event keinen Timer A1 Interrupt auslösen kann und auch der Timer A Interrupt nicht freigegeben ist durch setzen von TAIE im TACTL, also das automatische 0 setzen von TAR im Up-Mode auch keinen Timer A1 Interrupt mehr auslösen kann, dann wird nur noch die Timer A0 Interrupt Service Routine benötigt und bearbeitet.
FH-Köln Campus Gummersbach MSP430 Mikrocontroller 9.6 Capture / Compare Modus Für Timer A Im Timer A sind bis zu drei gleiche Empfangs- bzw. Vergleichsblöcke (TACCRx). Jeder der Blöcke kann verwendet werden, um die Daten der Timer zu erfassen oder Zeitintervalle zu erzeugen.
FH-Köln Campus Gummersbach MSP430 Mikrocontroller 9.7. Capture-Modus Der Capture Modus wird für die Aufzeichnung oder Berechnung von analogen und digitalen Signalen verwendet. Er wird gewählt, wenn GAP = 1 ist. Die Eingänge CCIxA und CCIxB sind mit externen Pins oder internen Signalen verbunden und werden durch CCISx Bits gewählt. Die CMx-Bits wählen die Flanke des Eingangssignals als steigend, fallend oder beides aus.
FH-Köln Campus Gummersbach MSP430 Mikrocontroller 10. Ausgangsbaugruppe(Output Unit) Jeder Empfangs-/Vergleichs-Block enthält eine Ausgabeeinheit. Die Ausgabeeinheit wird verwendet um Ausgangssignale zu erzeugen. Jeder Ausgang verfügt über acht Betriebsarten, die Signale auf Basis der EQU0 und EQUx Signale erzeugen. 11. Timer-Interrupts Zwei Interrupt-Vektoren sind mit dem 16-Bit-Timer x Modul verbunden: •...
Seite 35
FH-Köln Campus Gummersbach MSP430 Mikrocontroller Wenn die TxCCR1 und TxCCR2 CCIFG Flags gesetzt sind, greift die Interrupt-Routine auf die TxIV Register zu und der TxCCR1 CCIFG wird automatisch zurückgesetzt. Nachdem die Ausführung von der RETI Interrupt-Routine erfolgt ist, wird über TxCCR2 CCIFG eine weitere Interrupt-Routine ausgeführt.
FH-Köln Campus Gummersbach MSP430 Mikrocontroller 12. Aufbau der wichtigsten Timer A Register TACTL, Timer_A Control Register TAR, Timer_A Register TACCRx, Timer_A Capture/Compare Register x TACCTLx, Capture/Compare Control Register TAIV, Timer_A Interrupt Vector Register 35 | S e i t e...
FH-Köln Campus Gummersbach MSP430 Mikrocontroller 13. Implementierung einer Praktikumsaufgabe in RA Praktikum “Entwicklung einer asynchron, bitseriellen Empfangsschnittstelle für ASCII-Zeichen“ Erläuterung: Jeweils ein ASCII-Zeichen soll mittels Pattern Generator Bitseriell zum Controller pro Telegramm übertragen werden. Es soll immer das zuletzt empfangene Zeichen auf einem 8-Bit Ausgangsport des MSP ausgegeben und mittels LED-Box visualisiert werden.
MSP430 Mikrocontroller 13.1 Der Versuchsaufbau: MSP 430 Controller Box mit 2mm Steckersystem Pattern Generator zur Erzeugung des TxD-Signals P1.7 des MSP430 5V Spannungsquelle (Moses Portbox) zur Versorgung der LED Box Konfiguration des USB – Pattern Generators von Deditec: 37 |...
FH-Köln Campus Gummersbach MSP430 Mikrocontroller 14. Das realisierte C Programm für den Empfang und die Ausgabe von ASCII Zeichen Funktionsbeschreibung: Es werden (variable) 10 Zeichen vom Pattern Generator empfangen und in einem FIFO Array zwischengespeichert. Die aktuelle Anzahl der FIFO Einträge wird auf Port 1.0 bis P1.6 im Dual Code angezeigt.
Seite 41
FH-Köln Campus Gummersbach MSP430 Mikrocontroller //---------- Main Function ------------------------------------- int main( void ) Start: enable = 1; //Freigabe für Initialisierung INIT(enable); //Initialisierungsfunktion RECEIVE(Number); //Empfangsfunktion für n ASCII Zeichen DISPLAY(Number); //Empfangene Zeichen anzeigen //..Ende....enable = 0; INIT(enable); //IRQ's sperren //......
Seite 42
FH-Köln Campus Gummersbach MSP430 Mikrocontroller // Timer deaktivieren vorab TACTL = MC_0; //Timer beenden CCR0 = 0; //Counter Control Register löschen CCTL0 = 0x00; // CCR0 interrupt disabled CCTL1 = 0x00; // CCR1 interrupt disabled //..............//Low Power Management(wake up on interrupt) + IRQ-Freigabe //Danach geht CPU in Stop, bis zum 1.
Seite 43
FH-Köln Campus Gummersbach MSP430 Mikrocontroller //Ausgabe der laufenden akt. Empfangs-Nr. auf Port 1 P1OUT = (unsigned char)i+1; //........ //-------------------------------------------------------------- void DISPLAY(int n) fDisplayActive = 1; //Zeichen-Ausgabe Mode aktiv setzen für TIRQ //.... Timer starten .... CCTL1 = 0x00; // CCR1 interrupt disabled CCTL0 = CCIE;...
Seite 44
FH-Köln Campus Gummersbach MSP430 Mikrocontroller //----------------- Interrupt Service routines ----------------- //TimerA0 interrupt service routine //================================= #pragma vector=TIMERA0_VECTOR __interrupt void TIMERA0_ISR(void) if(fDisplayActive == 1) //Zeichenausgabe auf Port 1 nach Empfang aller Zeichen fDisplayTimeReady = 1; else if(fFrameActive == 1) //sonst Zeichenempfang bearbeiten if(BitCount == 0) //Wenn 1.
FH-Köln Campus Gummersbach MSP430 Mikrocontroller 14.1 Normierung der Timerwerte Um exakte Zeitwerte mit dem Zählregister zu realisieren muss die Zeit für einen Clock Tick bekannt sein, also die Zeit die der Zähler benötigt um seinen Zählerstand um 1 zu erhöhen.
FH-Köln Campus Gummersbach MSP430 Mikrocontroller 15. Ein weiterer Vorschlag für eine Praktikumsaufgabe Im definierten Zeittakt (z.B. 1 Sek.) einen änderbaren Analogwert mit vorhandenem Analog- Digitalkonverter und MOSES einlesen und Tetraden seriell an den MSP 430 Controller senden. Auf dem Controller dann den empfangenen Spannungswert (0..2,55V) mit parametrierten Vergleichswerten vergleichen und den aktuellen Spannungszustand visualisieren.