查看: 2782|回复: 3

[已解决] MK10DX256VLL7 休眠唤醒后,PIT timer延时不准确了,请高手帮忙看看问题出在哪里了??(已解决)

[复制链接]
  • TA的每日心情
    奋斗
    2018-7-24 11:40
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    11

    主题

    78

    帖子

    0

    注册会员

    Rank: 2

    积分
    171
    最后登录
    2020-11-22
    发表于 2014-1-11 16:11:46 | 显示全部楼层 |阅读模式
    程序比较简单
    芯片:MK10DX256VLL7
     Core/System=100MHz,Bus=100/2=50MHz,FlexBus=50MHz,Flash=100/4=25MHz
    1、就是要每100ms反转一个PORTB22 的电平
    2、每3秒钟由Lptmr产生一次中断,全局变量g_SysTimeBase++,
    3、当g_SysTimeBase == 2 时 休眠然后被下一次中断唤醒
    可是发现下一次唤醒后变成了200ms反转一个PORTB22 的电平.。。。。。。。。。。。。。
    请高手帮忙看看问题出在哪里了??
     
    代码如下:
    =============================================
    UINT32   g_SysTimeBase= 0;
    VOID main(VOID)
    {
        DisableInterrupts;                      //关中断
     
        GPIO_Base_Init(GPIO_PORTB, 22, IO_OUT, IO_LOW);
        GPIO_Base_SetN(PORTB, 22);
     
        PIT_Delay_ms(0,3000);                     //延时3秒
     
        LPTMR_RunSystemTimeBase();    // 使用Lptmr 3秒产生一次中断
     
        EnableInterrupts;                       //开中断
     
     
        while (TRUE)
        {
     
            if (2 == g_SysTimeBase)
            {
                MC_EnterSleep();
     
                set_sys_dividers(0, 1, 1, 3);
                
            }
     
     
            PIT_Delay_ms(0,100);                     //延时100ms
            GPIO_Base_ToggleN(PORTB, 22);
            }
     
    }
     
    休眠:
     
    VOID MC_EnterSleep(VOID)
    {
        SMC_PMCTRL = SMC_PMCTRL_RUNM(0)| SMC_PMCTRL_STOPM(0);
        stop();
    }
     
     
    Lptmr中断处理:
     
    VOID LPTMR_ISR(VOID)
    {
        LPTMR0_CSR |= LPTMR_CSR_TCF_MASK;        //写1清除中断标志
     
        g_SysTimeBase++;
     
    }
     
     
    PIT延时函数
    VOID PIT_Delay_ms(UINT8 n, UINT16 ms)
    {
        if (THREE < n)
        {
            return;
        }
        
        UINT32  u2Time = ms * 50000;    // 20 ns
     
        //开启定时模块时钟
        SIM_SCGC6 |= SIM_SCGC6_PIT_MASK;
        // 开启 PIT
        PIT_MCR = 0x00;
     
        PIT_LDVAL(n) = u2Time;
        // 开始定时
        PIT_TCTRL(n) = PIT_TCTRL_TEN_MASK;
     
        while (!(PIT_TFLG(n) & PIT_TFLG_TIF_MASK)) {}
     
        PIT_TFLG(n) |= PIT_TFLG_TIF_MASK;
        PIT_TCTRL(n) &= ~PIT_TCTRL_TEN_MASK;
     
        PIT_MCR = PIT_MCR_MDIS_MASK; 
    }



     
    我知道答案 目前已有2人回答
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-7-24 11:40
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    11

    主题

    78

    帖子

    0

    注册会员

    Rank: 2

    积分
    171
    最后登录
    2020-11-22
     楼主| 发表于 2014-1-11 16:20:29 | 显示全部楼层

    RE:MK10DX256VLL7 休眠唤醒后,PIT timer延时不准确了,请高手帮忙看看问题出在哪里了??

    怀疑是不是 寄存器SIM_CLKDIV1 中的OUTDIV1-4值都恢复为0了
    但是我在休眠后重新设置,还是不行
    MC_EnterSleep();
    set_sys_dividers(0, 1, 1, 3);
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-2 06:04
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    6020
    最后登录
    2020-9-28
    发表于 2014-1-13 11:12:23 | 显示全部楼层

    回复:MK10DX256VLL7 休眠唤醒后,PIT timer延时不准确了,请高手帮忙看看问题出在哪里了??

    检查一下bus clock在唤醒后是否降低了
    建议你不要把72MHz主频芯片超到100MHz使用
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10

    主题

    459

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    303
    最后登录
    2024-10-24
    发表于 2014-1-13 12:53:58 | 显示全部楼层

    回复:MK10DX256VLL7 休眠唤醒后,PIT timer延时不准确了,请高手帮忙看看问题出在哪里了??

    K60在从Stop、VLPS、LLS等低功耗模式下唤醒后,时钟模式会从进入低功耗模式前的PEE时钟模式变成PBE时钟模式,是需要重新配置的。你可以参考TWR-K60D10的tsi_low_power例程代码。祝顺利!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-18 22:12 , Processed in 0.092389 second(s), 24 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表