?? usb_pwr.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 + -