发新帖我要提问
12
返回列表
打印
[Kinetis]

KL VLPS

[复制链接]
楼主: 淡定致远
手机看帖
扫描二维码
随时随地手机跟帖
21
FSL_TICS_ZJJ| | 2015-9-22 12:32 | 只看该作者 回帖奖励 |倒序浏览
本帖最后由 FSL_TICS_ZJJ 于 2015-9-22 12:35 编辑
淡定致远 发表于 2015-9-22 10:21
你好,我用的是KL15,我要用两路PWM和一个定时器,要可以工作在VLPS模式下,所以应该是LPTPM和LPTMR都需要 ...

TPM模块不管是TPM几,都可以在VLPS模式下面工作,所以你放心使用,LPTMR也是一样的。
UART的配置:
void UART0_Init(void)
{
  UART0_C2 &= ~ (UART0_C2_TE_MASK| UART0_C2_RE_MASK);
  enable_irq(12); set_irq_priority(12, 3);
  UART0_BDH = 0x00;
  UART0_BDL = 0x1A;
  UART0_C4 = 0x0F;
  UART0_C1 = 0x00;
  UART0_C3 = 0x00;

  UART0_C2 = UART0_C2_RIE_MASK;
  UART0_S1 |= 0x1F;
  UART0_S2 |= 0xC0;
  UART0_C2 |= UART0_C2_TE_MASK| UART0_C2_RE_MASK;
}

void uart0_isr(void)
{
  if (UART0_S1&UART_S1_RDRF_MASK)
  {
    c = UART0_D;
  }
}
这样接受到数据的时候,就能唤醒VLPS
这里配置的是9600波特率,具体你根据自己的波特率配置。
这个代码来自KL26的LQRUG_uart_ex2, 和推荐你看的KL25的代码是一样的。

使用特权

评论回复
22
淡定致远|  楼主 | 2015-9-22 12:50 | 只看该作者
你好,我复制了你的代码,没有做任何改动,在我的时钟配置下波特率是9600,还是断电后不能唤醒,现象一样。
我在想是不是进入VLPS模式的代码有问题:
void enter_vlps(void){
        volatile unsigned int dummyread;
        /* The PMPROT register may have already been written by init code
        If so then this next write is not done since  
        PMPROT is write once after RESET
        allows the MCU to enter the VLPR, VLPW, and VLPS modes.
        If AVLP is already writen to 0
        Stop is entered instead of VLPS*/
        SMC_PMPROT = SMC_PMPROT_AVLP_MASK;           
        /* Set the STOPM field to 0b010 for VLPS mode */
        SMC_PMCTRL &= ~SMC_PMCTRL_STOPM_MASK;
        SMC_PMCTRL |=  SMC_PMCTRL_STOPM(0x2);
        /*wait for write to complete to SMC before stopping core */  
        dummyread = SMC_PMCTRL;
        dummyread++;
        /* Now execute the stop instruction to go into VLPS */
        SCB_SCR |= SCB_SCR_SLEEPDEEP_MASK;       
        asm("WFI");
}

使用特权

评论回复
23
FSL_TICS_ZJJ| | 2015-9-22 12:59 | 只看该作者
淡定致远 发表于 2015-9-22 12:50
你好,我复制了你的代码,没有做任何改动,在我的时钟配置下波特率是9600,还是断电后不能唤醒,现象一样。 ...

SMC_PMPROT是上电后,只写一次寄存器,你看看你这个寄存器之前有没有操作过?
另外,我这边测试是可以的,这样,你可以把你工程上传,我这边看看。
工程就保留低功耗和UART的代码,其他全部去掉。
还有,断电后测试,把仿真器去掉测试。

使用特权

评论回复
24
淡定致远|  楼主 | 2015-9-22 13:11 | 只看该作者
SMC_PMPROT只写一次知道的,其他地方没有操作了。
仿真器去掉试也不行
我把工程裁减下上传。

使用特权

评论回复
25
淡定致远|  楼主 | 2015-9-22 14:13 | 只看该作者
本帖最后由 淡定致远 于 2015-9-22 16:54 编辑
FSL_TICS_ZJJ 发表于 2015-9-22 12:59
SMC_PMPROT是上电后,只写一次寄存器,你看看你这个寄存器之前有没有操作过?
另外,我这边测试是可以的 ...
谢谢ZJJ的支持,问题找到了,是时钟配置的问题,没有使能MCG_C1_IREFSTEN_MASK。问题在下班前一刻解决真的开心啊,呵呵。

使用特权

评论回复
26
淡定致远|  楼主 | 2015-9-22 16:29 | 只看该作者
本帖最后由 淡定致远 于 2015-9-22 16:57 编辑
FSL_TICS_ZJJ 发表于 2015-9-22 12:59
SMC_PMPROT是上电后,只写一次寄存器,你看看你这个寄存器之前有没有操作过?
另外,我这边测试是可以的 ...

问题已经解决,可以结贴了,谢谢!

使用特权

评论回复
27
Beckham_Owen| | 2015-9-22 21:32 | 只看该作者
淡定致远 发表于 2015-9-14 16:10
进中断就自动唤醒吗?需要操作吗?例如清寄存器

进中断就要清中断标志位,否则总是进入中断

使用特权

评论回复
28
FSL_TICS_ZJJ| | 2015-9-23 15:34 | 只看该作者
淡定致远 发表于 2015-9-22 14:13
谢谢ZJJ的支持,问题找到了,是时钟配置的问题,没有使能MCG_C1_IREFSTEN_MASK。问题在下班前一刻解决真的 ...

解决了就好,也感谢你分享你的问题原因。
结贴还需要你帮我们结贴。

使用特权

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

本版积分规则