CPU使用MSP430F2618,程序初始化时,关闭watchdog, 在while(1)循环里面,执行完任务程序,就进入LPM3, 使用定时中断,定时计数到5秒,就退出LPM3低功耗模式( LPM3_EXIT), 程序运行,会不定期的CPU自复位, 我通过示波器监视/RST脚,复位时,该引脚电平还是高电平, 是什么原因造成CPU自复位的呢?
还有一种情况就是,程序不进入LPM3模式,通过串口监视,程序运行时不会复位。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
CPU使用MSP430F2618,程序初始化时,关闭watchdog, 在while(1)循环里面,执行完任务程序,就进入LPM3, 使用定时中断,定时计数到5秒,就退出LPM3低功耗模式( LPM3_EXIT), 程序运行,会不定期的CPU自复位, 我通过示波器监视/RST脚,复位时,该引脚电平还是高电平, 是什么原因造成CPU自复位的呢?
还有一种情况就是,程序不进入LPM3模式,通过串口监视,程序运行时不会复位。
TimerA 的时钟源是ACLK, 定时中断周期是10ms,
初始化函数如下:void TimerA_init(void)
{
CCR0 = (uint16)8192/100; //ACLK =32768, 8192/100=81.9, 定时10ms。
TACTL = TASSEL_1 + TAIE + TACLR + MC_1 + ID_2; //ACLK, clear TAR, up mode, enable TAIFG, 4 分频。
}
定义一个变量,在定时中断函数里累加到5秒,然后退出LPM3模式,
定时中断函数如下:
__interrupt void Timer_A (void) // msp430f2618 timer interrupt
{
switch( TAIV )
{
case 2: break ; // CCR1 not used
case 4: break; // CCR2 not used
case 10:
{
if(tt++>500)
{
tt = 0;
LPM3_EXIT;
}
}
}
}
我的复位电路是阻容复位,测/rs引脚电平时,只有2.1V左右,电源是3.3V, 为什么不是3.3V呢?
不好意思,后来发现2.1V电压,是因为接了仿真器,仿真器另一头没有接PC机,把仿真器拔掉,电压恢复到3.3V。
我的程序里面是加了break语句,不明白不加LPM3_EXIT, 为什么会自动退出低功耗模式呢?
我的主程序,使用了一个while(1)循环,如下:
while(1){
LPM3; //进入LP3低功耗模式
PT100_temp(); //PT100温度检测
Therm_tempsample();
AD7795_PowerDown(); //AD7795进入掉电模式
task_sendFrame();
}
我把LPM3屏蔽掉,不进入低功耗模式时,程序运行时,就不会复位,这个现象有点奇怪。