Skip to content

Latest commit

 

History

History
180 lines (126 loc) · 10 KB

File metadata and controls

180 lines (126 loc) · 10 KB

⬅ Zurück zur Kapitelübersicht

Clock System, TimerB0 Konfiguration

Inhalt

Laborübung

Wissensüberprüfung

!!Taschenrechner für Frequenzberechnung empfohlen!!

Video

Durchzuführende Aufgaben


Taktquellen und Taktverteilung im MSP430

Bevor der Unified Clock System (UCS) konfiguriert wird, ist es hilfreich, die grundlegende Struktur des Taktsystems des MSP430 zu verstehen. Die folgende Abbildung zeigt die drei zentralen Taktpfade:

MSP430 Clock System Diagram

Oszillatoren und Taktquellen

  • VLO: Very Low Frequency Oscillator (typ. 10 kHz), stromsparend, geringe Genauigkeit
  • LFXT1: Low-Frequency Crystal (z. B. 32.768 Hz Quarz)
  • XT2: Optionaler Hochfrequenzquarz (z. B. 20 MHz)
  • DCO: Digitally Controlled Oscillator – Haupttaktquelle für schnellen Systemtakt (bis 25 MHz)

Taktverteilung über Selektoren und Teiler

Die Taktquellen können über Multiplexer (Selector) jeweils einem der drei Haupttakte zugewiesen werden. Jeder Takt kann zusätzlich durch einen Teiler reduziert werden:

  • ACLK (Auxiliary Clock): für stromsparende Peripherien (z. B. RTC, Timer)
  • SMCLK (Sub-Main Clock): für schnelle Peripherien (Timer, UART, etc.)
  • MCLK (Main Clock): Systemtakt für die CPU

Die Register SELAx, SELSx, SELMx steuern die Zuweisung der Taktquellen, während DIVAx, DIVSx, DIVMx die Division der Frequenz konfigurieren.

Beispiel

Wenn z. B. XT2 = 20 MHz ist und über SELMx dem MCLK zugewiesen wird, ergibt sich:

  • MCLK = 20 MHz
  • SMCLK = 2.5 MHz (XT2 mit Divider /8)
  • ACLK = 32.768 Hz (aus REFO)

Diese Konfiguration bildet die Basis für Timer- und UART-Module, die auf eine präzise Taktrate angewiesen sind.


Power Management Module (PMM)

Das PMM wird in dieser Laborübung nicht detailliert behandelt, eine Grundkonfiguration ist jedoch notwendig, um den MSP430 mit 20 MHz betreiben zu können. Binden Sie hierzu hal_pmm.c und die zugehörige Header-Datei gemäß Anlegen eines Projektes ein.


Unified Clock System (UCS)

Um die Peripherie und Systemkomponenten im MSP430 korrekt zu betreiben, muss das Taktungssystem konfiguriert werden. Zwar ist initial eine Default-Konfiguration aktiv, für Hochfrequenzbetrieb (z. B. 20 MHz) sind jedoch explizite Schritte notwendig. Ist ein Quarz angeschlossen, so muss dieser per Pinmux freigeschaltet und das UCS-Modul entsprechend parametriert werden. Achten Sie auf Frequenzvorgaben, Genauigkeit und Energieverbrauch bei der Auswahl der Taktquelle.

Durchzuführende Arbeit & Dokumentation für die Meilensteinüberprüfung

  1. Konfigurieren Sie die XT2-Pins in hal_gpio.c, sodass der Quarz korrekt mit dem UCS-Modul verbunden ist. (siehe MSP430F5335 Datasheet, S. 92)

  2. Neues HAL-Modul: hal_ucs.c/.h

    • Implementieren Sie hal_ucsInit() und rufen Sie diese Funktion innerhalb von hal_Init() auf.

    Hilfestellung: Register laut Family User Guide Kapitel 5: UCSCTLx

    void hal_ucsInit(void)
    {
        UCSCTL6 &= ~XT2OFF;             // XT2 einschalten
        UCSCTL3 |= SELREF_2;            // FLL Referenz = REFO
        UCSCTL4 |= SELA_2;              // ACLK = REFO
    
        // Warten bis Fehlerflags gelöscht sind
        while (SFRIFG1 & OFIFG)
        {
            UCSCTL7 &= ~(XT2OFFG + DCOFFG + XT1HFOFFG + XT1LFOFFG);
            SFRIFG1 &= ~OFIFG;
        }
    
        UCSCTL6 &= ~(XT2DRIVE_1);       // Drive-Strength reduzieren (nach Anlauf)
        UCSCTL4 |= SELS_5 + SELM_5;     // SMCLK und MCLK = XT2
        UCSCTL5 |= DIVS_3;              // SMCLK Divider setzen (z. B. /8)
    }

    Was passiert hier? Der Oszillator XT2 wird aktiviert, Fehlerflags werden gelöscht, und die Systemtakte (MCLK, SMCLK) werden auf die Quarzquelle umgelegt. Der korrekte Betrieb wird durch Abfrage der Fault-Flags abgesichert.

  3. Taktkonfiguration

    • MCLK = 20 MHz
    • SMCLK = 2.5 MHz (z. B. über Divider /8)
    • ACLK = beliebig (z. B. REFO = 32.768 Hz)
  4. Frequenzmessung:

    • SMCLK an GPIO ausgeben und mit Oszilloskop messen. Dazu den jeweiligen Pin in hal_gpio.c korrekt konfigurieren.
  5. Frequenzen im Header definieren:

    #define XTAL_FREQU   20000000
    #define MCLK_FREQU   20000000
    #define SMCLK_FREQU   2500000

    (Optional: Prüfen Sie, ob sich durch Anpassen des SMCLK-Dividers verschiedene Timerfrequenzen effizient ableiten lassen.)


Timer Interrupts – Timer B0

Applikationen, die auf Mikrocontrollern ablaufen, erfordern meist ein genaues Timing. Dieses Timing bzw. zyklische Aufrufen von Funktionen, Routinen oder Triggern kann durch einen Timer realisiert werden. Diese Timer sind Teil der Peripherie des Mikrocontrollers und laufen in Hardware – verbrauchen somit keine CPU-Rechenzeit.

Der TimerB0 soll so konfiguriert werden, dass die Hintergrundbeleuchtung des Displays im 2 Hz-Takt blinkt. Verwenden Sie dazu das Capture/Compare-Register 0 (TBCCR0) und den SMCLK als Eingangstaktquelle.

Hilfestellung: Family User Guide (Kapitel 18, Seite 482). Achten Sie auf die Konfiguration von: TBxCTL, TBxCCTL0, TBxEX0, TBxCCR0

Interrupt Vector: TIMERB0_VECTOR (für CCR0)

Durchzuführende Arbeit & Dokumentation für die Überprüfung der Meilensteine

  1. Erstellen Sie ein neues HAL-Modul hal_timerB0.c und hal_timerB0.h, und schreiben Sie eine Funktion hal_TimerB0Init(). Diese soll in der hal_Init() Funktion aufgerufen werden.

  2. Konfigurieren Sie den Timer entsprechend der Vorgaben. Schalten Sie die Hintergrundbeleuchtung des Displays mittels Makros in der ISR des Timers ein bzw. aus. Tipp: Toggle I/O Pin.

  3. Verwenden Sie für die Berechnung des Timer-Werts die im UCS-Modul definierten Werte. Definieren Sie auch die Ausgangsfrequenz des Timers mittels #define. TimerB0 soll so konfiguriert werden, dass die Hintergrundbeleuchtung des Displays im 2Hz Takt blinkt.

  4. Fragen Sie in der ISR das richtige Interrupt-Flag des Timers ab.

  5. Kontrollieren und dokumentieren Sie die Frequenz der Hintergrundbeleuchtung mit dem Oszilloskop.

Zusätzlich Fragen für die Meilensteinüberprüfung

  • Welche Vorteile bietet Timer-Hardware gegenüber softwarebasierter Zeitsteuerung?
  • Wie viele unabhängige Timer besitzt der MSP430F5335, und wie unterscheiden sich TimerA und TimerB?
  • Wie beeinflusst die Auswahl von SMCLK-Divider und TBxEX0-Divider die maximale Auflösung und Reichweite des Timers?
  • Kann ein zweiter Timer für PWM-Erzeugung parallel verwendet werden, ohne den ersten zu beeinflussen?

Falls im späteren Verlauf PWM, ADC-Trigger oder Watchdog-Funktionalitäten benötigt werden, sollten die vorhandenen Timerkanäle effizient verwaltet werden.

Referenzen

  • MSP430x5xx and MSP430x6xx Family User Guide, Texas Instruments, Literature Number: SLAU208O, Rev. O, April 2019.
    Verfügbar unter: https://www.ti.com/lit/pdf/slau208

  • MSP430F5335 Datasheet, Texas Instruments, Document Number: SLAS590N, Rev. N, October 2018.
    Verfügbar unter: https://www.ti.com/lit/gpn/msp430f5335

  • John H. Davies, MSP430 Microcontroller Basics, Newnes/Elsevier, ISBN 978‑0‑7506‑8276‑3.

⬆ Zurück zum Hauptverzeichnis