应用中用到了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; // 振荡器使能
}