aboutsummaryrefslogtreecommitdiff
path: root/src/jtag
diff options
context:
space:
mode:
authorSpencer Oliver <spen@spen-soft.co.uk>2012-05-08 13:51:09 +0100
committerSpencer Oliver <spen@spen-soft.co.uk>2012-05-14 09:34:15 +0000
commitc102e448c3e1f58b09d9375d421087c5155e5be6 (patch)
treeb9976897938be4fec51cec29531c1eee6041ae33 /src/jtag
parent61672009c41f4f72deb399512774acf2105cf1b6 (diff)
downloadriscv-openocd-c102e448c3e1f58b09d9375d421087c5155e5be6.zip
riscv-openocd-c102e448c3e1f58b09d9375d421087c5155e5be6.tar.gz
riscv-openocd-c102e448c3e1f58b09d9375d421087c5155e5be6.tar.bz2
stlink: fix stlink api2 single step
This makes the newer v2 api behave as per the v1 api, eg. single stepping masks all interrupts. A better long term solution is to use same behaviour as a cortex-m3 target, see CORTEX_M3_ISRMASK_AUTO. Change-Id: Iaf9f9adf225cf274faaac938050bb996582aa98f Signed-off-by: Spencer Oliver <spen@spen-soft.co.uk> Reviewed-on: http://openocd.zylin.com/621 Tested-by: jenkins
Diffstat (limited to 'src/jtag')
-rw-r--r--src/jtag/drivers/stlink_usb.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/jtag/drivers/stlink_usb.c b/src/jtag/drivers/stlink_usb.c
index b4944f5..708b24b 100644
--- a/src/jtag/drivers/stlink_usb.c
+++ b/src/jtag/drivers/stlink_usb.c
@@ -872,8 +872,13 @@ static int stlink_usb_step(void *handle)
h = (struct stlink_usb_handle_s *)handle;
- if (h->jtag_api == STLINK_JTAG_API_V2)
- return stlink_usb_write_debug_reg(handle, DCB_DHCSR, DBGKEY|C_STEP|C_DEBUGEN);
+ if (h->jtag_api == STLINK_JTAG_API_V2) {
+ /* TODO: this emulates the v1 api, it should really use a similar auto mask isr
+ * that the cortex-m3 currently does. */
+ stlink_usb_write_debug_reg(handle, DCB_DHCSR, DBGKEY|C_HALT|C_MASKINTS|C_DEBUGEN);
+ stlink_usb_write_debug_reg(handle, DCB_DHCSR, DBGKEY|C_STEP|C_MASKINTS|C_DEBUGEN);
+ return stlink_usb_write_debug_reg(handle, DCB_DHCSR, DBGKEY|C_HALT|C_DEBUGEN);
+ }
stlink_usb_init_buffer(handle, STLINK_RX_EP, 2);