How to enable Teensy 4.x GPT timer in free running mode
In this example, we’ll use direct register access to enable the GPT1
timer module at 8 MHz
counter frequency in free-running mode. Free-running mode means that the timer will just roll over once it has reached 0xFFFFFFFF
(maximum 32 bit value).
How to configure the timer
CCM_CCGR1 |= CCM_CCGR1_GPT1_BUS(CCM_CCGR_ON); // Enable clock to GPT1 module
GPT1_CR = 0; // Disable for configuration
GPT1_PR = 3 - 1; // Prescale 24 MHz clock by 3 => 8 MHz
GPT1_CR = GPT_CR_EN /* Enable timer */
| GPT_CR_CLKSRC(1) /* 24 MHz peripheral clock as clock source */
| GPT_CR_FRR /* Free-Run, do not reset */;
Full example
This example works in PlatformIO without any external libraries, but you need to set monitor_speed = 115200
in platformio.ini
so the serial port is read at the correct speed.
#include <Arduino.h>
void setup()
{
// Setup USB serial port so we can print the timer value
Serial.begin(115200);
// Enable timer
CCM_CCGR1 |= CCM_CCGR1_GPT1_BUS(CCM_CCGR_ON); // Enable clock to GPT1 module
GPT1_CR = 0; // Disable for configuration
GPT1_PR = 3 - 1; // Prescale 24 MHz clock by 3 => 8 MHz
GPT1_CR = GPT_CR_EN /* Enable timer */
| GPT_CR_CLKSRC(1) /* 24 MHz peripheral clock as clock source */
| GPT_CR_FRR /* Free-Run, do not reset */;
}
void loop()
{
// Print the timer count every ~100 ms
Serial.println(GPT1_CNT);
delay(100);
}