- Taktquellen und Taktverteilung im MSP430
- Oszillatoren und Taktquellen
- Taktverteilung über Selektoren und Teiler
- Power Management Module (PMM)
- Unified Clock System (UCS)
- Timer Interrupts – Timer B0
- Zusätzlich Fragen für die Meilensteinüberprüfung
Laborübung
- MSP430x5xx and MSP430x6xx Family User Guide Rev. O – Texas Instruments
- Kapitel 5: Unified Clock System Family Guide - Unified Clock System
- Kapitel 18: Timer B Family Guide - Timer B
- Crazy Car Controller FHJ Schaltplan (Quarz, Clock) Crazy Car Schematic
Wissensüberprüfung
- Kapitel 5.1: Unified Clock System (UCS) Introduction
- Clock Sources
- UCS Clock Signals
- Kapitel 18.1: Timer B Introduction
- Beschreibung
- Timer-Bitbreite
- Blockschaltbild
- Kapitel 18.2.3: Timer B Mode Control
- Table 18-1. Timer Modes
- Kapitel 18.2.3.1: Up Mode
- Zusammenhang: Eingangsfrequenz → Timer-Teiler (TBxCL0, TBxCCR0) → Ausgangsfrequenz
!!Taschenrechner für Frequenzberechnung empfohlen!!
Video
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:
- 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)
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.
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.
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.
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.
-
Konfigurieren Sie die XT2-Pins in
hal_gpio.c, sodass der Quarz korrekt mit dem UCS-Modul verbunden ist. (siehe MSP430F5335 Datasheet, S. 92) -
Neues HAL-Modul:
hal_ucs.c/.h- Implementieren Sie
hal_ucsInit()und rufen Sie diese Funktion innerhalb vonhal_Init()auf.
Hilfestellung: Register laut Family User Guide Kapitel 5:
UCSCTLxvoid 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.
- Implementieren Sie
-
Taktkonfiguration
- MCLK = 20 MHz
- SMCLK = 2.5 MHz (z. B. über Divider /8)
- ACLK = beliebig (z. B. REFO = 32.768 Hz)
-
Frequenzmessung:
- SMCLK an GPIO ausgeben und mit Oszilloskop messen. Dazu den jeweiligen Pin in
hal_gpio.ckorrekt konfigurieren.
- SMCLK an GPIO ausgeben und mit Oszilloskop messen. Dazu den jeweiligen Pin in
-
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.)
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)
-
Erstellen Sie ein neues HAL-Modul
hal_timerB0.cundhal_timerB0.h, und schreiben Sie eine Funktionhal_TimerB0Init(). Diese soll in derhal_Init()Funktion aufgerufen werden. -
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.
-
Verwenden Sie für die Berechnung des Timer-Werts die im UCS-Modul definierten Werte. Definieren Sie auch die Ausgangsfrequenz des Timers mittels
#define.TimerB0soll so konfiguriert werden, dass die Hintergrundbeleuchtung des Displays im 2Hz Takt blinkt. -
Fragen Sie in der ISR das richtige Interrupt-Flag des Timers ab.
-
Kontrollieren und dokumentieren Sie die Frequenz der Hintergrundbeleuchtung mit dem Oszilloskop.
- 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.
-
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.
