//Initialize system void Init() { unsigned int i; IFG1 &= ~OFIFG; // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; //Adjust DCO frequency // //DCOCTL = DCO0 + DOC1 +DOC2; // DCOCTL = 0x80; // BCSCTL1 = XT2OFF + RSEL0 + RSEL1 + RSEL2; // BCSCTL2 = 0; //调整DCO的频率 DCOCTL = 0xE0; //切换MCLK到外部高速晶振(需要检测是否起振) //BCSCTL1 &= ~XT2OFF; //启动高速晶振 BCSCTL1 = RSEL0 + RSEL1 + RSEL2; do { //清除振荡器失效标志位,再延迟检查 IFG1 &= ~OFIFG; for (i = 0; i < 1000; i++) { __no_operation(); } } while (IFG1 & OFIFG); //使用XT2, SMCLK = MCLK = 8MHz BCSCTL2 = SELM1 + SELS; //允许外部振荡器失效后,重启系统 IE1 |= OFIE; InitPort(); InitUART(); InitADC(); InitSPI(); InitRF(); InitSensors(); InitTimer(); ShutdownModule(); }
void Shutdown() override { // Better have more than 0 instances here check(FOculusAudioPlugin::NumInstances > 0); FOculusAudioPlugin::NumInstances--; if (FOculusAudioPlugin::NumInstances == 0) { // Shutdown OVR audio ovrAudio_Shutdown(); ShutdownModule(); FOculusAudioPlugin::bInitialized = false; } }