《线程》中讨论的其他部件: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
*/
}
正常代码继续