NXP S32K3 用PIT的RTI定时器来唤醒MCU

8 篇文章 12 订阅

1.背景:

对于一些特殊场景,我们可能需要在休眠后一定时间内唤醒。比如在休眠的过程中收到一个事件,这个时候已经在跑休眠的流程了,无法停止,我们只能记录这个事件,待休眠结束后再唤醒MCU。
本文以S32K3芯片的RTI定时器位例,介绍如何配置,实现定时器唤醒MCU。

2. RTI简介:

RTI全称:Real Time Interrupt。RTI有一个32-bit 向下计数的counter,仅有PIT0有RTI,PIT中仅RTI能在低功耗模式下运行。如下图所示:
在这里插入图片描述
RTI与其他定时器的对比如下图,我们可以看到,除了RTI,还有RTC和API这些定时器都能唤醒MCU。
在这里插入图片描述
RTI与通用定时器的使用基本一致,特殊之处,一是能在低功耗模式下运行外,二是其时钟源仅能使用SIRC作为时钟源,如下图所示:
在这里插入图片描述

3. EB配置:

3.1 Platform配置:

打开PIT0的中断:
在这里插入图片描述
配置PIT0的中断回调处理函数:PIT_0_ISR
在这里插入图片描述

3.2 Gpt配置:

使能RTI硬件通道和中断
在这里插入图片描述
配置PIT0的RTI通道:
在这里插入图片描述
配置RTI的逻辑通道:
在这里插入图片描述

3.3 时钟配置:

在这里插入图片描述
MCU中的配置如下图:
在这里插入图片描述

3.4 Icu配置:

下面的配置设计到唤醒的功能,首先配置唤醒的硬件通道:
在这里插入图片描述
在IcuWkpu中配置通道:
在这里插入图片描述
配置逻辑通道:
在这里插入图片描述
经上述配置,即可使用RTI功能

4. 代码:

初始化MCU、clock、中断(Platform)、GPT、Icu之后就可以正常开启定时器,当定时结束后,如果MCU处于休眠状态,就会自动唤醒。
RTI使用的时钟为SIRC,时钟频率32000Hz,因此Gpt_StartTimer函数中的value为32000,则定时时间为1s。

Gpt_StartTimer(GptConf_GptChannelConfiguration_Gpt_PIT0_Ch_RTI, 32000);

另外需要注意的是,在代码中需要收到调用底层的唤醒使能函数:

Wkpu_Ip_EnableInterrupt(0, 3);

否则定时结束不会唤醒MCU。第一参数instance,第二个参数为唤醒源的number,选择方法如下图:
在这里插入图片描述
驱动层提供了一个函数Gpt_EnableWakeup();但是却不能使能PIT的wake up中断,必须要调用Wkpu_Ip_EnableInterrupt()函数才行。理论上我们不应该这样调用,感觉像是目前版本驱动的一个bug。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值