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.

Application code in NOR Flash gets stuck when an interrupt comes

Hi,

I am having a custom board designed with two NOR Flshes, one having boot code and other having application code:-

Now my uC boots from NOR Boot Flash, jumps to NOR App Flash but generates a dead loop when an interrupt is enabled in the app flash. Where is that I make mistake.

The .cmd file of the boot code is:-

/* SPECIFY THE SYSTEM MEMORY MAP */

MEMORY
{
        NOR_MEM         : org = 0x08000000  len = 0x4FFF        // 0x10000 changed            /* RAM */
        IRAM_MEM        : org = 0x402F0400  len = 0x1FBFF       /* RAM */
}

/* SPECIFY THE SECTIONS ALLOCATION INTO MEMORY */

SECTIONS
{
    .init    : {
                 bl_init.obj (.text)
               } load > 0x08000000
    .const   : load > NOR_MEM              /* GLOBAL CONSTANTS             */
    .cinit   : load > NOR_MEM
    .text    : load > NOR_MEM              /* CODE  */
    .ram_code: { bl_norexec.obj(.text)} load > NOR_MEM, run > 0x40300000
                 LOAD_START(ram_code_load_start)
                 RUN_START(ram_code_run_start)
                 SIZE(ram_code_size)

    .data    : load > IRAM_MEM              /* INITIALIZED GLOBAL AND STATIC VARIABLES. */
    .bss     : load > IRAM_MEM              /* UNINITIALIZED OR ZERO INITIALIZED */
                                            /* GLOBAL & STATIC VARIABLES.   */
                    RUN_START(bss_start)
                    RUN_END(bss_end)

    .stack   : load > 0x4030FF00            /* SOFTWARE SYSTEM STACK        */

}

The .cmd file of app code:-

//MEMORY
{
        NOR_MEM        : org = 0x10000000  len = 0xFFFFF        // 0x10000 changed            /* RAM */
        DDR_MEM        : org = 0x80000000  len =  0x7FFFFFF           /* RAM */
}

/* SPECIFY THE SECTIONS ALLOCATION INTO MEMORY */


//SECTIONS
{

    .init    : {uartEcho.obj (.text)} load > 0x10000000
    .text    : load > NOR_MEM          /* CODE                          */
    .const   : load > NOR_MEM          /* GLOBAL CONSTANTS              */

    .data    : load > NOR_MEM          /* INITIALIZED GLOBAL AND STATIC VARIABLES */
////    .data    : load > 0x80000000     /* INITIALIZED GLOBAL AND STATIC VARIABLES */
    .bss     : load > DDR_MEM          /* UNINITIALIZED OR ZERO INITIALIZED */
                                       /* GLOBAL & STATIC VARIABLES */
                    RUN_START(bss_start)
                    RUN_END(bss_end)
////   .stack   : load > 0x87FFFFF0           /* SOFTWARE SYSTEM STACK         */
   .stack   : load > 0x87FFFFF0           /* SOFTWARE SYSTEM STACK         */
}

NOW WHEN AN INTERRUPT COMES  FOLLOWING HAPPENS:- IT JUMPS TO IRQ LOCATION IN NATIVE BOOT LOADER AND STUCKS WHY IS IT SO????????????? WHY DOES IT GO TO NATIVE BOOT LOADER AT ALL... WHERE AM I WRONG??

00020000:   EA000232 B               0x208D0
00020004:   E59FF018 LDR             PC, 0x20024
00020008:   E59FF018 LDR             PC, 0x20028
0002000c:   E59FF018 LDR             PC, 0x2002C
00020010:   E59FF018 LDR             PC, 0x20030
00020014:   E59FF018 LDR             PC, 0x20034  
00020018:   E59FF018 LDR             PC, 0x20038  (IRQ Location)
0002001c:   E59FF018 LDR             PC, 0x2003C
00020020:   8A373D86 BHI             0xDEF640
00020024:   4030CE04 EORMIS          R12, R0, R4, LSL #28
00020028:   4030CE08 EORMIS          R12, R0, R8, LSL #28
0002002c:   4030CE0C EORMIS          R12, R0, R12, LSL #28
00020030:   4030CE10 EORMIS          R12, R0, R0, LSL R14
00020034:   4030CE14 EORMIS          R12, R0, R4, LSL R14
00020038:   4030CE18 EORMIS          R12, R0, R8, LSL R14
0002003c:   4030CE1C EORMIS          R12, R0, R12, LSL R14
00020020:   8A373D86 BHI             0xDEF640
00020024:   4030CE04 EORMIS          R12, R0, R4, LSL #28
00020028:   4030CE08 EORMIS          R12, R0, R8, LSL #28
0002002c:   4030CE0C EORMIS          R12, R0, R12, LSL #28
00020030:   4030CE10 EORMIS          R12, R0, R0, LSL R14
00020034:   4030CE14 EORMIS          R12, R0, R4, LSL R14 
00020038:   4030CE18 EORMIS          R12, R0, R8, LSL R14 
0002003c:   4030CE1C EORMIS          R12, R0, R12, LSL R14
00020040:   00000000 ANDEQ           R0, R0, R0   // Kind of NOP
00020044:   00000000 ANDEQ           R0, R0, R0   // Kind of NOP
00020048:   00000000 ANDEQ           R0, R0, R0
0002004c:   00000000 ANDEQ           R0, R0, R0
00020050:   00000000 ANDEQ           R0, R0, R0
00020054:   00000000 ANDEQ           R0, R0, R0
00020058:   00000000 ANDEQ           R0, R0, R0
0002005c:   00000000 ANDEQ           R0, R0, R0
00020060:   00000000 ANDEQ           R0, R0, R0
00020064:   00000000 ANDEQ           R0, R0, R0
00020068:   00000000 ANDEQ           R0, R0, R0
0002006c:   00000000 ANDEQ           R0, R0, R0
00020070:   00000000 ANDEQ           R0, R0, R0
00020074:   00000000 ANDEQ           R0, R0, R0
00020078:   00000000 ANDEQ           R0, R0, R0
0002007c:   00000000 ANDEQ           R0, R0, R0
00020080:   EAFFFFFE B               0x20080
00020084:   EAFFFFFE B               0x20084
00020088:   EAFFFFFE B               0x20088
0002008c:   EAFFFFFE B               0x2008C
00020090:   EAFFFFFE B               0x20090
00020094:   EAFFFFFE B               0x20094 -> Program Exception point , infinite while loop...