//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 InitIMU(void) { InitSensors(); int16_t gyroADC[3]; //Calibration for (int i = 0; i< 600; i++) { GetGyroData(gyroADC); delay(1); } }