应用中用到了5529的usb模块,但又要求低功耗,在进入LPM3后不关断晶振XT2的话,低功耗的效果就不好,现在困惑的是,如何在低功耗的同时,又能迅速检测usb的接入。
时钟初始化:
void Init_Clock (void){
P5SEL |=0x3c;
Init_FLL_Settle(USB_MCLK_FREQ / 1000, USB_MCLK_FREQ / 32768); //Start the FLL, at the freq indicated by the config constant USB_MCLK_FREQ
XT2_Start(XT2DRIVE_0); //Start the "USB crystal"
UCSCTL3 |= SELREF_2; // FLLref = REFO
UCSCTL4 |= SELA_0+SELS_0 + SELM_0;; //SELA_2; SMCLK = MCLK = XT2 // ACLK=REFO,SMCLK=DCO,MCLK=DCO
UCSCTL6 &= ~XT2OFF; // 振荡器使能
do {
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG); // 清除 XT2,XT1,DCO 错误标志
SFRIFG1 &= ~OFIFG ;
}while(SFRIFG1&OFIFG); // 检测振荡器错误标志
UCSCTL6 |= XT2DRIVE0; //+ XT2DRIVE1; // XT2 驱动模式 24~32MHz
SetVCore(3);
}
此为进入低功耗处理
void MCU_GoToSleep(){
UCSCTL6 |=XT2OFF;
LPM3;
}
在终端函数中,先EXIT_LPM3,然后用以下函数退出低功耗模式
void MCU_ExitSleep(){
UCSCTL6 &=~XTS;
UCSCTL6 &= ~XT2OFF; // 振荡器使能
}
不知这样是否正确,测出的电流有77mA
Young Hu:
wang chun,
您好!
在正常情况下,XT2的功耗只有几百个微安。所以不会出现这种情况。
查一下外围电路以及确认测量方式是否准确。
Young Hu:
另外,能不能描述一下您的系统是实现什么功能的?
Peter_Zheng:
回复 Young Hu:
在5529的user guider 里写的很清楚啊:
NOTE: The USB module only supports active operation during power modes AM through LPM1.
Triton Zhang:
回复 Peter_Zheng:
1. MSP430的USB模块只能在LPM1的时候使用,所以如果楼主既想实现USB又想进入低功耗,就只能通过时分复用的办法.
2. 具体的方法如下:
1) 进入低功耗之前关闭USB接口,设置USB的DP,DM端口为U.1和U.0的输入功能,并且把该端口上的上拉电阻打开。
2) 根据USB 的主机的检测机制,DM或者DP的管脚上一般都有一个15K的下拉电阻,而MSP430的上拉电阻都是弱上拉,所以在未插入USB的主机时,MSP430的U.1和U.0的管脚会被内部上拉拉成高电平,如果插入USB的主机,这两个管脚会被15K和内部的上拉电阻拉成低电平.
3) 楼主通过检测PU.0/PU.1的低电平中断来判断是否有插入USB的终端,然后打开USB的外设.
4) 一旦USB的功能使用结束,就切换管脚到GPIO的模式,进入低功耗的工作状态。这样可以大大的降低整机设备的功耗
Jason Guo:
回复 Triton Zhang:
USBPWRCTL中的USBBGVBV位可以指示当前是否连接到USB上