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.

Problem reset and PUC

Other Parts Discussed in Thread: MSP430F5529

Hi,

We are working on a project where we must port Contiki OS on a MSP430F5529.

We removed the watchdog.

When we run the OS on the msp430F5529, the program will stop and we obtain a WDT time out

SYSRSTIV =0016h WDT time out (PUC)
SYSRSTIV :Reset interrupt vector. It generates an value that can be used as address offset for fast interrupt service routine handling to identify the last cause of an Reset (BOR, POR, PUC) . Writing to this register clears all pending reset source flags.

then we relaunched the program we get, one or two times,an other problem such as "MMP key violation (PUC)" 

SYSRSTIV = 0020h PMM key violation (PUC)

Then the program stop as in the first case.

We reimplement the watchdog
we obtain a PERF peripheral/configuration area fetch (PUC)
SYSRSTIV = 001Eh PERF peripheral/configuration area fetch (PUC)
We never get the same error, we do not understand this problem!

What does this error? How can we solve it?

Thank you
Best regards

Aurélien

  • Hello Aurelien,

    It seems you got some progress on your project ;-)

    In my eyes the PUC is an indicator for a wrong (or not inialized) pointer. The "MSP430x5xx/MSP430x6xx Family User's Guide" slau208G shows on page 31 the reason of PUC. A call of a NULL function pointer for example generates also a PUC (see page 37).

    I used this as a feature to generate a reset by SW.

    I hope this helps.

    Regards

    Guenther

  • Hi Aurélien, it looks like you have quite a problem on your hands!

    Without analysing all of your code most of us can probably only offer pointers and ideas of what to try out or things to look for.  Hopefully you will be able to eventually find the problem. 

    One possible cause of these symptoms could be execution "wandering off the tracks" e.g. invalid array access, stack overflow problems, or pointer errors as Guenther suggested.  If the processor is trying to read/write past the ranges you have specified it could cause the PMM key violation or the PERF fetch error or just sit in a loop until the WD timeout occurs.  Double-check any array accesses and loops - verify the limits are valid and that any dynamic accessing/loop limits cannot exceed the limits.  If you are writing in assembler check some of your loops and jumps or look out for unbalanced stack usage (e.g. taking more off than you put on).  If nothing obvious jumps out immediately I normally comment out sections or function calls and see if the errors stop, then gradually re-introduce the code until the problem reappears.  I also use breakpoints or other progress indicators to identify the problem section(s).

     

    Good luck!

    Chris.

**Attention** This is a public forum