diff options
author | Evan Hunter <ehunter@broadcom.com> | 2012-10-12 07:24:11 +1100 |
---|---|---|
committer | Spencer Oliver <spen@spen-soft.co.uk> | 2012-10-31 10:15:02 +0000 |
commit | 6663a788a53ee38f2d6950fe7802eae7855e01f3 (patch) | |
tree | 95374a65b490399c4a604627dd5f93fd94367b10 | |
parent | 452248af1d06cb1140b85f53ef4fdee1c746d807 (diff) |
Ensure Cortex-M reset wakes device from sleep (wfi/wfe)
Change-Id: Idb52ca3123bb3e2f7863ba1b82ac9b176d7cb094
Signed-off-by: Evan Hunter <ehunter@broadcom.com>
Reviewed-on: http://openocd.zylin.com/833
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
-rw-r--r-- | src/target/cortex_m.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/target/cortex_m.c b/src/target/cortex_m.c index 74505a85..81d6ccf4 100644 --- a/src/target/cortex_m.c +++ b/src/target/cortex_m.c @@ -973,6 +973,14 @@ static int cortex_m3_assert_reset(struct target *target) return retval; } + /* If the processor is sleeping in a WFI or WFE instruction, the + * C_HALT bit must be asserted to regain control */ + if (cortex_m3->dcb_dhcsr & S_SLEEP) { + retval = mem_ap_write_u32(swjdp, DCB_DHCSR, DBGKEY | C_HALT | C_DEBUGEN); + if (retval != ERROR_OK) + return retval; + } + retval = mem_ap_write_u32(swjdp, DCB_DCRDR, 0); if (retval != ERROR_OK) return retval; |