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
  • It is quite hard to guess what went wrong.

    First, when you write to AIRCR, is the core in privileged or unprivileged state? It will enter HardFault/BusFault if you try to write to AIRCR in unprivileged state.

    Secondly, after you triggered a system reset using AIRCR, but default it should read the vector table in address 0x0 for initial MSP value and reset vector. What is in your vector table at address 0x00000000? Does the reset vector (@0x00000004) really point to 0x00005001?

    Finally, assumed you have the correct vector table. Could you check if address 0x00005000 contains your firmware? Or if the linker place it somewhere else by mistake?

    regards,

    Joseph

Reply
  • It is quite hard to guess what went wrong.

    First, when you write to AIRCR, is the core in privileged or unprivileged state? It will enter HardFault/BusFault if you try to write to AIRCR in unprivileged state.

    Secondly, after you triggered a system reset using AIRCR, but default it should read the vector table in address 0x0 for initial MSP value and reset vector. What is in your vector table at address 0x00000000? Does the reset vector (@0x00000004) really point to 0x00005001?

    Finally, assumed you have the correct vector table. Could you check if address 0x00005000 contains your firmware? Or if the linker place it somewhere else by mistake?

    regards,

    Joseph

Children