《线程》中讨论的其他部件:MSP430F5659
我正在对8个通道上的60Hz 信号进行多通道连续采样,
启动系统时一切正常,结果与预期完全相同。
当我关闭主电源时,当电源再次打开时,代码会进入 LPM,设备会退出 LPM,但来自 ADC 的前几个样本正确无误
-一开始我在呼叫 LPM 之前执行一些 LPM 前设置(关闭某些模块和 I/O 以节省电源),并在退出 LPM 后执行一些 LPM 后重新初始化
-要调试此问题,我取消了所有预 LPM 和后 LPM,但问题仍然相同
感谢您的帮助
while(1) { WDT_A_resetTimer(WDT_A_BASE); if (PwrupDwnFromCmpr == 0x0) /// this flag indicat power down sensed by comparator { ///////////// below code is to ENTER LPM WDT_A_hold(WDT_A_BASE); //turn off Watchdog during initialization /* /////////////// all Pre-LPM is commented Healthy_OFF(); TURN_OFFLEDS_456789(); TRIP_OFF_PHASE_A(); Pick_OFF(); Analog_Disable(); ///turn off analog supply ADC12_A_disableConversions(ADC12_A_BASE, 1); ADC12_A_disable(ADC12_A_BASE); Timer_A_stop(TIMER_A0_BASE); Timer_A_stop(TIMER_A1_BASE); USCI_A_UART_disable(USCI_A1_BASE); GPIO_setOutputLowOnPin(GPIO_PORT_P9,GPIO_PIN0); /// LCD RST UCB1CTL1 |= UCSWRST; // disable I2C GPIO_setAsOutputPin(GPIO_PORT_P8,GPIO_PIN_ALL8);///GPIO_setAsOutputPin(GPIO_PORT_P8,GPIO_PIN2); GPIO_setOutputLowOnPin(GPIO_PORT_P8,GPIO_PIN_ALL8);// GPIO_PIN2+GPIO_PIN3+GPIO_PIN5+GPIO_PIN6);// init all as Zero output GPIO_setOutputLowOnPin(CTRL_LCD_ENABLE_PORT,CTRL_LCD_ENABLE_PIN); /// turn off lcd power GPIO_setOutputLowOnPin(GPIO_PORT_P3,GPIO_PIN0);// Txen pin to 0 to save pwr GPIO_setOutputLowOnPin(GPIO_PORT_P1,GPIO_PIN7);// Rxen pin to 0 to save pwr GPIO_setAsOutputPin(GPIO_PORT_P2,GPIO_PIN0+GPIO_PIN1); /// Dinput 1 , 2 as output 0 GPIO_setOutputLowOnPin(GPIO_PORT_P2,GPIO_PIN0+GPIO_PIN1+GPIO_PIN4); /// Dinput 1 , 2 & oscilator as output 0 GPIO_setAsOutputPin(GPIO_PORT_P1,GPIO_PIN_ALL8); GPIO_setOutputLowOnPin(GPIO_PORT_P1,GPIO_PIN_ALL8); GPIO_setAsOutputPin(GPIO_PORT_P6,GPIO_PIN_ALL8); GPIO_setOutputLowOnPin(GPIO_PORT_P6,GPIO_PIN_ALL8); __no_operation(); // save to flash HWREG8(PMM_BASE + OFS_PMMCTL0_H) = 0xA5; /// unlock PMM password HWREG8(PMM_BASE + OFS_PMMCTL0_L) |= 0x10;//// disabl PMM regulator UCS_turnOffXT2(); /// if timer is not stopped and timer is drivern from XT2 dependent clock i.e SMCLK/MCLK xt2 will not stop */ //Comp_B_disable(COMP_B_BASE); if(PwrupDwnFromCmpr == 0) { __bis_SR_register(LPM3_bits | GIE); /// with disabled regulator it's LPM3.5 } ///////////// below code is to exit LPM /* //////////////////// all Post-LPM commented for debug WDT_A_hold(WDT_A_BASE); //turn off Watchdog during initialization GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P7, GPIO_PIN2+GPIO_PIN3);// P7.2 & P7.3 are Xtl2 and Clk_Init(); GPIO_Init_(); Analog_Enable(); /// turn on analog supply #ifdef LCD_ON { initI2C(); } #endif InitPhStruct(HALF_CHANNELS);///////////we need to init the structure for PhaseTripStruct[4] and tripConfig TimerTa0_Init(); //no need to reinit timer just start it in the A2D_Init() // __delay_cycles(300000); /// delay teseted at different delays BUT it approved to be is useless A2D_Init(); /// this function start the timer Timer_A1_10ms_Init(); /////////////////////////////// UART RE INIT serial_Interlock = UNLOCKED; UartTx_Buf_index = 0; UartTx_Buf_State = EMPTY; Init_Urat0(); /////////////////////////////// LCD RE INIT //GPIO_setOutputHighOnPin(CTRL_LCD_ENABLE_PORT,CTRL_LCD_ENABLE_PIN); /// turn ON lcd power //GPIO_setOutputHighOnPin(GPIO_PORT_P8, GPIO_PIN2+GPIO_PIN3+GPIO_PIN5+GPIO_PIN6);// init all as Zero output initialized = 0; /// LCD is not initialized lcd_handle = 0; writeByteLock = 0; ST7032_init_state = ST7032_RESET; ST7032_disp_state = ST7032_DISPLAY; ST7032_sub_state = ST7032_SUB_IDLE; WDT_A_start(WDT_A_BASE); //A2D_Init(); /// this function start the timer */ }
正常代码继续