本帖最后由 FSL_TICS_A 于 2014-10-21 15:19 编辑
1问题描述 细心的网友可能发现,在调试KL系列的低功耗例程的KEIL工程时,比如以KL25-SC例程中lower_power_demo为例。在进入VLLSx模式的时候,功耗方面都很正常,但是在使用引脚唤醒的时候,就会发现使用KEIL工程和IAR工程还是有比较大的区别。程序中唤醒可以使用PTC3作为唤醒源,如果测试平台为FRDM-KL25,因为没有按键,可以使用一根线模拟按键。当使用IAR工程的时候,可以正常使用PTC3唤醒,程序唤醒后复位执行。但是使用keil工程的时候,使用PTC3唤醒,可以看到功耗上升了,但是没有回复到进入VLLSx前的功耗,大概只有一半,并且也没有看到串口窗口打印出复位后的信息。按道理两个程序的源程序是一样的,为什么会出现这种情况?又如何解决? IAR测试情况:
KEIL测试情况: 2 解决方案在KEIL 工程的system_MKL25Z4.c文件的void SystemInit (void) 函数开始处加上如下代码: if (PMC_REGSC & PMC_REGSC_ACKISO_MASK) PMC_REGSC |= PMC_REGSC_ACKISO_MASK; 在文件的开头加上包含文件: #include "common.h" 然后编译,重新烧录,就可以和IAR的唤醒情况一样了。 3.原因分析IAR和KEIL的启动函数不一样。 IAR启动按照如下进行: 而KEIL的启动过程如下:
所以对于keil的启动,进入main之前没有对PEMC_REGSC中的ACKISO寄存器清位,这个位是用于针对VLLSX唤醒后释放I/O引脚以及具体的外设到正常工作模式中。 详情请查看对应的用户手册。 另外,附件中给出了修改后的lower_power_demo例程,其余比如官方的LQRUG_bme_ex2 KEIL例程的唤醒也是一样的修改方法。 关于kinetis的低功耗,这里再给大家推荐两个应用笔记:AN4470和AN4503。 |