在线时间7 小时
UID3474394
注册时间2018-7-31
NXP金币0
该用户从未签到
注册会员

- 积分
- 151
- 最后登录
- 2019-10-11
|
本帖最后由 anyankun 于 2019-4-29 11:11 编辑
大家好,我编程测试了一下s9KEAz128-64Pin最小系统版的休眠与唤醒,测试中发现3.3V供电时电流很小0.07mA,5V供电时电流变大0.17mA;两个电压下功耗相差很多,硬件已经没有耗电的元件了;编译环境为(KDS3.0.0版本),休眠代码如下;请问是否知道这是怎么造成的?
//休眠函数
void Sleep(void)
{
// 进入休眠之前关闭低压警报模块时理论休眠效果好;
//PMC_SPMSC1[LVDE] =0 MC_SPMSC1[LVDSE]=0; PMC_SPMSC1[LVDRE]=0;
PMC_SPMSC1 &= 0;
/* Set the SLEEPDEEP bit to enable deep sleep mode (STOP) */
SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
SCB->SCR &= (uint32_t)~(uint32_t)SCB_SCR_SLEEPONEXIT_Msk;
/* WFI instruction will start entry into STOP mode */
__asm("WFI");
}
//系统初始化函数(苏大库)
void SystemInit(void)
{
// 关看门狗
#if (DISABLE_WDOG)
/* WDOG->TOVAL: TOVAL=0xE803 */
WDOG->TOVAL = WDOG_TOVAL_TOVAL(0xE803); /* Timeout value */
/* WDOG->CS2: WIN=0,FLG=0,??=0,PRES=0,??=0,??=0,CLK=1 */
WDOG->CS2 = WDOG_CS2_CLK(0x01); /* 1-kHz clock source */
/* WDOG->CS1: EN=0,INT=0,UPDATE=1,TST=0,DBG=0,WAIT=1,STOP=1 */
WDOG->CS1 = WDOG_CS1_UPDATE_MASK | WDOG_CS1_TST(0x00) |
WDOG_CS1_WAIT_MASK | WDOG_CS1_STOP_MASK;
#endif /* (DISABLE_WDOG) */
// 初始化时钟配置(采用内部参考时钟,系统时钟48MHz,总线时钟24MHz)
#if (CLOCK_SETUP == 0)
// 采用24MHz的FLL输出作为时钟源
ICS->C2 |= ICS_C2_BDIV(0x01);
// 更新系统时钟分频值
SIM->CLKDIV = SIM_CLKDIV_OUTDIV1(0x00) |// 将ICSOUTCLK作为系统时钟
SIM_CLKDIV_OUTDIV2_MASK |// 将系统时钟的1/2作为总线时钟
SIM_CLKDIV_OUTDIV3_MASK;// 将系统时钟的1/2作为定时器时钟
// 切换到FEI模式
ICS->C1 = ICS_C1_CLKS(0x00) |// 选中FLL作为时钟源
ICS_C1_IREFS_MASK |// 选择37.5KHz的内部参考时钟作为FLL的参考时钟源
ICS_C1_IRCLKEN_MASK;// 使能内部参考时钟
// 将FLL输出直接作为ICSOUTCLK的值,此时ICSOUTCLK=37.5KHz*1280=48MHz
ICS->C2 = (uint8_t) ((ICS->C2 & (uint8_t) ~(uint8_t) (
ICS_C2_BDIV(0x07) | ICS_C2_LP_MASK)) | (uint8_t) (ICS_C2_BDIV(0x00)));
// 等待选中内部参考时钟作为FLL的参考时钟源
while ((ICS->S & ICS_S_IREFST_MASK) == 0x00U) {}
// 等待选中FLL输出作为时钟源
while ((ICS->S & 0x0CU) != 0x00U){}
}
|
|