Thread 中讨论的其他器件:SYSBIOS
工具/软件:Starterware
尊敬的:
我已成功将器件置于深度睡眠模式。 但是、我无法恢复正常工作的问题。
请帮我找出错误吗?
以下是我的代码:
静态空 DEEP_SLEEP_MODE (空)
{
//步骤1:DDR2的主动自刷新模式
//清除自刷新/低功耗(SR_PD)位为0
HWREG (SOC_DDR2_0_CTRL_regs + DDR2_mDDR_SDRCR)和=~DDR2_mDDR_SDRCR_SR_PD;
//设置低功耗模式使能
HWREG (SOC_DDR2_0_CTRL_regs + DDR2_mDDR_SDRCR)|= DDR2_mDDR_SDRCR_LPMODEN;
//步骤2:禁用 PHY SATA、USB2.0、USB1.1
//步骤3:将 PLL/PLLC0和 PLL/PLLC1置于旁路模式
/*PLLEN=0在 PLL0中将 PLL 置于旁路模式*/
HWREG (SOC_PLLC_0_regs + PLLC_PLLCTL)&=~PLLC_PLLCTL_PLLEN;
/*PLLEN=0在 PLL1中将 PLL 置于旁路模式*/
HWREG (SOC_PLLC_1_regs + PLLC_PLLCTL)&&=~PLLC_PLLCTL_PLLEN;
//步骤4:为 PLL 0和 PLL 1断电
PLL0中的/*PLLPWRDN=1 */
HWREG (SOC_PLLC_0_regs + PLLC_PLLCTL)|= PLLC_PLLCTL_PLLPWRDN;
PLL1中的/*PLLPWRDN=1 */
HWREG (SOC_PLLC_1_regs + PLLC_PLLCTL)|= PLLC_PLLCTL_PLLPWRDN;
//步骤5:将 DeepSleep 引脚配置为仅输入
//配置 GP0[8]-深度睡眠引脚-引脚编号9
uint32_t savePinmux =(HWREG (SOC_SYSCFG_0_regs + SYSCFG0_PINMUX (0))和
μ~(SYSCFG_PINMUX0_PINMUX0_31_28));
HWREG (SOC_SYSCFG_0_regs + SYSCFG0_PINMUX (0)=
(PINMUX0_GPIO0_8_ENABLE | savePinmux);
//将此引脚配置为仅输入
GPIODirModeSet (SOC_GPIO_0_regs、9、GPIO_DIR_INPUT);
//步骤6:SLEEPCOUNT 位的配置延迟(例如:0x0F)
HWREG (SOC_SYSCFG_1_regs + SYSCFG1_DeepSleep)|=(0x0F 和 SYSCFG1_DeepSleep);
//步骤7:将 DeepSleep 中的 SLEEPENABLE 位设置为1
HWREG (SOC_SYSCFG_1_regs + SYSCFG1_DEepSlep)|= SYSCFG1_DEepSlep_SLEEPENABLE;
//步骤8:轮询位 SLEEPCOMPLETE
while (~(SYSCFG1_DeepSlep_SLEEPCOMPLETE &
HWREG (SOC_SYSCFG_1_regs + SYSCFG1_DeepSleep)))
{
}
//步骤9:将 DeepSleep 引脚驱动为低电平
/********* 退出深度睡眠模式 /
//步骤10:将 DeepSleep 中的 SLEEPENABLE 位清零
HWREG (SOC_SYSCFG_1_regs + SYSCFG1_DEepSlep)&&=~SYSCFG1_DEEPSLE_SLEEPENABLE;
//步骤11:再次初始化 PLL
/*将 PLLCTL 中的 PLLRST 位清零*/
HWREG (SOC_PLLC_0_regs + PLLC_PLLCTL)&=~PLLC_PLLCTL_PLLRST;
HWREG (SOC_PLLC_1_regs + PLLC_PLLCTL)&&=~PLLC_PLLCTL_PLLRST;
/*清除 PLLCTL*中的 PLLPWRDN 位*/
HWREG (SOC_PLLC_0_regs + PLLC_PLLCTL)&=~PLLC_PLLCTL_PLLPWRDN;
HWREG (SOC_PLLC_1_regs + PLLC_PLLCTL)&=~PLLC_PLLCTL_PLLPWRDN;
/*将 PLLCTL 中的 PLLRST 位设置为1 -复位结束*/
HWREG (SOC_PLLC_0_regs + PLLC_PLLCTL)|= PLLC_PLLCTL_PLLRST;
HWREG (SOC_PLLC_1_regs + PLLC_PLLCTL)|= PLLC_PLLCTL_PLLRST;
/*等待 PLL 锁定*/
/*等待300次计数*/
延迟(300);
/*将 PLLCTL 中的 PLLEN 位置1 -删除旁路模式*/
HWREG (SOC_PLLC_0_regs + PLLC_PLLCTL)|= PLLC_PLLCTL_PLLEN;
HWREG (SOC_PLLC_1_regs + PLLC_PLLCTL)|= PLLC_PLLCTL_PLLEN;
//步骤12:启用时钟 DDR
/*启用 SDRAM 的时钟*/
PSCModuleControl (SOC_PSC_1_regs、HW_PSC_DDR2_mDDR、0、PSC_MDCTL_NEW_ENABLE);
/*在 DDR Phy*/中设置 RESET_PHY 位
HWREG (SOC_DDR2_0_CTRL_regs + DDR2_MDR_DRPYCRC)= DDR2_mDDR_DRPYRCR_RESET_PHY;
/*清除 SDRCR*/中的 MCLKSTOPEN 位
HWREG (SOC_DDR2_0_CTRL_regs + DDR2_mDDR_SDRCR)&&=~DDR2_mDDR_SDRCR_MCLKSTOPEN;
/*禁用自刷新率*/
//清除低功耗模式
HWREG (SOC_DDR2_0_CTRL_regs + DDR2_mDDR_SDRCR)&&=~DDR2_mDDR_SDRCR_LPMODEN;
}
此致、Nghia Quy
