华大单片低功耗定时器时钟进入中断程序卡死!!
目前正在给设备做低功耗,进入DEEPSLEEP后使用低功耗定时器唤醒,参考官网下载的例程。现在是程序进入低功耗可以唤醒,唤醒后可以看到电流上来了,但是程序好像卡死了。 我调试了一下是卡在中断那里。 请大佬指点下!!!刚才不进入deepsleep模式试了下定时器。就开启LPTIME,发现2s中断后也是卡在进入中断函数那里,这个低功耗定时器应该可以和正常的定时器一样吧,不进入deepsleep应该也是可以使用的,原来用的ST系列F103比较多,没怎么接触过低功耗定时器.
使用官方例程中的时钟初始化函数
void App_SysClkInit(void)
{
stc_sysctrl_clk_cfg_tstcClkCfg;
//CLK INIT
stcClkCfg.enClkSrc= SysctrlClkRCH;
stcClkCfg.enHClkDiv = SysctrlHclkDiv1;
stcClkCfg.enPClkDiv = SysctrlPclkDiv1;
Sysctrl_ClkInit(&stcClkCfg);
//使能RCL
Sysctrl_ClkSourceEnable(SysctrlClkRCL, TRUE);
}
低功耗定时器初始化函数,也是例程中的,使用内部低速的时钟RCL的话,arr寄存器设置为0的话,0到65535定时在2S
static void App_LPTimer0Init(void)
{
stc_lptim_cfg_t stcLptCfg;
DDL_ZERO_STRUCT(stcLptCfg);
///< 使能LPTIM0 外设时钟
Sysctrl_SetPeripheralGate(SysctrlPeripheralLpTim, TRUE);
stcLptCfg.enGate = LptimGateLow;
stcLptCfg.enGatep= LptimGatePLow;
stcLptCfg.enTcksel = LptimRcl;
stcLptCfg.enTogen= LptimTogEnLow;
stcLptCfg.enCt = LptimTimerFun; //计数器功能
stcLptCfg.enMd = LptimMode2; //工作模式为模式1:无自动重装载16位计数器/定时器
stcLptCfg.u16Arr = 0; //预装载寄存器值
Lptim_Init(M0P_LPTIMER, &stcLptCfg);
Lptim_ClrItStatus(M0P_LPTIMER); //清除中断标志位
Lptim_ConfIt(M0P_LPTIMER, TRUE); //允许LPTIMER中断
EnableNvic(LPTIM_IRQn, IrqLevel0, TRUE);
}
中断处理函数,就是打印一句话
void LpTim0_IRQHandler(void)
{
if (TRUE == Lptim_GetItStatus(M0P_LPTIMER))
{
Lptim_ClrItStatus(M0P_LPTIMER);//清除LPTIMER0的中断标志位
LogPrint("inter interrupt\r\n");
}
}
调试发现卡死在这个地方
如果不是进deepsleep,lpt的中断正常吗?printf打印正常吗?
页:
[1]