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.

MSP430FR5969: Reset problem

Part Number: MSP430FR5969

Hi,

I have a push button connected in this way to pin 3.5 (input). When I press the button the micro reset.

If I add a 1K resistor the problem disappear. In both cases the the 3.3V doesn't drop down when I press the button, so I don't understand why the micro reset.

 .

  • Hello,

    Are you able to provide a schematic showing the connection of the other MCU pins, especially the RST pin? If the RST pin is configured for its reset function, it should be connected to a 47 kΩ pullup resistor and a 2.2 nF pulldown capacitor. Otherwise noise from pressing the button could cause the RST pin to generate a reset. How are you measuring the 3.3V power rail?

    Regards,
    Ryan
  • When you press the button, C7 is shorted to the power rails and will charge immediately. I doubt that this happens without affecting the power supply; how exactly did you measure the 3.3 V, with a multimeter or an oscilloscope?
  • Hi,
    I have checked again the 3.3V with an oscilloscope, and you are right, the voltage drop to 2.3V for some uS. I checked the datasheet and it shouldn't be enough to reset the micro, but I'm not completely sure. I have also checked the RST pin (47k, 1nF), and on that pin the voltage stay at 3.3V.
  • Hello,

    Can you add the following structure to your code in the main function to see what source is causing the reset?

        switch(__even_in_range(SYSRSTIV, SYSRSTIV__MPUSEGPIFG)) {
            case SYSRSTIV__NONE:        /* No interrupt pending */
                _no_operation();
                break;
            case SYSRSTIV__BOR:         /* Brownout */
                _no_operation();
                break;
            case SYSRSTIV__RSTNMI:      /* RSTIFG RST/NMI */
                _no_operation();
                break;
            case SYSRSTIV__PMMSWBOR:    /* PMMSWBOR software BOR */
                _no_operation();
                break;
            case SYSRSTIV__LPM5WU:      /* LPMx.5 wakeup */
                _no_operation();
                break;
            case SYSRSTIV__SECYV:       /* Security violation */
                _no_operation();
                break;
            case SYSRSTIV__SVSHIFG:     /* SVSHIFG SVSH event */
                _no_operation();
                break;
            case SYSRSTIV__PMMSWPOR:    /* PMMSWPOR software POR */
                _no_operation();
                break;
            case SYSRSTIV__WDTIFG:      /* WDTIFG watchdog timeout */
                _no_operation();
                break;
            case SYSRSTIV__WDTPW:       /* WDTPW watchdog password violation */
                _no_operation();
                break;
            case SYSRSTIV__FRCTLPW:     /* FRCTLPW password violation */
                _no_operation();
                break;
            case SYSRSTIV__UBDIFG:      /* Uncorrectable FRAM bit error detection */
                _no_operation();
                break;
            case SYSRSTIV__PERF:        /* Peripheral area fetch */
                _no_operation();
                break;
            case SYSRSTIV__PMMPW:       /* PMM password violation */
                _no_operation();
                break;
            case SYSRSTIV__MPUPW:       /* MPU password violation */
                _no_operation();
                break;
            case SYSRSTIV__CSPW:        /* CS password violation */
                _no_operation();
                break;
            case SYSRSTIV__MPUSEGPIFG:  /* MPUSEGPIFG encapsulated IP memory segment violation */
                _no_operation();
                break;
            case SYSRSTIV__MPUSEGIIFG:  /* MPUSEGIIFG information memory segment violation */
                _no_operation();
                break;
            case SYSRSTIV__MPUSEG1IFG:  /* MPUSEG1IFG segment 1 memory violation */
                _no_operation();
                break;
            case SYSRSTIV__MPUSEG2IFG:  /* MPUSEG2IFG segment 2 memory violation */
                _no_operation();
                break;
            case SYSRSTIV__MPUSEG3IFG:  /* MPUSEG3IFG segment 3 memory violation */
                _no_operation();
                break;
            default:   break;
        }

    You can set breakpoints in each case at the _no_operation() line to see which one is being entered.

    Regards,

    Ryan

  • Hi,

    do I have to place the code on top of the main ?

    I tried the code but I have a lot of errors, i.e SYSRSTIV__MPUSEGPIFG and other registers are undefined.

    Thanks

    Riccardo

  • Hi Riccardo,

    Whoops, looks like the code I posted had registers for a different device. Here's the ones for the FR5969:

        switch(__even_in_range(SYSRSTIV, SYSRSTIV_ACCTEIFG)) {
            case SYSRSTIV_NONE:        /* No interrupt pending */
                _no_operation();
                break;
            case SYSRSTIV_BOR:         /* SYSRSTIV : BOR */
                _no_operation();
                break;
            case SYSRSTIV_RSTNMI:      /* SYSRSTIV : RST/NMI */
                _no_operation();
                break;
            case SYSRSTIV_DOBOR:       /* SYSRSTIV : Do BOR */
                _no_operation();
                break;
            case SYSRSTIV_LPM5WU:      /* SYSRSTIV : Port LPM5 Wake Up */
                _no_operation();
                break;
            case SYSRSTIV_SECYV:       /* SYSRSTIV : Security violation */
                _no_operation();
                break;
            case SYSRSTIV_SVSHIFG:     /* SYSRSTIV : SVSHIFG */
                _no_operation();
                break;
            case SYSRSTIV_DOPOR:       /* SYSRSTIV : Do POR */
                _no_operation();
                break;
            case SYSRSTIV_WDTTO:      /* SYSRSTIV : WDT Time out */
                _no_operation();
                break;
            case SYSRSTIV_WDTKEY:      /* SYSRSTIV : WDTKEY violation */
                _no_operation();
                break;
            case SYSRSTIV_FRCTLPW:     /* SYSRSTIV : FRAM Key violation */
                _no_operation();
                break;
            case SYSRSTIV_UBDIFG:      /* SYSRSTIV : FRAM Uncorrectable bit Error */
                _no_operation();
                break;
            case SYSRSTIV_PERF:        /* SYSRSTIV : peripheral/config area fetch */
                _no_operation();
                break;
            case SYSRSTIV_PMMPW:       /* SYSRSTIV : PMM Password violation */
                _no_operation();
                break;
            case SYSRSTIV_MPUPW:       /* SYSRSTIV : MPU Password violation */
                _no_operation();
                break;
            case SYSRSTIV_CSPW:        /* SYSRSTIV : CS Password violation */
                _no_operation();
                break;
            case SYSRSTIV_MPUSEGPIFG:  /* SYSRSTIV : MPUSEGPIFG violation */
                _no_operation();
                break;
            case SYSRSTIV_MPUSEGIIFG:  /* SYSRSTIV : MPUSEGIIFG violation */
                _no_operation();
                break;
            case SYSRSTIV_MPUSEG1IFG:  /* SYSRSTIV : MPUSEG1IFG violation */
                _no_operation();
                break;
            case SYSRSTIV_MPUSEG2IFG:  /* SYSRSTIV : MPUSEG2IFG violation */
                _no_operation();
                break;
            case SYSRSTIV_MPUSEG3IFG:  /* SYSRSTIV : MPUSEG3IFG violation */
                _no_operation();
                break;
            case SYSRSTIV_ACCTEIFG:   /* SYSRSTIV : ACCTEIFG access time error */
                _no_operation();
                break;
            default:   break;
        }

    You should be able to place it in your main loop right after the watchdog timer is disabled.

    Regards,

    Ryan

  • Hi Riccardo,

    Were you able to incorporate the code and find which source was causing the reset?

    Thanks,
    Ryan
  • From page 24 of the MSP430FR5969 datasheet:

    (2) Fast supply voltage changes can trigger a BOR reset even within the recommended supply voltage range. To avoid unwanted BOR
    resets, the supply voltage must change by less than 0.05 V per microsecond (±0.05 V/μs).

    I found out the hard way that the FRAM devices can be very sensitive to small (but fast) changes in the power rail even when the minimum levels are far from the specified minimum BOR thresholds.
  • Yes, I have a fast change in the voltage and it reset the micro, even if the power supply stay in the limits.

  • I have incorporated the code, but when I have the spike the communication with the MSP430 programmer go down. The most of times the code restart without interrupt pending, just once the micro reset due the BOR. Anyway I think the reset is due to the fast changing in the power supply voltage.

**Attention** This is a public forum