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

📄 usb_pwr.c

📁 ARM_CORTEX-M3应用实例开发详解光盘
💻 C
字号:
/******************************************************************************
* 文件名          : usb_pwr.c
* 功能描述        : 主要用于处理上电,掉电,挂起状态,和唤醒事件
*******************************************************************************/

/* 头文件 ------------------------------------------------------------------*/
#include "stm32f10x_lib.h"
#include "usb_lib.h"
#include "usb_conf.h"
#include "usb_pwr.h"
#include "hw_config.h"

volatile u8 bDeviceState = UNCONNECTED; /* USB音频设备未连接状态 */
volatile bool fSuspendEnabled = TRUE;  /* 当挂起时为真         */
/*恢复状态结构*/
struct
{
  volatile RESUME_STATE eState;
  volatile u8 bESOFcnt;
}ResumeS;

/*******************************************************************************
* 函数  : PowerOn
* 功能描述     : USB IP 上电程序.
* 输入         : 无.
* 输出         : 无.
* 返回         : USB_SUCCESS.
*******************************************************************************/
RESULT PowerOn(void)
{
  u16 wRegVal;

  /*** 设备接入使能 ***/
  USB_Cable_Config(ENABLE);

  /*** 寄存器CNTR_PWDN = 0 ***/
  wRegVal = CNTR_FRES;
  _SetCNTR(wRegVal);

  /*** 寄存器CNTR_FRES = 0 ***/
  wInterrupt_Mask = 0;
  _SetCNTR(wInterrupt_Mask);
  /*** 清除中断 ***/
  _SetISTR(0);
  /*** 设置中断屏蔽位 ***/
  wInterrupt_Mask = CNTR_RESETM | CNTR_SUSPM | CNTR_WKUPM;
  _SetCNTR(wInterrupt_Mask);

  return USB_SUCCESS;
}

/*******************************************************************************
* 函数  : PowerOff
* 功能描述     : 掉电程序.
* 输入         : 无.
* 输出         : 无.
* 返回         : USB_SUCCESS.
*******************************************************************************/
RESULT PowerOff()
{
  /* 禁止所有中断,强制复位 */
  _SetCNTR(CNTR_FRES);
  /* 清中断 */
  _SetISTR(0);
  /* 禁止PD9*/
  USB_Cable_Config(DISABLE);
  /* 关闭设备 */
  _SetCNTR(CNTR_FRES + CNTR_PDWN);
  
  return USB_SUCCESS;
}

/*******************************************************************************
* 函数  : Suspend
* 功能描述     : 挂起模式.
* 输入         : 无.
* 输出         : 无.
* 返回         : USB_SUCCESS.
*******************************************************************************/
void Suspend(void)
{
  u16 wCNTR;
  
  /* 进入挂起模式 */
  wCNTR = _GetCNTR();
  wCNTR |= CNTR_FSUSP;
  _SetCNTR(wCNTR);

    /* 强制进入低功耗 */
  wCNTR = _GetCNTR();
  wCNTR |= CNTR_LPMODE;
  _SetCNTR(wCNTR);

   Enter_LowPowerMode();
}

/*******************************************************************************
* 函数  : Resume_Init
* 功能描述     : 处理唤醒事件时的恢复操作.
* 输入         : 无.
* 输出         : 无.
* 返回         : USB_SUCCESS.
*******************************************************************************/
void Resume_Init(void)
{
  u16 wCNTR;
  
  /* CNTR_LPMODE = 0 */
  wCNTR = _GetCNTR();
  wCNTR &= (~CNTR_LPMODE);
  _SetCNTR(wCNTR);

 
  /* 离开低功耗模式 */
  Leave_LowPowerMode();

  /* 复位 FSUSP 位 */
  _SetCNTR(IMR_MSK);

  }



/*******************************************************************************
* 函数  : Resume
* 功能描述     : 用于操作恢复状态及时序.
* 输入         : (RESUME_STATE)
* 输出         : 无.
* 返回         : 无.
*******************************************************************************/
void Resume(RESUME_STATE eResumeSetVal)
{
  u16 wCNTR;

  if (eResumeSetVal != RESUME_ESOF)
    ResumeS.eState = eResumeSetVal;

  switch (ResumeS.eState)
  {
    case RESUME_EXTERNAL:
      Resume_Init();
      ResumeS.eState = RESUME_OFF;
      break;
    case RESUME_INTERNAL:
      Resume_Init();
      ResumeS.eState = RESUME_START;
      break;
    case RESUME_LATER:
      ResumeS.bESOFcnt = 2;
      ResumeS.eState = RESUME_WAIT;
      break;
    case RESUME_WAIT:
      ResumeS.bESOFcnt--;
      if (ResumeS.bESOFcnt == 0)
        ResumeS.eState = RESUME_START;
      break;
    case RESUME_START:
      wCNTR = _GetCNTR();
      wCNTR |= CNTR_RESUME;
      _SetCNTR(wCNTR);
      ResumeS.eState = RESUME_ON;
      ResumeS.bESOFcnt = 10;
      break;
    case RESUME_ON:
      ResumeS.bESOFcnt--;
      if (ResumeS.bESOFcnt == 0)
      {
        wCNTR = _GetCNTR();
        wCNTR &= (~CNTR_RESUME);
        _SetCNTR(wCNTR);
        ResumeS.eState = RESUME_OFF;
      }
      break;
    case RESUME_OFF:
    case RESUME_ESOF:
    default:
      ResumeS.eState = RESUME_OFF;
      break;
  }
}

/******************* (C) COPYRIGHT 2007 STMicroelectronics *****END OF FILE****/

⌨️ 快捷键说明

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