TI中文支持网
TI专业的中文技术问题搜集分享网站

MSP430F2370: 看门狗不会复位

Part Number:MSP430F2370

我使用这个MSP430F2370芯片目前在大规模使用中发现有些客户反馈程序无法正常使用,必须要断电重新启动才正常。程序在上电后会关看门狗2秒左右但是如果是检测到看门狗复位直接跳过,之后就初始化看门狗一直打开。现在感觉是干扰问题导致芯片无法启动看门狗复位,大家有没有遇到这种情况,有没有什么好的建议

Susan Yang:

jian tang 说:程序在上电后会关看门狗2秒左右但是如果是检测到看门狗复位直接跳过

能否给出您的程序?另外请您在板子上测试一下下面的程序

/* --COPYRIGHT--,BSD_EX* Copyright (c) 2012, Texas Instruments Incorporated* All rights reserved.** Redistribution and use in source and binary forms, with or without* modification, are permitted provided that the following conditions* are met:** *Redistributions of source code must retain the above copyright*notice, this list of conditions and the following disclaimer.** *Redistributions in binary form must reproduce the above copyright*notice, this list of conditions and the following disclaimer in the*documentation and/or other materials provided with the distribution.** *Neither the name of Texas Instruments Incorporated nor the names of*its contributors may be used to endorse or promote products derived*from this software without specific prior written permission.** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.**********************************************************************************MSP430 CODE EXAMPLE DISCLAIMER** MSP430 code examples are self-contained low-level programs that typically* demonstrate a single peripheral function or device feature in a highly* concise manner. For this the code may rely on the device's power-on default* register values and settings such as the clock configuration and care must* be taken when combining code from several examples to avoid potential side* effects. Also see www.ti.com/grace for a GUI- and www.ti.com/msp430ware* for an API functional library-approach to peripheral configuration.** --/COPYRIGHT--*/
//******************************************************************************
//MSP430x24x Demo - Reset on Invalid Address fetch, Toggle P1.0
//
//Description: This program demonstrates how a reset is executed if the CPU//tries to fetch instructions from within the module register memory address//range (0x0000 --0x01FF) or from within unused address ranges. Toggle P1.0//by xor'ing P1.0 inside of a software loop that ends with TAR loaded with//3FFFh - op-code for "jmp $". This simulates a code error. The MSP430F229//will force a reset because it will not allow a fetch from within the address//range of the peripheral memory, as is seen by return to the mainloop and//LED flash.
//ACLK = n/a, MCLK = SMCLK = default DCO ~1.045Mhz
//
//MSP430F249
//-----------------
///|\|XIN|-
//| ||
//--|RSTXOUT|-
//||
//|P1.0|-->LED
//
//B. Nisarga
//Texas Instruments Inc.
//September 2007
//Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.42A
//******************************************************************************
#include <msp430.h>int main(void)
{WDTCTL = WDTPW + WDTHOLD;// Stop watchdog timerP1DIR |= 0x01;// Set P1.0 to output directionTAR = 0x3FFF;// Valid opcode (for "jmp $")for (;;){volatile unsigned int i;P1OUT ^= 0x01;// Toggle P1.0 using exclusive-ORi = 50000;// Delaydo (i--);while (i != 0);// C code to directly call an address location((void (*)())0x170)();// Invalid fetch ("call #0170h")/* 0x170 is address of TAR register and is within the module register memoryaddress range (0x0000 --0x01FF) */}// ** Should never get here **
}

,

jian tang:

我测试上面代码是不断重启MCU的,下面是我部分的代码

void main1(void)
{//$$$ .初始化 - 关看门狗,设置时钟//..........................................................................WDTCTL = WDTPW + WDTHOLD;// Stop WDTOSCsel(SYS_CLK_8M);//set the oscilatorFCTL2 = FWKEY + FSSEL_2 + FN4 + FN3 + FN2 + FN1;// MCLK/2 for Flash Timing Generator//$$$ .IO 初始化,设置TRF796x端口初始化//.........................................................................IO_INIT();//IO初始化PARset();//TRF796x并行模式,端口设置//$$$ .Modbu协议初始化//.........................................................................FLASH_INIT();//FLASH,相关项目初始化ModbusInit(DEV_infor.DevID, SendMultByte, UartBufMax);//modbus初始化HostCommands();//主机控制
}void IO_INIT(void)
{//$$$ .LED_ID, RS485 初始设置//..........................................................................P3DIR |= BIT6;// LED -- P3.6 - output// P3REN |= BIT6;//LED--使能上拉电阻//P2DIR |= BIT3;// RS485EN --P2.3 - output// P2REN |= BIT3;//RS485EN 使能上拉电阻SetRS485_Rx;//使能RS485接收//$$$ .LED_ID 开机闪烁控制//..........................................................................if((IFG1 & 0x01) == 0x00) //看门狗超时引起的重启不延时 2017年5月25日----{LED_ID_OFF;//LED灭delay_ms(600);//上电LED先灭LED_ID_ON;//LED亮delay_ms(100);//定时不准 后面再调整LED_ID_OFF;//LED灭delay_ms(900);//上电LED先灭LED_ID_ON;//LED亮delay_ms(100);//定时不准 后面再调整LED_ID_OFF;//LED灭}
}void OSCsel(unsigned char mode)
{unsigned int ii1;if (mode == 0x00)//select crystal oscilator{BCSCTL1 |= XTS + XT2OFF;// ACLK = LFXT1 HF XTALBCSCTL3 |= LFXT1S1;// 3 ?16MHz crystal or resonator// turn external oscillator ondo{IFG1 &= ~OFIFG;// Clear OSCFault flagfor (ii1 = 0xFF; ii1 > 0; ii1--);// Time delay for flag to set}while ((IFG1 & OFIFG) == OFIFG);// OSCFault flag still set?BCSCTL2 |= SELM1 + SELM0 + SELS;//MCLK = SMCLK = HF LFXT1 (safe)//return;}else//select DCO for main clock{if (CALBC1_8MHZ == 0xFF || CALDCO_8MHZ == 0xFF){while (1);// If calibration constants erased// do not load, trap CPU!!}//BCSCTL1:BCSCTL1 = CALBC1_8MHZ;// Set DCO to 8MHzDCOCTL = CALDCO_8MHZ;BCSCTL1 &= ~XTS;//使能低频内部时钟12KHZ//BCSCTL2: MCLK,SMCLKBCSCTL2 = 0;//BCSCTL3:BCSCTL3 |= LFXT1S1;//LFXT1 范围选择 = VLOCLK}P1DIR |= 0x10;// P1.4 output directionP1SEL |= 0x10;// P1.4 = SMCLK}void HostCommands()
{POLLING = 0;GucUIDLen = 0;GucComRecCount = 0;PcdAntennaOn();//打开天线ClrWDG();//启动看门狗,超时0.6S重启EnableInterrupts;//使能全局中断while (1){ClrWDG();//主循环}
}

,

Susan Yang:

谢谢反馈。看起来您的代码没什么问题。

您是否有在线调试到哪句代码复位?

另外建议将MSP430的看门狗相关代码单独拿出来测试

,

jian tang:

这个问题不是某行代码出现的,在客户现在使用一段时间后出现的。不知道你们有没有收到类似问题,就是我开了看门狗受到什么干扰单片机导致看门狗不能复位

赞(0)
未经允许不得转载:TI中文支持网 » MSP430F2370: 看门狗不会复位
分享到: 更多 (0)