1问题描述
细心的网友可能发现,在调试KL系列的低功耗例程的KEIL工程时,比如以KL25-SC例程中lower_power_demo为例。在进入VLLSx模式的时候,功耗方面都很正常,但是在使用引脚唤醒的时候,就会发现使用KEIL工程和IAR工程还是有比较大的区别。程序中唤醒可以使用PTC3作为唤醒源,如果测试平台为FRDM-KL25,因为没有按键,可以使用一根线模拟按键。当使用IAR工程的时候,可以正常使用PTC3唤醒,程序唤醒后复位执行。但是使用keil工程的时候,使用PTC3唤醒,可以看到功耗上升了,但是没有回复到进入VLLSx前的功耗,大概只有一半,并且也没有看到串口窗口打印出复位后的信息。按道理两个程序的源程序是一样的,为什么会出现这种情况?又如何解决?
IAR测试情况:
KEIL测试情况:
[size=0.83em]5.jpg (42.92 KB, 下载次数: 0)
下载附件
[color=rgb(153, 153, 153) !important]2014-4-10 17:11 上传
|
0
|
|
|
|
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引脚以及具体的外设到正常工作模式中。
详情请查看对应的用户手册。
|
|
|
|
|