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

CM4: Can processor halt itself by writing DHCSR

Hello,

As part of my diagnostic regime I wanted the diag to halt when completed.  It doesn't seem like it can.  It seems to keep running when I 

  CoreDebug->DHCSR = (0xA05FUL << CoreDebug_DHCSR_DBGKEY_Pos) |
                     CoreDebug_DHCSR_C_HALT_Msk |
                     CoreDebug_DHCSR_C_DEBUGEN_Msk;

Thanks, Tom

  • From the Cortex-M TRM (Chapter C1.6.2):

    "...• When C_DEBUGEN is set to 0, the processor ignores the values of all other bits in
    this register.
    • The DHCSR is typically accessed by a debugger, through the DAP. Software running
    on the processor can update all fields in this register, except C_DEBUGEN."

    So if  the debugger has set C_DEBUGEN, halting should be possible else not.

  • [0] bit C_DEBUGEN (register DHCSR) - This can only be written by AHB-AP and not by the core. It is ignored when written by the core, which cannot set or clear it.

    [1] bit C_HALT (register DHCSR) - The core can halt itself, but only if C_DEBUGEN is already 1.

    Try to set C_DEBUGEN in register DHCSR to 1 via debug access port and then halt the processor via setting C_HALT bit to 1 by the Core.