LPTimer
支持
2
种工作模式,每个定时器
/
计数器都有独立的控制启动信号,以及外部输入时钟,门控信号。
定时功能用于产生间隔定时。在定时功能中,定时器一个时钟累加一次,计数到最大值会溢出并且产生中断。
当设置对应定时器
TR
为
1
后定时器开始运行。计数器从设定的值开始计数,计数到最大
0XFFFF
后产生溢出中断。
这个要注意了,和其他芯片可能不太一样。
由于
LPTimer
是异步定时器,定时器中断从
Timer
时钟域同步到
pclk
预,
重载模式定时器值设置大于 0Xfffb 时,中断会丢失
,建议使用中断功能是重载寄存器的值小于
0XFFFC
。不使用中断没有这个限制。
定时功能用于产生间隔定时。在定时功能中,定时器一个时钟累加一次,计数到最大值会溢出并且产生中断。

低功耗定时器配置我们需要注意TCK_SEL是选用哪个时钟,XTL外部低速时钟,RCL内部低速时钟,一般选RCL,嗯。
CT寄存器选定时器功能,MD寄存器选模式2,TR用来控制定时器运行和停止。
void bsp_lpt(void)
{
stc_lpt_config_t stcConfig;
en_result_t enResult = Error;
uint16_t u16ArrData = 0xfBCA;//这个是初始值,就算从这个值计时到0xffff
stc_lpm_config_t stcLpmCfg;
Gpio_InitIOExt(0, 3, GpioDirOut, TRUE, FALSE, TRUE, FALSE);
stcConfig.enGateP = LptPositive; //高电平有效
stcConfig.enGate = LptGateDisable;//无门控
stcConfig.enTckSel = LptIRC32K;//时钟选择
stcConfig.enTog = LptTogDisable;
stcConfig.enCT = LptTimer;//定时器功能
stcConfig.enMD = LptMode2;//模式2
stcConfig.pfnLpTimCb = LptInt;//中断函数配置
if (Ok != Lpt_Init(&stcConfig))
{
enResult = Error;
}
//Lpm Cfg低功耗配置
stcLpmCfg.enSEVONPEND = SevPndDisable;
stcLpmCfg.enSLEEPDEEP = SlpDpEnable;
stcLpmCfg.enSLEEPONEXIT = SlpExtDisable;
Lpm_Config(&stcLpmCfg);
//Lpt 中断使能
Lpt_ClearIntFlag();
Lpt_EnableIrq();
EnableNvic(LPTIM_IRQn, 3, TRUE);
//设置重载值,计数初值,启动计数
Lpt_ARRSet(u16ArrData);
Lpt_Run();
}
void LptInt(void)
{
if (TRUE == Lpt_GetIntFlag())
{
Lpt_ClearIntFlag();
M0P_GPIO->P0OUT_f.P03=!M0P_GPIO->P0OUT_f.P03;
}
我这个低功耗定时器是32ms左右进入一次中断,这样配置好,led就不灵不灵的闪了