This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Starterware/OMAPL138B-EP:如何退出深度睡眠模式并恢复程序。

Guru**** 2606725 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/585264/starterware-omapl138b-ep-how-to-exit-deepsleep-mode-and-recovery-the-program

器件型号:OMAPL138B-EP

工具/软件: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;