具有“安全违规(BOR)”的MSP430随机复位

时间:2015-03-09 13:59:58

标签: c embedded reset msp430

我正面临RANDOM控制器重置,' SYSRSTIV '寄存器根据用户指南给出值'0x0A',表示'安全违规(BOR)'。我搜索了许多论坛,发现了与该问题相关的几个主题,但没有帮助。

详细信息:

使用的控制器: MSP430F6634

问题:随机重启

假设

>嵌套ISR :但情况并非如此,因为默认情况下MSP430禁用全局中断,而在ISR中我确定我没有启用

>看门狗定时器(WDT):这不是这种情况,因为WDT导致'SYSRSTIV'寄存器读取值为0x18

>堆栈溢出:这是我最后的假设,但这似乎并非如此,因为我不断打印堆栈指针以检查它是否超出了限制,这并没有发生。

> DMA寄存器:在TI论坛中发现了类似的问题,提示DMA寄存器处理,DMA仅用于我们项目中的USB,禁用 USB完全没有帮助

数据表和用户手册中记录的很少,TI客户支持到目前为止没有任何帮助。我从3个星期开始努力解决这个问题,我无法解决它。

请帮帮我。

提前致谢。

2 个答案:

答案 0 :(得分:1)

"安全违规"表示您的代码试图访问BSL的受保护内存区域。

错误的DMA编程可能会发生这种情况,但在您的情况下,您更有可能使用错误的指针。 (这可能是由其他一些错误指针引起的内存损坏的结果。)

答案 1 :(得分:1)

@CL。 谢谢为您的指导,这真的很有成效。

我使用 __ no_init 并记录了重置之前的最后一个函数,但是我无法用此结束,所以我使用 __ no_init创建了一个ARRAY 并记录了它在RESET之前的最后200个功能/位置,我今天能够知道这个问题。 (这是一个漫长的等待)

原因是:

我从数组中读取数据并计算CRC,由于数据溢出我得到了错误的长度(负值)并且指针继续读取E NTIRE RAM,DATA和CODE存储器最后在我获得RESET之前,最终得到了 BSL 内存。

我还有一个问题是:

1。如果我仅阅读数据,而不是操纵/覆盖这些位置的信息,为什么我安全违规

2。为什么我只在读取指针位置 0x1010 (BSL内存)的值时才获得RESET,而不是在等任何其他位置读取代码存储器等也是BSL存储器从 0x1000 开始,但RESET仅在指针到达 0x1010 且NO从 0x1000复位到0x100F 。我很好奇。

@CL。再次感谢你:))