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.

Strange behavior after watchdog timer re-boot.

All,

I am seeing an occasional problem following a watchdog timer re-boot.  Our product uses a watchdog reset to implement a user-controlled re-boot of our product.

A user re-boot request will bring code execution to the following:

timer->wdtcr = TIMER_WDTCR_WDKEY(0x1111);

timer->wdtcr = TIMER_WDTCR_WDKEY(0x2222);

 

 

 

while (1);

Whereby, the watchdog timer will generate a reset condition.  Our MMU configuration is as follows:

const   ESAL_GE_MEM_REGION      ESAL_DP_MEM_Region_Data[ESAL_DP_MEM_NUM_REGIONS] =
{
                                /* MEMORY REGION 1 - INT SRAM (INSTRUCTION)         */
                                {(VOID *)0x00000000,            /* Physical Start   */
                                 (VOID *)0x00000000,            /* Virtual Start    */
                                 ESAL_GE_MEM_16K,               /* Size             */
                                 ESAL_NOCACHE,                  /* Cache type       */
                                 ESAL_RAM,                      /* Memory type      */
                                 ESAL_INST},                    /* Memory access    */

                                /* MEMORY REGION 2 - INT ROM (INSTRUCTION)          */
                                {(VOID *)0x00004000,            /* Physical Start   */
                                 (VOID *)0x00004000,            /* Virtual Start    */
                                 ESAL_GE_MEM_16K,               /* Size             */
                                 ESAL_NOCACHE,                  /* Cache type       */
                                 ESAL_ROM,                      /* Memory type      */
                                 ESAL_INST},                    /* Memory access    */

                                /* MEMORY REGION 3 - INT SRAM (DATA)                */
                                {(VOID *)0x00008000,            /* Physical Start   */
                                 (VOID *)0x00008000,            /* Virtual Start    */
                                 ESAL_GE_MEM_16K,               /* Size             */
                                 ESAL_NOCACHE,                  /* Cache type       */
                                 ESAL_RAM,                      /* Memory type      */
                                 ESAL_DATA},                    /* Memory access    */

                                /* MEMORY REGION 4 - INT ROM (DATA)                 */
                                {(VOID *)0x0000C000,            /* Physical Start   */
                                 (VOID *)0x0000C000,            /* Virtual Start    */
                                 ESAL_GE_MEM_16K,               /* Size             */
                                 ESAL_NOCACHE,                  /* Cache type       */
                                 ESAL_ROM,                      /* Memory type      */
                                 ESAL_DATA},                    /* Memory access    */

                                /* MEMORY REGION 5 - Flash/NAND/SRAM/DC             */
                                {(VOID *)0x02000000,            /* Physical Start   */
                                 (VOID *)0x02000000,            /* Virtual Start    */
                                 ESAL_GE_MEM_64M,               /* Size             */
                                 ESAL_NOCACHE,                  /* Cache type       */
                                 ESAL_ROM,                      /* Memory type      */
                                 ESAL_INST_AND_DATA},           /* Memory access    */

                                 /* MEMORY REGION 6 - FPGA                          */
                                 {(VOID *)0x06000000,           /* Physical Start   */
                                  (VOID *)0x06000000,           /* Virtual Start    */
                                 ESAL_GE_MEM_1M,                /* Size             */
                                 ESAL_NOCACHE,                  /* Cache type       */
                                 ESAL_MEM_MAPPED,               /* Memory type      */
                                 ESAL_DATA},                    /* Memory access    */

                                 /* MEMORY REGION 8 - DDR SDRAM (cached)             */
                                 {(VOID *)0x80000000,            /* Physical Start   */
                                  (VOID *)0x80000000,            /* Virtual Start    */
                                  ESAL_GE_MEM_128M,              /* Size             */
                                  ESAL_WRITEBACK,                /* Cache type       */
                                  ESAL_RAM,                      /* Memory type      */
                                  ESAL_INST_AND_DATA},           /* Memory access    */

                                /* MEMORY REGION 9 - DDR SDRAM (uncached)           */
                                {(VOID *)0x88000000,            /* Physical Start   */
                                 (VOID *)0x88000000,            /* Virtual Start    */
                                 ESAL_GE_MEM_128M,              /* Size             */
                                 ESAL_NOCACHE,                  /* Cache type       */
                                 ESAL_RAM,                      /* Memory type      */
                                 ESAL_INST_AND_DATA},           /* Memory access    */

                                /* MEMORY REGION 10 - MEMORY MAPPED REGISTERS        */
                                {(VOID *)ESAL_DP_PERIPH_BASE,   /* Physical Start   */
                                 (VOID *)ESAL_DP_PERIPH_BASE,   /* Virtual Start    */
                                 ESAL_GE_MEM_4M,                /* Size             */
                                 ESAL_NOCACHE,                  /* Cache type       */
                                 ESAL_MEM_MAPPED,               /* Memory type      */
                                 ESAL_DATA}                     /* Memory access    */
};

and our boot mode is 01 (boot from AEMIF).

When the problem occurs and I stop execution in the debugger, I see that the MMU is off and the PC is in unmapped memory, sequentially executing bogus instructions consisting of all zero's.  Over time, the PC wraps back around to 0 and the problem corrects itself.

Has anyone seen this behavior and can you help me identify the root cause?  Thank you very much!

 

Best Regards,

Ron