打印
[技术问答]

华大单片低功耗定时器时钟进入中断程序卡死!!

[复制链接]
1900|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
     目前正在给设备做低功耗,进入DEEPSLEEP后使用低功耗定时器唤醒,参考官网下载的例程。  现在是程序进入低功耗可以唤醒,唤醒后可以看到电流上来了,但是程序好像卡死了。 我调试了一下是卡在中断那里。 请大佬指点下!!!
     刚才不进入deepsleep模式试了下定时器。就开启LPTIME,发现2s中断后也是卡在进入中断函数那里,这个低功耗定时器应该可以和正常的定时器一样吧,不进入deepsleep应该也是可以使用的,原来用的ST系列F103比较多,没怎么接触过低功耗定时器.
   

使用特权

评论回复
沙发
18162813795|  楼主 | 2021-5-17 11:11 | 只看该作者
使用官方例程中的时钟初始化函数
void App_SysClkInit(void)
{
    stc_sysctrl_clk_cfg_t  stcClkCfg;

    //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");                       
    }
}



使用特权

评论回复
板凳
18162813795|  楼主 | 2021-5-17 11:16 | 只看该作者
调试发现卡死在这个地方

BUG.png (40.64 KB )

BUG.png

使用特权

评论回复
地板
martinhu| | 2021-5-17 13:39 | 只看该作者
如果不是进deepsleep,lpt的中断正常吗?printf打印正常吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

11

帖子

0

粉丝