S32K144之SDK版:LPIT低功耗定时器应用


一,什么是LPIT低功耗定时

LPIT是一种具有多个定时器通道的低功耗周期性中断定时器。当计时器达到程序设定的计数后,相应的计时器通道将产生预触发信号和触发输出信号,这些预触发信号和触发输出可用于触发设备上的其他模块。中断的目的是为了充分利用MCU的资源

1.Timer模式

 

 模式0-32位周期计数器模式

Case1-周期中断:在这种模式下,当T_EN使能后,CVAL根据TVAL递减到0,产生中断,产生触发信号,CVAL继续重载,循环如此,周期的产生中断。在该模式下,输入触发被忽略

Case2-单次中断

在Case-1基础上,TSOI=1,(Stop On Interrupt),输出效果同Case-1,只是发生一次中断后变停止了。

Case3-触发重载
在Case-1基础上,TROT=1,(Reload On Trigger),输出效果同Case-1,只是当有IN_TRIG触发信号时,CVAL重载TVAL,循环往复。

Case4-触发单次重载
Case3叠加Case2,单次结束后再有触发信号也被忽略。

Case5-触发开始
在Case-1基础上,TSOT=1,(StartOn Trigger),输出效果同Case-1,只是当T_EN使能时,没有开始,需要有一个IN_TRIG触发信号时,才开始周期往复,后续再有触发信号也被忽略。

Case6-触发开始中断停止
在Case-1基础上,TSOT=1,(Start On Trigger),TSOI=1,(Stop On Interrupt),效果叠加,因为输入触发开始了,中断结束了,后续再触发,再停止…。
 

二,LPIT低功耗定时应用

定时功能应用

三,添加Lpit模块

 

三,配置Lpit模块参数

四,代码补全

static void Lpit0_Ch0_ISR(void)
{
    LPIT_DRV_ClearInterruptFlagTimerChannels(INST_LPIT00, (1 << LPIT0_CHANNEL0));
    s_Lpit0_Systick_1msCount++;
}

static void Lpit0_Ch1_ISR(void)
{
    LPIT_DRV_ClearInterruptFlagTimerChannels(INST_LPIT00, (1 << LPIT0_CHANNEL1));
    PINS_DRV_TogglePins(PTD,0x00000001);

}

static void Lpit0_Ch2_ISR(void)
{
    LPIT_DRV_ClearInterruptFlagTimerChannels(INST_LPIT00, (1 << LPIT0_CHANNEL2));
    PINS_DRV_TogglePins(PTD,0x00000002);

}

static void Lpit0_Ch3_ISR(void)
{
    LPIT_DRV_ClearInterruptFlagTimerChannels(INST_LPIT00, (1 << LPIT0_CHANNEL3));
    PINS_DRV_TogglePins(PTD,0x00018000);

}
/******************************************************************************/
/**-----------------------------Global Function-------------------------------*/
/******************************************************************************/
uint32_t Lpit0_Systick_1ms_Count(void)
{
    return s_Lpit0_Systick_1msCount;
}

/**
 * @name      Lpit0_Init
 * @brief     Lpit0_Init module initialize
 * @parameter   void
 * @return  void
 *
 */

void Lpit0_Init(void)
{
    LPIT_DRV_Init(INST_LPIT00, &Lpit00_InitConfig);                               ///<initialize lpit0 module

    LPIT_DRV_InitChannel(INST_LPIT00, LPIT0_CHANNEL0, &Lpit00_ChnConfig0);        ///<initialize lpit0 module  0 channels
    LPIT_DRV_InitChannel(INST_LPIT00, LPIT0_CHANNEL1, &Lpit00_ChnConfig1);        ///<initialize lpit0 module  0 channels
    LPIT_DRV_InitChannel(INST_LPIT00, LPIT0_CHANNEL2, &Lpit00_ChnConfig2);        ///<initialize lpit0 module  0 channels
    LPIT_DRV_InitChannel(INST_LPIT00, LPIT0_CHANNEL3, &Lpit00_ChnConfig3);        ///<initialize lpit0 module  0 channels

    INT_SYS_InstallHandler(LPIT0_Ch0_IRQn, &Lpit0_Ch0_ISR, (isr_t *)0);           ///<install handler function
    INT_SYS_InstallHandler(LPIT0_Ch1_IRQn, &Lpit0_Ch1_ISR, (isr_t *)0);           ///<install handler function
    INT_SYS_InstallHandler(LPIT0_Ch2_IRQn, &Lpit0_Ch2_ISR, (isr_t *)0);           ///<install handler function
    INT_SYS_InstallHandler(LPIT0_Ch3_IRQn, &Lpit0_Ch3_ISR, (isr_t *)0);           ///<install handler function

    LPIT_DRV_StartTimerChannels(INST_LPIT00, (1 << LPIT0_CHANNEL0));              ///<start timer channel 0 timer
    LPIT_DRV_StartTimerChannels(INST_LPIT00, (1 << LPIT0_CHANNEL1));              ///<start timer channel 1 timer
    LPIT_DRV_StartTimerChannels(INST_LPIT00, (1 << LPIT0_CHANNEL2));              ///<start timer channel 2 timer
    LPIT_DRV_StartTimerChannels(INST_LPIT00, (1 << LPIT0_CHANNEL3));              ///<start timer channel 3 timer
}

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值