访问手机版页面
你的位置:老古开发网 > MSP430单片机经验总结 > 正文  
msp430f147死机
内容导读:
经验总结:MSP430F147在电源不稳频繁复位时的情况下,死机原因分析。在我的系统中,需要处理电源极端不稳,造成MSP430F147频繁复位的情况, 在实验中发现多次复位后,F147死掉,必须断电重启,才能正常复位。在论坛中

经验总结:MSP430F147在电源不稳频繁复位时的情况下,死机原因分析。

在我的系统中,需要处理电源极端不稳,造成MSP430F147频繁复位的情况,
在实验中发现多次复位后,F147死掉,必须断电重启,才能正常复位。

在论坛中搜到了faxmonkey的帖子:
引用:
作者faxmonkey
我今天也碰到这个问题了,我做的是用于电力上的,380V的市电无隔离地整流、降压后,用于MSP430的电源。电源在三相缺一相时,仍能正常。

我的试验步骤如下:

1、我将其中一相电源线折下,频繁地接上、断开,产生冲击,结果,几下后就死机。(断开、接上时,会有火花,而且这时用示波器看电源,会有3V左右的尖峰)
2、使用内部DCO驱动,不再死机。

根据上述步骤,我初步怀疑晶体停振,但由于430在晶体停振后,还会自动选择DCO,于是我在程序中加了一段检测代码,结果没发现晶体停振。根据上述现象,我初步推测晶体并没有停掉,而是程序已跑飞,此时看门狗已开启(我在JTAG仿真时试过了),但程序跑飞后,我也没看到看门狗复位。
最后,我改为DCO驱动,无论怎么加干扰,都没事。到现在为止,我也不清楚,为什么我的看门狗不会引起复位。

经实验现象确如所言,但想不通为什么会出现“程序跑飞,而看门狗又不起作用”的现象。
后来发现,在自己的程序中,初始化外部时钟时,先切换到了外部时钟,再等待其稳定,这显然是不合理的,并且恰好就是容易导致程序跑飞的地方。

调整这段程序的顺序,此问题不再出现。

分析这个问题的成因:
1. 由于BCSCTL1和BCSCTL2都需要初始化,可能是为了代码美观,所以很顺手的把BCSCTL2放到了等待外部时钟稳定之前。
2. 恰好在产品开发初期,电源稳定,这个问题极少出现表现出来,待实际现场实验时,问题出现了,往往又不会怀疑到这个地方。

------------------------------------------------------------------------------------------------------------------
MSP430系列单片的中断实现与中断嵌套!

--------------------------------------------------------------------------------

1)430默认的是关闭中断嵌套的,除非你在一个中断程序中再次开总中断EINT;

2)当进入中断程序时,只要不在中断中再次开中断,则总中断是关闭的,此时来中断不管是比当前中断 优先级高还是低都不执行;

3)若在中断A中开了总中断,则可以响应后来的中断B(不管B的优先级比A高还是低),B执行完再继续执行A。注意:进入中断B后总中断同样也会关闭,如果B中断程序执行时需响应中断C,则此时也要开总中断,若不需响应中断,则不用开中断,B执行完后跳出中断程序进入A程序时,总中断会自动

打开;
4)若在中断中开了总中断,后来的中断同时有多个,则会按优先级来执行,即中断优先级只有在多个中断同时到来时才起做用!

5)
对于单源中断,只要响应中断,系统硬件自动清中断标志位,对于TA/TB定时器的比较/捕获中断,只要访问TAIV/TBIV,标志位倍被自动清除;
对于多源中断要手动清标志位,比如P1/P2口中断,要手工清除相应的标志,如果在这种中断用"EINT();"开中断,而在打开中断前没有清标志,就会有相同的中断不断嵌入,而导致堆栈溢出引起复位,所以在这类中断中必须先清标志再打开中断开关.


猜测faxmonkey当时的问题应该也是这种情况吧

个人认为犯这个错误的几率是比较大的,所以将此问题总结于此,供大家参考。

标签: msp430f147,死机,
来源:互联网 作者:karen 时间:2018/8/10 12:20:01
相关阅读
推荐阅读
阅读排行
最近更新
商品推荐