msp430f147死机
扫描二维码
随时随地手机看文章
经验总结: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当时的问题应该也是这种情况吧
个人认为犯这个错误的几率是比较大的,所以将此问题总结于此,供大家参考。