全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 控制/MCU >

【S32K 进阶之旅】如何使用 S32K3 PIT 定时器实现精

时间:2025-03-10 16:33

人气:

作者:admin

标签: 定时器  s32k  LED  NXP  PIT 

导读:周期中断定时器(PeriodicInterruptTimer,PIT)模块顾名思义,就是通过计时行为引发周期性中断事件的触发器。本文基于S32K312开发板实现延时功能,在此之前先简单介绍下PIT的特性。1.PIT模块特...

前言

周期中断定时器 (Periodic Interrupt Timer, PIT) 模块顾名思义,就是通过计时行为引发周期性中断事件的触发器。本文基于 S32K312 开发板实现延时功能,在此之前先简单介绍下 PIT 的特性。

1. PIT 模块特性

根据下图查表可知,不同型号 S32K3 支持的 PIT 数量不同。最多有 4 组 PIT 模块,每组有四路 PIT 通道,每路通道长度为 32-bit,其中 PIT_0 可链接两路定时器并组成 64-bit lifetimer 生命定时器

wKgZPGfPi8mAEN96AAEJALhi4OA219.png

PIT 时钟源为 AIPS_SLOW_CLK,其中 PIT_0 包含一路 RTI 时钟源来自 SIRC_CLK(32KHz),可用于Standby模式下的系统唤醒。

wKgZPGfPi8mAW2OUAAA3wOqMzqI808.png

可用于引发中断和触发DMA通道

PIT 的每个通道都可独立配置超时时限

如下图所示,PIT 定时的时长由预装载值决定,所有通道都是递减计数方式,当计时器计数到0会触发定时器中断,自动重装载值并立刻进入下一个周期。

wKgZPGfPi8mAPTYGAADujD73XL8970.png

2. PIT 驱动配置

在 S32K3 工程的驱动配置界面添加 PIT 组件

wKgZO2fPi8mAGvhnAAEF3vPc2Us492.png

依次配置各个功能项

选择 “GptChannelConfigSet” 选项卡

点击“加号”按钮添加定时器通道

选择要配置的 PIT 实例,我们选用 PIT_0

如果需要启用 Debug 模式下暂停的功能,那么 “PitFreezeEnable” 项使能

选择对应的定时器通道,我们选用通道 0

如果需要 64-bit 定时器的话,启用 “ChainMode”,本文示例没有用到

“PitNotification” 设置该通道发生超时中断时调用的回调函数

选择 “PitChannelMode” 连续模式或者单次模式,两种模式都可以,如果选择单次模式,每次发生超时中断时会自动关闭 PIT 通道,再次使用时需重新启用该通道

选择 “GptHwConfiguration” 选项卡,使能 PIT_0_CH_0 通道和中断

wKgZO2fPi8mAdbtVAAEirSn7OIM521.pngwKgZO2fPi8mARkiWAADU65mQqy4883.png


在 IntCtrl_Ip 组件中添加 PIT 的中断服务程序。

如果此处没有配置,则必须在程序初始化时安装 PIT 中断处理函数。

wKgZO2fPi8mAA9Q3AACjNF71zkU422.png

更新源代码,将会生成以下头文件和源文件

Pit_Ip_BOARD_InitPeripherals_PBcfg.h

Pit_Ip_Cfg.h

Pit_Cfg_Defines.h

Pit_Ip_BOARD_InitPeripherals_PBcfg.c

wKgZPGfPi8mASSGgAAEIn_LxDY8047.png

下列驱动层文件也会自动添加到工程中

RTD/src/Pit_Ip .c

RTD/include/Pit_Ip.h

RTD/include/Pit_Ip_Types.h

3. 延时函数实现

在文件上方增加 “Pit_Ip.h” 和 “IntCtrl_Ip.h” 头文件。

添加 PIT_0 实例的宏定义,方便函数调用。

wKgZO2fPi8mAZpqbAAAv3WbmSOw488.png

main 函数中添加 PIT 和 Interrupt 初始化语句,一定要最先初始化时钟,再是其他外设。这里也配置了一路 GPIO 用于控制开发板上的 LED,演示延时效果。

wKgZO2fPi8mALzL_AAD0CLznn34402.png

创建 PIT0_CH0 对应的回调函数,中断事件发生时可以在此处分配任务。这里的函数名要与 “PitNotification” 配置中的名称保持一致。

wKgZPGfPi8mAJxTjAAAfoUUOrqM572.png

完成上述的操作之后,PIT 定时器还没有启动。为了精确的使用延时函数,我们需要查看当前工程中 PIT 的时钟源 AIPS_SLOW_CLK 频率,可以打开图形化配置界面在时钟树中找到,也可以在 “Clock_Ip_Cfg.c” 源文件中查看。

wKgZO2fPi8qAf13ZAAGK5LC63e8804.pngwKgZPGfPi8qAD3LRAAApCtjTgpc955.png

创建一个毫秒延时函数,为了降低库函数运行延迟,我们直接把命令写入寄存器

如下图所示,将预装载值写入 LDVAL,TCTRL的 TEN 置位开启定时器,此时定时器开始递减计数,循环检测 TFLG 寄存器,当超时中断发生时 TIF 置位,关闭 PIT 定时器通道并清除挂起的中断,完成一次延时操作。

我们工程中的 PIT0_CLK 是 30MHz,所以预装载值:

count_timer = ( 30000000/1000) * delayMs = 30000 * delayMs

wKgZPGfPi8qATXxNAAC5JBPOuh8701.png

完成上述代码的编写之后,就可以在应用程序中使用了。

4. 参考文档

[1] S32K3xx Reference Manual, Rev. 9, 07/2024, NXP

欢迎关注大大通博主:汽车大牛

了解更多汽车相关应用知识!

欢迎登录大联大工程师社区——大大通,提问/评论,获取技术文档等更多资讯!

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信