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.

MSP430F54xx 系列的软件指令复位



这里除了提供软件看门狗复位的方法,还提供其他的软件复位方式。

看门狗的复位代码:#define SW_RESET() WDTCTL = WDT_MRST_0_064; while(1);

在5xx/6xx和 CC430系列中有PMM (电源管理模块), 可以使用软件的BOR和POR如下:

#define SW_RESET() PMMCTL0 = PMMPW + PMMSWBOR + (PMMCTL0 & 0x0003); 
#define SW_RESET() PMMCTL0 = PMMPW + PMMSWPOR + (PMMCTL0 & 0x0003); 

如何追踪复位的原因呢?在5xx/6xx系列中,可以通过判断SYSRSTIV寄存器来检测上次复位的原因。

为了调试方便,使用如下的代码来保存SYSRSTIV寄存器的数值。

对于 CCS 编译器:

//定义全局变量保存复位的原因
#pragma NOINIT (SysRstIv);
unsigned int SysRstIv;
 
int _system_pre_init(void)
{
  //停止看门狗
  WDTCTL = WDTPW + WDTHOLD;
  //保存复位信息
  SysRstIv = SYSRSTIV;
  return 1;
}

对于IAR编译器:

//定义全局变量保存复位的原因
__no_init unsigned int SysRstIv;
 
int __low_level_init(void)
{

  //停止看门狗
  WDTCTL = WDTPW + WDTHOLD;
  SysRstIv = SYSRSTIV;
  return 1;
}