Teensy 4.x GPT-Timer im Free-Running-Modus aktivieren

English Deutsch

In diesem Beispiel verwenden wir direkten Registerzugriff, um das GPT1-Timer-Modul bei 8 MHz-Zählfrequenz im Free-Running-Modus zu aktivieren. Free-Running-Modus bedeutet, dass der Timer einfach überläuft, sobald er 0xFFFFFFFF (maximaler 32-Bit-Wert) erreicht hat.

Timer konfigurieren

gpt1_config.cpp
CCM_CCGR1 |= CCM_CCGR1_GPT1_BUS(CCM_CCGR_ON); // Clock für GPT1-Modul aktivieren
GPT1_CR = 0; // Für Konfiguration deaktivieren
GPT1_PR = 3 - 1; // 24-MHz-Takt durch 3 teilen => 8 MHz
GPT1_CR = GPT_CR_EN /* Timer aktivieren */
    | GPT_CR_CLKSRC(1) /* 24-MHz-Peripherie-Takt als Taktquelle */
    | GPT_CR_FRR /* Free-Run, nicht zurücksetzen */;

Vollständiges Beispiel

Dieses Beispiel funktioniert in PlatformIO ohne externe Bibliotheken, aber Sie müssen monitor_speed = 115200 in platformio.ini setzen, damit die serielle Schnittstelle mit der korrekten Geschwindigkeit gelesen wird.

teensy_gpt1_example.ino
#include <Arduino.h>

void setup()
{
    // USB-Serielle Schnittstelle einrichten, damit wir den Timer-Wert ausgeben können
    Serial.begin(115200);

    // Timer aktivieren
    CCM_CCGR1 |= CCM_CCGR1_GPT1_BUS(CCM_CCGR_ON); // Clock für GPT1-Modul aktivieren
    GPT1_CR = 0; // Für Konfiguration deaktivieren
    GPT1_PR = 3 - 1; // 24-MHz-Takt durch 3 teilen => 8 MHz
    GPT1_CR = GPT_CR_EN /* Timer aktivieren */
      | GPT_CR_CLKSRC(1) /* 24-MHz-Peripherie-Takt als Taktquelle */
      | GPT_CR_FRR /* Free-Run, nicht zurücksetzen */;
}

void loop()
{
    // Timer-Zähler alle ~100 ms ausgeben
    Serial.println(GPT1_CNT);
    delay(100);
}

Check out similar posts by category: Electronics, Embedded, Teensy