⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 deepsleep.c

📁 OMAP730 进入DEEPSLEEP模式代码.
💻 C
字号:
void WakeUpToDeepSleep(UINT32 *pReg32,UINT16 *pReg16)
{
    UINT32 *reg32=pReg32;
    UINT16 *reg16=pReg16;
	
    OMAP730_CONFIG_REGS * pConfigReg = OALPAtoUA(OMAP730_CONFIG_REGS_PA);
    OMAP730_ULPD_REGS *pULPDRegs = OALPAtoUA(OMAP730_ULPD_REGS_PA);
    OMAP730_ICR_REGS  *pICRRegs = OALPAtoUA(OMAP730_ICR_REGS_PA);
    OMAP730_TIPB_REGS *pTIPBRegs1 = OALPAtoUA(OMAP730_TIPBPRIV_REGS_PA);
    OMAP730_TIPB_REGS *pTIPBRegs2 = OALPAtoUA(OMAP730_TIPBPUBL_REGS_PA);
    OMAP730_EMIF_REGS *pEMIFRegs = OALPAtoUA(OMAP730_EMIF_REGS_PA );
    OMAP730_CAMERA_IF_REGS * pCAMRegs = OALPAtoUA(OMAP730_CAM_REGS_PA );

    OMAP730_CLKM_REGS* pCLKMRegs=OALPAtoUA(OMAP730_CLKM_REGS_PA);
    OMAP730_INTC_REGS *pIntcL1Regs = OALPAtoUA(OMAP730_INTC_L1_REGS_PA);
    OMAP730_LCD_REGS* pLCDRegs = OALPAtoUA(OMAP730_LCD_REGS_PA);
    OMAP730_OTG_REGS *pOTGRegs = OALPAtoUA(OMAP730_OTG_REGS_PA);

    OMAP730_GPIO_REGS *pGpio2 = OALPAtoUA(OMAP730_GPIO2_REGS_PA);
    OMAP730_GPIO_REGS *pGpio3 = OALPAtoUA(OMAP730_GPIO3_REGS_PA);
    OMAP730_GPIO_REGS *pGpio5 = OALPAtoUA(OMAP730_GPIO5_REGS_PA);
    OMAP730_GPIO_REGS *pGpio6 = OALPAtoUA(OMAP730_GPIO6_REGS_PA);

    *reg32++=INREG32(&pConfigReg->MODE2);//R32.1
    CLRREG32(&pConfigReg->MODE2 ,1 << 5);//open1
    CLRREG32(&pConfigReg->MODE2 ,1 << 12);//add1
    CLRREG32(&pConfigReg->MODE2 ,1 << 13);//add1
    CLRREG32(&pConfigReg->MODE2 ,1 << 14);//add1
    CLRREG32(&pConfigReg->MODE2 ,1 << 15);//add1

    // Disable all SW request
      *reg16++=INREG16(&pULPDRegs->SOFT_REQ);//R16.1
    OUTREG16(&pULPDRegs->SOFT_REQ ,0x0);//open2

    // Enable of Clock and stop peripheral reset
       *reg16++=INREG16(&pCLKMRegs->RSTCT2);//R16.2
    SETREG16(&pCLKMRegs->RSTCT2 ,0x1);//open3

    // Disable CAM_CLK
      *reg16++=INREG16(&pULPDRegs->CAM_CLK_CTRL);//R16.3
    OUTREG16(&pULPDRegs->CAM_CLK_CTRL, 0x0);

    // Enable transition to Deep Sleep
      *reg16++=INREG16(&pULPDRegs->POWER_CTRL);//R16.4
    SETREG16(&pULPDRegs->POWER_CTRL ,POWER_CTRL_DEEP_SLEEP_EN);

    // Stop oscillator in deep-sleep
       *reg16++=INREG16(&pULPDRegs->POWER_CTRL);//R16.5
    SETREG16(&pULPDRegs->POWER_CTRL ,POWER_CTRL_OSC_STOP_EN);

       *reg32++=INREG32(&pConfigReg->PCC_CONF_REG);//R32.2
    CLRREG32(&pConfigReg->PCC_CONF_REG, (1<<0));//add
    CLRREG32(&pConfigReg->PCC_CONF_REG, (1<<3));//add
    CLRREG32(&pConfigReg->PCC_CONF_REG, 1<<4);//add
    CLRREG32(&pConfigReg->PCC_CONF_REG, 1<<5);//add
    CLRREG32(&pConfigReg->PCC_CONF_REG, 1<<6);//add
    CLRREG32(&pConfigReg->PCC_CONF_REG, 1<<7);//add
    CLRREG32(&pConfigReg->PCC_CONF_REG, 1<<8);//add
    CLRREG32(&pConfigReg->PCC_CONF_REG, 1<<9);//add
    
    // put USB OTG in idle
    *reg32++=INREG32(&pOTGRegs->SYSCON_1);//R32.3
    SETREG32(&pOTGRegs->SYSCON_1, (1<<15));//open4

      *reg32++=INREG32(&pOTGRegs->SYSCON_2);//R32.4
    CLRREG32(&pOTGRegs->SYSCON_2, (1<<8));//open5
    CLRREG32(&pOTGRegs->SYSCON_2, (1<<31));//open6

    //LPG Power Management Register
      *reg32++=INREG32(0xFFFE7801);//R32.5
    CLRREG32(0xFFFE7801,0x0);//add

    // rng idle enable
      *reg32++=INREG32(&pConfigReg->SPARE2);//R32.6
    SETREG32(&pConfigReg->SPARE2 , 1<<5);
    SETREG32(&pConfigReg->SPARE2 , 1<<16);

    // close LCD
      *reg32++=INREG32(&pLCDRegs->CTRL);//R32.7
    CLRREG32(&pLCDRegs->CTRL, LCD_CTRL_EN);
    while ((INREG32(&pLCDRegs->STATUS) & LCD_STATUS_DONE) == 0);
    CLRREG16(&pCLKMRegs->IDLECT2, EN_LCDCK);
   
    // inactive device clock
      *reg16++=INREG16(&pCLKMRegs->IDLECT1);//R16.6
    OUTREG16(&pCLKMRegs->IDLECT1 ,0x13ff);

      *reg16++=INREG16(&pCLKMRegs->IDLECT3);//R16.7
    OUTREG16(&pCLKMRegs->IDLECT3 ,0x3f);
	
   //MASK LEVEL1 INTERRUPT
     *reg32++=INREG32(&pIntcL1Regs->MIR);//R32.8
    OUTREG32(&pIntcL1Regs->MIR, 0xFFFFFFFC);//MPUIO6 IRQ_18

   //Gpio WakeUp Init
    GpioIntForWakeUp();

   // prepare for using power key(GPIO_161=GPIO6.5) to wakeup
    CLRREG32(&pIntcL1Regs->MIR, 1<<18);//MPUIO6 IRQ_18
  // prepare for using Charging status signal(GPIO_75=GPIO3.11) to wakeup
    CLRREG32(&pIntcL1Regs->MIR, 1<<8);//MPUIO3 IRQ_8
  //prepare for using keypad (GPIO_135=GPIO5.7) to wakeup
    CLRREG32(&pIntcL1Regs->MIR, 1<<17);//MPUIO5 IRQ_17
  //GPIO_39  floatnf
    CLRREG32(&pIntcL1Regs->MIR, 1<<7);//MPUIO2 IRQ_7
    
    // emifs:power down enable
      *reg16++=INREG16(&pEMIFRegs->EMIFS_CONFIG);//R16.8
    SETREG16(&pEMIFRegs->EMIFS_CONFIG, 0x0c);
 
    OALCPUIdle();	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -