Part Number: MSP430FR2355
Tool/software: Code Composer Studio
Good evening...
I have the above EVM and am continually getting my code to break and jump into boot.c @ CSTART_DECL _c_int00_noargs_mpu(void).....
I have not noticed problems until I went ahead and updated (a couple of weeks ago) to add CC and RF family products to the existing MSP products that I have been using...It clearly seems the compiler has updated to 20.?? as I have seen warnings saying I had been using compiler 18.??
Please explain what is going on here.....I notice this with hardware only as well as hardware/software breakpoints that I add BEFORE I start the debugger running. This is VERY annoying and on top of it the EVM will periodically go off into space and CANNOT be repowered without re-flashing the MSP DEBUGGER....To do this I must hold in the reset button while the flashing is going on, then I release the reset and the code will flash. I have two EVM boards and both will do the same thing....It's a 50/50 whether they work or lock up. I notice when the issue comes up the RED and GREEN LED on the debugger side will sit there and flash on and off RED, GREEN, RED, GREEN, etc. forever!!
What is going on?????????
Here is the current code that is causing grief! If I place one HW breakpoint somewhere before the while loop (ex. INITUART)....The code runs to there then I hit run again and it stops itself back at INITUART...so it goes into the while loop (verified by my logic analyzer and the signalling of the UART) AND then somehow resets and pops out!
/*
* d_rxtx.c
*
* Created on: Apr 8, 2020
* Author: ridge
*/
#include <msp430.h>
#include <string.h>
#include <stdint.h>
#include "rc.h"
#include "LPRSradio.h"
volatile char *pRx;
char incoming[20];
const char *pTx;
const char *configCmdAck[] = {"ER_CMD#a01", "ER_CMD#W2", "ER_CMD#b1"};
const char *testack = "ACK";
uint8_t i = 0;
boolean tx = T;
int k;
int main(void)
{
WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer
IOconfig;
initClockTo16MHz();
initUART();
pRx = incoming;
pTx = configCmdAck[0];
while (1)
{
__bis_SR_register(LPM3_bits + GIE); //go to sleep: LPM3
if (tx)
pTx++;
else {
if (!strncmp(incoming, configCmdAck[i], 10))
{
pTx = testack;
i++;
UCA1IFG |= UCTXIFG;
}
pRx++;
}
}
}
#pragma vector=USCI_A1_VECTOR
__interrupt void M(void)
{
switch(__even_in_range(UCA1IV, USCI_UART_UCTXCPTIFG))
{
case USCI_NONE: break;
case USCI_UART_UCRXIFG:
tx = F;
*pRx = UCA1RXBUF;
__bic_SR_register_on_exit(LPM3_bits);
break;
case USCI_UART_UCTXIFG:
tx = T;
if (*pTx != '\0')
UCA1TXBUF = *pTx;
__bic_SR_register_on_exit(LPM3_bits);
break;
case USCI_UART_UCSTTIFG: break;
case USCI_UART_UCTXCPTIFG: break;
}
}
Sincerely
Steve
