Other Parts Discussed in Thread: CC2500, SIMPLICITI, MSP430F2274
HELLO,
I HAVE A PROBLEM USING THE WDT IN THE MSP430
I'M WORKING WITH THE MSP430F2274 IN A WIRELESS DATA TRANSMISSION, I'M USING SIMPLICITI WITH THE CC2500 TRNSCEIVER
IN A VERY ELECTRICAL NOISING ENVIROMENT (INDUSTRIAL), SO THE PROBLEM BEGUN WHEN IN SOME CASE THE MSP430 GET FRIZZING
AND THE SISTEM STOP TO RECEIVE THE WIRELESS INFORMATION, SO IN ORDER TO REDUCE THIS PROBLEM I ENABLED THE MSP430
WATCHDOG SYSTEM.
IN THE CODE FIRST STOP THE WATCHDOG AND CLEAN THE COUNTER REGISTER, THEN ENABLE THE PERIFERALS I HAVE IN THE
BOARD (AN ETHERNET CONTROLLER AND THE CC2500 TRANSCEIVER) THEN I WAIT FOR A VALUE WIRELESS LINK TO BE MAKED
NEXT ENABLE THE TIMERS A AND B IN THE MSP430, THEN I ENABLE THE WATCH DOG USING THE VLO CLOCK IN THE ACLK USING
A PRESCALLER VALUE 8, IN ORDER TO MAKE A LONG TIME AS POSSIBLE.
I'M USING THE TIMER B SOURCE TO CLEAN THE COUNTER REGISTER EACH 500MS, THE PROBLEM IS WHEN A WATCHDOG REBOOT IS PERFORMED
IN SOME CASES THE MSP430 GET CICLED REBOOTING THE SYSTEM, I MEAN THE MSP430 REBOOT ITSELF ONE TIME AND AGAIN AND AGAIN
AND NEVER STOP TO REBOOTING, AS YOU CAN SEE IN THE CODE THE FIRST SENTENCE IN THE CODE IS STOP THE WDT SO
I HAVE NO IDEA OF WHAT IS HAPPENING.
DO YOU HAVE ANY IDEA OF WHAT COULD IT BE THE PROBLEM, BELOW YOU CAN SEE THE MAIN OF MY CODE AND THANK YOU IN ADVANCED.
void main (void)
{
WDTCTL = WDTPW + WDTCNTCL +WDTHOLD + WDTNMI;
P1DIR=0xFF; //Set P1.0, 1 and 2 as outputs
P1OUT=0xF4; //set P1.2 to keep the eth module alive
BSP_Init(); //Initialize the DCO and WDT
FCTL2 = FWKEY + FSSEL0 + FN1; //configure the MCU to flash writting
//wait for ETH controler to initialize itself
wait (10000);
//Search for free flash memory to write the event log
search_addr_free();
evento=REINICIO_RECEPTORA;
//**************************************************
// Store MCU initialization
//**************************************************
write_evento(evento);
inicializar_UART(); //UART configuration
inicializar_eth(); //AT comands to configure the ETH module
TACCR0 = 50000;
TACTL = TASSEL_2 + MC_2; //Timer A configuration for Leds events flags
__bis_SR_register(GIE); //GIE
SMPL_Init(sRxCallback); //SimpliciTI stack initialization
if (!BSP_LED2_IS_ON())
{
toggleLED(2); //Turn of led 2
}
linkFrom(); //Wait for a succesful link
BCSCTL1 |= DIVA_3;
BCSCTL3 |= LFXT1S_2; // LFXT1 = VLO
IFG1 &= ~OFIFG; // Clear OSCFault flag
IE2 |= UCA0RXIE; // UART IE enabled
TIMERB(); //TimerB configuration to perform events
WDTCTL = WDTPW + WDTCNTCL + WDTSSEL + WDTIS0 + WDTNMI;
__bis_SR_register(LPM0_bits + GIE); //LPM0+GIE
}