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