当前位置:首页 > 单片机 > 单片机
[导读]usb_pwr.c 这个文件看文件名就知道跟功耗有关了,有很多的状态:上电、掉电、挂起、恢复。当首先是usb的上电和断电函数的定义了。usb上电函数如下:/*************************************************************

usb_pwr.c 这个文件看文件名就知道跟功耗有关了,有很多的状态:上电、掉电、挂起、恢复。

当首先是usb的上电和断电函数的定义了。

usb上电函数如下:

/*******************************************************************************

* Function Name : PowerOn

* Description : 上电

* Input : None.

* Output : None.

* Return : USB_SUCCESS.

*******************************************************************************/

RESULT PowerOn(void)

{

u16 wRegVal;


USB_Cable_Config(ENABLE);//接上上拉电阻

wRegVal = CNTR_FRES;//设置强制复位

_SetCNTR(wRegVal);

wInterrupt_Mask = 0;//先禁止所有的中断

_SetCNTR(wInterrupt_Mask);

_SetISTR(0);//清除所有的中断标志

wInterrupt_Mask = CNTR_RESETM | CNTR_SUSPM | CNTR_WKUPM;

_SetCNTR(wInterrupt_Mask);//再打开复位中断、挂起中断、唤醒中断屏蔽位


return USB_SUCCESS;

}


上电的过程是:

1、当然接上D+或D-的上啦电阻,让主机可以识别到USB;

2、配置USB控制寄存器CNTR,是USB强制复位

3、打开复位中断、挂起中断、唤醒中断,其他中断屏蔽位则关闭


接下去是断电的函数定义:

/*******************************************************************************

* Function Name : PowerOff

* Description : 掉电

* Input : None.

* Output : None.

* Return : USB_SUCCESS.

*******************************************************************************/

RESULT PowerOff()

{

/* disable all ints and force USB reset */

_SetCNTR(CNTR_FRES);//设置强制复位

_SetISTR(0);//清除所有的中断标志

USB_Cable_Config(DISABLE);//断开上拉电阻

_SetCNTR(CNTR_FRES + CNTR_PDWN); //设置强制复位,并且进入断电模式


return USB_SUCCESS;

}


掉电的过程很简单,先强制复位USB,并清除所有的中断标志,断开上拉电阻,并设置控制进入断电模式。


挂起也是USB的一种状态,所谓的挂起起始就是进入低功耗状态,一般的事情我不响应,除非有重要的事情我才唤醒处理。

/*******************************************************************************

* Function Name : Suspend

* Description : 挂起

* Input : None.

* Output : None.

* Return : USB_SUCCESS.

*******************************************************************************/

void Suspend(void)

{

u16 wCNTR;


wCNTR = _GetCNTR(); //读取控制寄存器的值

wCNTR |= CNTR_FSUSP; //添加强制挂起标志

_SetCNTR(wCNTR); //进入挂起模式

wCNTR = _GetCNTR(); //读取控制寄存器的值

wCNTR |= CNTR_LPMODE; //添加低功耗标志

_SetCNTR(wCNTR); //进入低功耗模式


Enter_LowPowerMode(); //进入低功耗模式


}


进入挂起状态的过程跟我们平时进入中断服务函数的过程很像,当然要保护现场了。所以usb进入挂起状态,不改变控制寄存器原来的值,只是在原来的上面添加了挂起状态和低功耗状态标志而已。


说到挂起,当然有恢复了。首先的讲Resume_Init()这个函数:

/*******************************************************************************

* Function Name : Resume_Init

* Description : 处理唤醒恢复的函数

* Input : None.

* Output : None.

* Return : USB_SUCCESS.

*******************************************************************************/

void Resume_Init(void)

{

u16 wCNTR;


wCNTR = _GetCNTR();

wCNTR &= (~CNTR_LPMODE);

_SetCNTR(wCNTR);//进入非低功耗模式

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

_SetCNTR(IMR_MSK); //打开使能全部中断


}


这个就是唤醒的函数了,比较简单,但是比较难理解的是恢复的各个状态。

typedef enum _RESUME_STATE

{

RESUME_EXTERNAL,

RESUME_INTERNAL,

RESUME_LATER,

RESUME_WAIT,

RESUME_START,

RESUME_ON,

RESUME_OFF,

RESUME_ESOF

} RESUME_STATE;


恢复有这么多的状态变化,当然有理由理解下各个状态了。

RESUME_EXTERNAL:个人理解,就想硬件复位一样,是通过某个物理硬件唤醒USB的

RESUME_INTERNAL:这个状态的唤醒应该就是软件唤醒之类的,比如收到某个中断

RESUME_LATER:表示待会儿唤醒,当然这里涉及到一个定时过程,定时时间到了在开始恢复

RESUME_WAIT:这个状态表示正在等待定时过程的结束

RESUME_START:表示USB开始要进行恢复了

RESUME_ON:表示即将恢复,该状态保持1毫秒~15ms内有效,主机就会对USB模块进行唤醒操作

RESUME_OFF:表示已经恢复完成了

RESUME_ESOF:个人理解表示,收到ESOF中断标志时,USB不允许进入挂起状态



各个状态之间的转化如下代码:

/*******************************************************************************

* Function Name : Resume

* Description :这是状态机处理恢复操作和时序。控制是基于Resume结构变量和

* ESOF中断调用该子程序没有改变机状态。控制恢复的状态

* Input : a state machine value (RESUME_STATE)

* RESUME_ESOF doesn't change ResumeS.eState allowing

* decrementing of the ESOF counter in different states.

* Output : None.

* Return : None.

*******************************************************************************/

void Resume(RESUME_STATE eResumeSetVal)

{

u16 wCNTR;


if (eResumeSetVal != RESUME_ESOF) //如果不是ESOF中断导致的

ResumeS.eState = eResumeSetVal; //ResumeS.eState设置为自己设定的值


switch (ResumeS.eState)

{

case RESUME_EXTERNAL: //RESUME_EXTERNAL 外部恢复

Resume_Init();

ResumeS.eState = RESUME_OFF;

break;

case RESUME_INTERNAL: //RESUME_INTERNAL 内部恢复

Resume_Init();

ResumeS.eState = RESUME_START;

break;

case RESUME_LATER: //RESUME_LATER定时恢复

ResumeS.bESOFcnt = 2;

ResumeS.eState = RESUME_WAIT;

break;

case RESUME_WAIT: //RESUME_WAIT 等待计时结束

ResumeS.bESOFcnt--;

if (ResumeS.bESOFcnt == 0)

ResumeS.eState = RESUME_START;

break;

case RESUME_START: //RESUME_START 开始恢复

wCNTR = _GetCNTR();

wCNTR |= CNTR_RESUME;

_SetCNTR(wCNTR); //设置唤醒请求位,将向PC主机发送唤醒请求

ResumeS.eState = RESUME_ON;

ResumeS.bESOFcnt = 10; //定时10ms,如果在这点时间内保持有效,主机将对USB模块进行唤醒操作

break;

case RESUME_ON: //RESUME_ON

ResumeS.bESOFcnt--; //计时中

if (ResumeS.bESOFcnt == 0) //计时时间到了

{

wCNTR = _GetCNTR();

wCNTR &= (~CNTR_RESUME); //清除唤醒请求标志位

_SetCNTR(wCNTR);

ResumeS.eState = RESUME_OFF;

}

break;

case RESUME_OFF: //RESUME_OFF

case RESUME_ESOF: //RESUME_ESOF

default:

ResumeS.eState = RESUME_OFF;

break;

}

}


明显可以看到个状态的转化过程:

1、RESUME_EXTERNAL->RESUME_OFF

2、RESUME_INTERNAL->RESUME_START->RESUME_ON->RESUME_OFF

3、RESUME_WAIT->RESUME_START->RESUME_ON->RESUME_OFF

4、RESUME_ESOF->RESUME_OFF


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭