查看: 2975|回复: 0

[其他] KEA128功耗问题

[复制链接]

该用户从未签到

1

主题

1

帖子

0

注册会员

Rank: 2

积分
151
最后登录
2019-10-11
发表于 2019-4-29 09:44:40 | 显示全部楼层 |阅读模式
本帖最后由 anyankun 于 2019-4-29 11:11 编辑

大家好,我编程测试了一下s9KEAz128-64Pin最小系统版的休眠与唤醒,测试中发现3.3V供电时电流很小0.07mA,5V供电时电流变大0.17mA;两个电压下功耗相差很多,硬件已经没有耗电的元件了;编译环境为(KDS3.0.0版本),休眠代码如下;请问是否知道这是怎么造成的?

//休眠函数
void Sleep(void)
{

        // 进入休眠之前关闭低压警报模块时理论休眠效果好;
        //PMC_SPMSC1[LVDE] =0MC_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){}

}


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

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-7-21 11:19 , Processed in 0.084159 second(s), 21 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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