前言
定时器中断,每个平台的实现方式均有差异,从51单片机通过寄存器配置实现定时器周期计数,再到使用HAL库配置STM32的定时器,他们的实现原理都是大同小异的,只不过不同的平台使用的底层库不同,导致实现的方法不同而已。
一、PIT是什么?
Periodic Interrupt Timer (PIT) :
PIT是一个定时器数组,可以用来触发中断和触发器。
包括一个专用的RTI中断(RTI),它运行在一个单独的时钟上,可以用于系统唤醒。
S32K3系列有三个PIT 可将PIT0看着是一个高级定时器。
二、PIT特性?
1.特点
四个32位计时器通道,时钟源来自AIPS_SLOW_CLK;
一个RTI定时器在PIT_0运行在SIRC (32KHz),并支持在待机模式下操作;
定时器产生触发脉冲和中断的能力;
每个计时器的独立超时时间;
所有的计时器都使用向下计数器;
PIT_O计时器来创建64位计时器。
2.时钟&中断
时钟来源于AIPS_SLOW_CLK;
所有的PIT实例都能够生成周期性触发器,这些触发器可以通过TRGMUX路由到电机控制模块如eMIOS、LCU、BCTU、ADC。
PIT_0_RTI中断可使用内部RC振荡器(SIRC)作为时钟源。
包括RTI在内的所有PIT通道中断共享一个IRQ中断向量 疑惑
二、PIT的应用?
1.S32DS配置
PIT 配置
1、选择选项卡“GptChannelConfigSet”
2、按“加号”按钮添加计时器通道
3、选择需要配置的PIT_0 ~ PIT_2实例
4、如果定时器在调试模式下需要暂停,请检查“PitFreezeEnable”
5、选择PIT中的计时器通道
6、如果需要64位定时器,可以使能ChainMode。
7、设置在此通道上发生超时时调用的回调函数。
选择需要使能的中断。
2.常用API
void Pit_Ip_Init (uint8 instance, const Pit_Ip_InstanceConfigType *config)
用给定的配置初始化一个PIT实例。
void Pit_Ip_InitChannel (uint8 instance, const Pit_Ip_ChannelConfigType chnlConfig)
用给定的配置初始化一个PIT通道。
void Pit_Ip_EnableChannelInterrupt (uint8 instance, uint8 channel)
启用一个PIT通道的中断。
void Pit_Ip_StartChannel (uint8 instance, uint8 channel, uint32 countValue)
用给定的计数器值启动一个PIT通道。
uint64 Pit_Ip_GetCurrentTimer(uint8 instance, uint8 channel)
获取一个PIT通道的当前计时器值。
void Pit_Ip_Init (uint8 instance, const Pit_Ip_InstanceConfigType *config)
用给定的配置初始化一个PIT实例。
void Pit_Ip_InitChannel (uint8 instance, const Pit_Ip_ChannelConfigType chnlConfig)
用给定的配置初始化一个PIT通道。
void Pit_Ip_EnableChannelInterrupt (uint8 instance, uint8 channel)
启用一个PIT通道的中断。
void Pit_Ip_StartChannel (uint8 instance, uint8 channel, uint32 countValue)
用给定的计数器值启动一个PIT通道。
uint64 Pit_Ip_GetCurrentTimer(uint8 instance, uint8 channel)
获取一个PIT通道的当前计时器值。
————————————————
版权声明:本文为CSDN博主「且听风吟_YU」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44712171/article/details/124528274
3.demo
中断服务函数
总结
全篇几乎都是翻译的NXP官方给的文档,以博客的方式记录只是为了日后查阅方便,并且梳理的过程中使得映像更加深刻。