如何在自由运行模式下启用 Teensy 4.x GPT 定时器
在此示例中,我们将使用直接寄存器访问以 8 MHz 计数频率在自由运行模式下启用 GPT1 定时器模块。自由运行模式意味着定时器在达到 0xFFFFFFFF(最大 32 位值)后会回绕。
如何配置定时器
gpt1_config.cpp
CCM_CCGR1 |= CCM_CCGR1_GPT1_BUS(CCM_CCGR_ON); // 向 GPT1 模块启用时钟
GPT1_CR = 0; // 禁用以进行配置
GPT1_PR = 3 - 1; // 将 24 MHz 时钟预分频 3 => 8 MHz
GPT1_CR = GPT_CR_EN /* 启用定时器 */
| GPT_CR_CLKSRC(1) /* 24 MHz 外设时钟作为时钟源 */
| GPT_CR_FRR /* 自由运行,不重置 */;完整示例
此示例在 PlatformIO 中无需任何外部库即可工作,但你需要在 platformio.ini 中设置 monitor_speed = 115200 以便以正确速度读取串口。
teensy_gpt1_example.ino
#include <Arduino.h>
void setup()
{
// 设置 USB 串口以便我们可以打印定时器值
Serial.begin(115200);
// 启用定时器
CCM_CCGR1 |= CCM_CCGR1_GPT1_BUS(CCM_CCGR_ON); // 向 GPT1 模块启用时钟
GPT1_CR = 0; // 禁用以进行配置
GPT1_PR = 3 - 1; // 将 24 MHz 时钟预分频 3 => 8 MHz
GPT1_CR = GPT_CR_EN /* 启用定时器 */
| GPT_CR_CLKSRC(1) /* 24 MHz 外设时钟作为时钟源 */
| GPT_CR_FRR /* 自由运行,不重置 */;
}
void loop()
{
// 每 ~100 毫秒打印定时器计数
Serial.println(GPT1_CNT);
delay(100);
}Check out similar posts by category:
Electronics, Embedded, Teensy
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow