一,什么是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
}