This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Freescale K22 Cortex-M4  cpu : why Core Lock Up state occurs ???

I am using Cortex m4 processor from freescale K22,

In boot loader i download my firmware and after that I do following steps to soft restart

   // Disable - WatchDog and disbled IRQ.

  WDT_DISABLE();

  Disable_ALL_IRQ();

  DisableInterrupts;

  // Small delay is required before Soft RESET.

  delay1S();

  // SOFT RESET For K20

    SCB_AIRCR = SCB_AIRCR_VECTKEY(0x05FA) | SCB_AIRCR_SYSRESETREQ(1) ;

Now when MCU gets soft restart signal, next time it goes into CORE LOCK UP state

Ref:

ARM Information Center

Also after soft restart, i take jump to firmware with ODD address so as to ensure it is thumb mode.

my firmware address is 0X5000 + 1

Then it remains in Hard fault mode until i give power on reset then this hard fault state never occurs.

Can any body tell why this Hard fault state occurs when I soft restart??????

Thanks in advance!!!

Parents
  • Thanks for prompt reply Joseph!!!!

    You have written

    "Could you check if address 0x00005000 contains your firmware? Or if the linker place it somewhere else by mistake?"

    ANS: I have observed that when I give Hard reset it jumps from boot loader to firmware (which is at address 0x5000) but at power ON reset only.

    and when I try to soft reset using below stated code 

    // Disable - WatchDog and disbled IRQ.

      WDT_DISABLE();

      Disable_ALL_IRQ();

      DisableInterrupts;

      // Small delay is required before Soft RESET.

      delay1S();

      // SOFT RESET For K20

        SCB_AIRCR = SCB_AIRCR_VECTKEY(0x05FA) | SCB_AIRCR_SYSRESETREQ(1) ;

    Now when MCU gets soft restart signal, next time it goes into CORE LOCK UP state

    and this lock up state continues to occur until I MUST give POWER ON RESET.

    In both types of reset it will check for valid firmware in boot loader and will jump to its address 0x5000.

    It jumps to this address only when there is valid POWER ON RESET

    But I don't know why, it doesn't go to firmware in SOFT RESTART case???? or else why core lock up occure????

    Thanks

Reply
  • Thanks for prompt reply Joseph!!!!

    You have written

    "Could you check if address 0x00005000 contains your firmware? Or if the linker place it somewhere else by mistake?"

    ANS: I have observed that when I give Hard reset it jumps from boot loader to firmware (which is at address 0x5000) but at power ON reset only.

    and when I try to soft reset using below stated code 

    // Disable - WatchDog and disbled IRQ.

      WDT_DISABLE();

      Disable_ALL_IRQ();

      DisableInterrupts;

      // Small delay is required before Soft RESET.

      delay1S();

      // SOFT RESET For K20

        SCB_AIRCR = SCB_AIRCR_VECTKEY(0x05FA) | SCB_AIRCR_SYSRESETREQ(1) ;

    Now when MCU gets soft restart signal, next time it goes into CORE LOCK UP state

    and this lock up state continues to occur until I MUST give POWER ON RESET.

    In both types of reset it will check for valid firmware in boot loader and will jump to its address 0x5000.

    It jumps to this address only when there is valid POWER ON RESET

    But I don't know why, it doesn't go to firmware in SOFT RESTART case???? or else why core lock up occure????

    Thanks

Children